<?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>231253</bug_id>
          
          <creation_ts>2021-10-05 14:15:35 -0700</creation_ts>
          <short_desc>[GPU Process] [Filters 23/23] Implement filters in GPU Process</short_desc>
          <delta_ts>2024-01-15 17:06:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=233843</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=233849</see_also>
          <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>
          <dependson>267561</dependson>
    
    <dependson>225088</dependson>
    
    <dependson>232369</dependson>
    
    <dependson>232413</dependson>
    
    <dependson>232457</dependson>
    
    <dependson>232469</dependson>
    
    <dependson>232551</dependson>
    
    <dependson>232705</dependson>
    
    <dependson>232831</dependson>
    
    <dependson>232832</dependson>
    
    <dependson>232833</dependson>
    
    <dependson>232840</dependson>
    
    <dependson>232841</dependson>
    
    <dependson>232842</dependson>
    
    <dependson>232843</dependson>
    
    <dependson>232844</dependson>
    
    <dependson>232845</dependson>
    
    <dependson>232972</dependson>
    
    <dependson>233008</dependson>
    
    <dependson>233214</dependson>
    
    <dependson>233487</dependson>
    
    <dependson>233500</dependson>
    
    <dependson>233510</dependson>
    
    <dependson>233516</dependson>
    
    <dependson>233613</dependson>
    
    <dependson>233618</dependson>
    
    <dependson>233843</dependson>
    
    <dependson>233849</dependson>
    
    <dependson>233893</dependson>
    
    <dependson>233973</dependson>
    
    <dependson>233989</dependson>
    
    <dependson>234024</dependson>
    
    <dependson>234027</dependson>
    
    <dependson>234086</dependson>
    
    <dependson>234099</dependson>
    
    <dependson>234108</dependson>
    
    <dependson>234109</dependson>
    
    <dependson>234130</dependson>
    
    <dependson>234918</dependson>
    
    <dependson>235376</dependson>
    
    <dependson>239984</dependson>
    
    <dependson>240269</dependson>
    
    <dependson>240274</dependson>
    
    <dependson>240777</dependson>
    
    <dependson>240807</dependson>
    
    <dependson>240808</dependson>
    
    <dependson>240809</dependson>
    
    <dependson>240810</dependson>
    
    <dependson>240811</dependson>
    
    <dependson>241535</dependson>
    
    <dependson>242359</dependson>
    
    <dependson>243415</dependson>
    
    <dependson>243432</dependson>
    
    <dependson>267349</dependson>
          <blocked>236508</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1800756</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-05 14:15:35 -0700</bug_when>
    <thetext>Move applying the effects and caching the results to GPUProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800788</commentid>
    <comment_count>1</comment_count>
      <attachid>440274</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-05 15:08:35 -0700</bug_when>
    <thetext>Created attachment 440274
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800841</commentid>
    <comment_count>2</comment_count>
      <attachid>440290</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-05 16:34:27 -0700</bug_when>
    <thetext>Created attachment 440290
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800876</commentid>
    <comment_count>3</comment_count>
      <attachid>440304</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-05 17:10:40 -0700</bug_when>
    <thetext>Created attachment 440304
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801006</commentid>
    <comment_count>4</comment_count>
      <attachid>440349</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-06 02:44:15 -0700</bug_when>
    <thetext>Created attachment 440349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801406</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-06 16:26:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/83957362&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802561</commentid>
    <comment_count>6</comment_count>
      <attachid>440768</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-11 02:46:37 -0700</bug_when>
    <thetext>Created attachment 440768
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802562</commentid>
    <comment_count>7</comment_count>
      <attachid>440769</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-11 03:04:10 -0700</bug_when>
    <thetext>Created attachment 440769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803024</commentid>
    <comment_count>8</comment_count>
      <attachid>440906</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-12 01:22:46 -0700</bug_when>
    <thetext>Created attachment 440906
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803036</commentid>
    <comment_count>9</comment_count>
      <attachid>440911</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-12 02:05:42 -0700</bug_when>
    <thetext>Created attachment 440911
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805673</commentid>
    <comment_count>10</comment_count>
      <attachid>441629</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-18 12:11:59 -0700</bug_when>
    <thetext>Created attachment 441629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807570</commentid>
    <comment_count>11</comment_count>
      <attachid>442131</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-22 00:57:31 -0700</bug_when>
    <thetext>Created attachment 442131
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807577</commentid>
    <comment_count>12</comment_count>
      <attachid>442133</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-22 01:17:40 -0700</bug_when>
    <thetext>Created attachment 442133
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808326</commentid>
    <comment_count>13</comment_count>
      <attachid>442350</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-25 02:36:07 -0700</bug_when>
    <thetext>Created attachment 442350
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808327</commentid>
    <comment_count>14</comment_count>
      <attachid>442351</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-25 02:44:09 -0700</bug_when>
    <thetext>Created attachment 442351
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808328</commentid>
    <comment_count>15</comment_count>
      <attachid>442352</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-25 03:05:33 -0700</bug_when>
    <thetext>Created attachment 442352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808766</commentid>
    <comment_count>16</comment_count>
      <attachid>442466</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-25 23:06:01 -0700</bug_when>
    <thetext>Created attachment 442466
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821735</commentid>
    <comment_count>17</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-08 12:51:33 -0800</bug_when>
    <thetext>Let&apos;s have this bug as an umbrella for all GPUProcess filter feature bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830631</commentid>
    <comment_count>18</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-01-13 10:59:44 -0800</bug_when>
    <thetext>*** Bug 219423 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1955559</commentid>
    <comment_count>19</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2023-05-15 18:03:10 -0700</bug_when>
    <thetext>All the dependent bugs were resolved. Resolve as Fixed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440274</attachid>
            <date>2021-10-05 15:08:35 -0700</date>
            <delta_ts>2021-10-05 16:34:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211005150833.patch</filename>
            <type>text/plain</type>
            <size>669549</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk5NzYzMzY3MzJmNjUx
MTBlM2RkMThiNDcxYWI5MThkZmNlMmY5My4uMzhjNzkxMDMyYzk5MzYwNjQ5YTU3YWZmMjEwMmZh
YWFiNjQwMDc0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxOSBAQAorMjAyMS0xMC0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXSVAuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbTog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFn
ZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2U6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVC
bGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1
ZVJvdGF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6
CisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldENvbXBvc2l0ZU9wZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvc2l0ZTo6c2V0SzIpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLNCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZTo6Y29tcG9zaXRlT3BlcmF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6Om9wZXJhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBSR0JBVmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVy
aW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmdldFBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlm
ZnVzZUNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdo
dGluZzo6ZGlmZnVzZUNvbnN0YW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2Vt
ZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp4
Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
Ojp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0Y0NvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6b3BhY2l0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BT
aGFkb3c6OnNldFNoYWRvd0NvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6c2hhZG93T3BhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRURyb3BTaGFkb3c6OnNldFNoYWRvd09wYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6RkVGbG9vZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFRmxvb2Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6
Om9wYWNpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoZ2F1c3NpYW5LZXJuZWxG
YWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsUG9zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlh
dGlvblkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldEVk
Z2VNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9ubHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
dGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3Rk
RGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXREaWZm
dXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3BlY3VsYXJD
b25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhY
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9y
bWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJp
b3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVy
aWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmNv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c291cmNlIGNvbnN0KToKKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpsaWdodGlu
Z0NvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6Omxp
Z2h0U291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93Ojp0b3BMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0b3AgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OmNlbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0
UmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OnNldEJvdHRvbVJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1l
cmdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TWVyZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0b3IgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVj
dWxhckxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0
aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNwZWN1bGFy
Q29uc3RhbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpzcGVjdWxhckV4cG9uZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRp
bGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmRyYXdpbmdSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6RkVUaWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lYKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlOjpzZXROdW1PY3RhdmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5j
ZTo6c2V0U2VlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRp
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZHJhd2luZ1JlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZp
bGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YXBwbHlQbGF0Zm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVj
dEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0b3Rh
bE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUlt
YWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRp
cGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
bnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5wdXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVz
dWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNB
bHBoYUltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhh
c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRI
YXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNX
aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdo
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhh
c0hlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVk
QWJzb2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9wZXJhdGluZ0NvbG9yU3BhY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNw
YWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29s
b3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6bm9ybWFsaXplZEZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1
bmN0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpvdXRzZXRzIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6RmlsdGVyR2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heERyYXdpbmdSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpwcmltaXRpdmVTdWJy
ZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heFByaW1p
dGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRs
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZpbHRlclJlZ2lvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291cmNlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Ojp0cmFuc2Zvcm1Ub0Fic29sdXRl
UmVjdCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
dXRwdXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGwuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OkZpbHRlck91dHB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OmNyZWF0ZUZpbHRlclJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0cHV0OjpnZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJPdXRwdXQ6OnJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0
cHV0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlZmVyZW5jZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6YWJzb2x1dGVE
cmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29weVBpeGVsQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRv
Q29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZXN1bHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cHJpbWl0aXZlU3Vi
cmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmlzQWxwaGFJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnNldElzQWxwaGFJbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKTogRGVsZXRlZC4K
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmVmZmVjdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHlT
b2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5U29mdHdh
cmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVM
aWdodGluZ1NvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6YXBw
bHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAo
V2ViQ29yZTo6RkVNZXJnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjphcHBseVNvZnR3YXJlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZz
ZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNv
ZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
UmVzdWx0U29mdHdhcmU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmguCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpD
U1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTZXBpYUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNp
dHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9z
b3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5w
dXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRS
ZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpi
dWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0
UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmRlY29kZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdp
bkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFw
cGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBy
aW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBv
c2VkRW51bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29t
cG9zaXRlT3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0
eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhw
b3NlZEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25U
eXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlU
cmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9w
U2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZCBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZF
TWVyZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9s
b2d5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xv
Z3lFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9s
b2d5T3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6ZnJvbVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsOgorICAg
ICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0
KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdGRVNwb3RMaWdodEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRpbGVFbGVtZW50OjpidWlsZCBjb25zdCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmli
dXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHlTb2Z0
d2FyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJl
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjph
ZGROYW1lZEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6Om5hbWVkRWZmZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2V0dXBCdWlsdGluRWZmZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmRlY29k
ZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckdlb21ldHJ5OjpTVkdGaWx0ZXJHZW9tZXRyeSk6CisgICAgICAgICogeG1sL1hQYXRo
R3JhbW1hci5jcHA6CisgICAgICAgICogeG1sL1hQYXRoR3JhbW1hci55OgorCiAyMDIxLTA5LTI4
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBbQmlnU3VyIHdr
MiBEZWJ1ZyBpT1MxNCBdIHdlYnJ0Yy92aWRlby1tdXRlLmh0bWwgaXMgYSBmbGFreSBmYWlsdXJl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCmluZGV4IDJlZWViNDI2OTU3YTBmZmVjNjJjMTUyODkxZDI1MDZiMWJjZDhhYTkuLmQ5
NzlmMmNhNmJlNmM4ZjFlZGE5NGJjZTBiNTcyYzRlZmIwNWJlODcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzIgQEAKKzIwMjEtMTAtMDUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+
CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBFbmFibGUgZmlsdGVycyBpbiBHUFUgUHJvY2Vzcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjUzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIp
OgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
OgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5t
ZXNzYWdlcy5pbjoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVu
Y2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlOjpGaWx0
ZXJHZW9tZXRyeVJlZmVyZW5jZSk6CisgICAgICAgIChJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJl
bmNlOjp0YWtlR2VvbWV0cnkpOgorICAgICAgICAoSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5j
ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2U6
OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5oOiBBZGRl
ZC4KKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjpGaWx0ZXJSZWZlcmVuY2UpOgorICAg
ICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OnRha2VGaWx0ZXIpOgorICAgICAgICAoSVBDOjpG
aWx0ZXJSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVy
ZW5jZTo6ZGVjb2RlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAg
ICAgICAgKHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQpOgorICAgICAgICAq
IFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldEZpbHRlcmVkSW1hZ2VG
b3JJbWFnZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6CisKIDIwMjEtMDktMjggIEJyZW50IEZ1bGdoYW0gIDxi
ZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRXhwbGljaXRseSBkZW55ICdzeXN0ZW0tcHJp
dmlsZWdlJyBpbiB0aGUgc2FuZGJveCBwcm9maWxlIGFzIGEgaGFyZGVuaW5nIG1lYXN1cmUgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CmluZGV4IGU0M2FmZGNhZWYyMGRmYzQzYTVmMDY5Y2Q0YWQyZGFhMTZkOWM5ZWMu
LjdkNDlmM2QyYzRlMjFjODcxMTA3NGNkYmE1ZGQ3NTNjMjUzMzFmMmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CkBAIC0yMDQxLDE0ICsyMDQxLDM1IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAotcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9ucy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJl
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5z
ZmVyU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29t
cG9zaXRlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
Q29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxvb2RTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdh
cmUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvaXNvL0lTT09yaWdpbmFsRm9ybWF0Qm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lT
T1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94LmNwcApAQCAtMjYyOSw3ICsyNjUwLDYgQEAgc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWlu
ZXIuY3BwCiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAotc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5jcHAKIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwCiBzdmcvcHJv
cGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmNwcAogc3ZnL3By
b3BlcnRpZXMvU1ZHQXR0cmlidXRlQW5pbWF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApp
bmRleCA2YzRjZjA3NDYwYmFkZWJjMzMxNzE2OTA4MzlhNTdiMGQwOWE0ZjkxLi5iYzJiMmU5YmU0
MzZjY2UyMDhmZTlhZmYwNjU4MTEzNjdjM2JmZTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQK
QEAgLTM5NSw3ICszOTUsOCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVURldmljZU1ldGFsLm1tCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDAyOGU1ZDk1YzY5YjZmNzRh
MzUyZTMwOWRmOTJlMTA1MTA2YWI3Mi4uMjA3NjQ0MjA4M2FhMjU5MGNjOTJiZjcyZTI1OTA4MGFl
ZGQ1MDI4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMjMzLDcgKzIzMyw2IEBACiAJCTA4MTY2OEQ0MTI1NjAzQkYwMDZGMjVE
RSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODE2NjhEMjEyNTYwM0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5r
QnVpbGRlci5oICovOyB9OwogCQkwODE2NjhEQTEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExh
eW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAqLzsg
fTsKIAkJMDgxQUE4REExMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxQUE4RDkxMTEx
MjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oICovOyB9OwotCQkwODFFQkYzQjBG
RDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNW
R0ZpbHRlckJ1aWxkZXIuaCAqLzsgfTsKIAkJMDgzREFFQTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJMDgzREFFQTkwRjAxQTdGQjAwMzQyNzU0IC8qIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTUwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5oICovOyB9OwogCQkwODQ1NjgwODEyQjkwREE2MDA5NjBBOUYgLyog
Rm9udE1ldHJpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0cmljcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NzQsOCArNzczLDYgQEAK
IAkJMkFFRjZGREQyNkU3RUNDRjAwMzI2RDAyIC8qIENTU051bWVyaWNUeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUVGNkZDRTI2RTcxRjJEMDAz
MjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCAqLzsgfTsKIAkJMkIzNjVDODQxNTI1MTE5RTAwOTFE
MjdCIC8qIFJlbmRlclNWR0VsbGlwc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJCNDIzNUEwMTUyNTBGNjAwMERCQkNEOCAvKiBSZW5kZXJTVkdFbGxp
cHNlLmggKi87IH07CiAJCTJCRThFMkM3MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJz
ZXRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCAqLzsg
fTsKLQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQzg1NjUzMzI0
QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLzsgfTsKLQkJMkNBQTRB
M0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0FBNEEzOTI0QkUx
OEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCAqLzsgfTsKIAkJ
MkQwNjIxNDQxREE2MzlCNjAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQy
MURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi87IH07
CiAJCTJEMDYyMTQ1MURBNjM5QkEwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIx
NDMxREE2Mzk4ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggKi87IH07
CiAJCTJEMDYyMTREMURBNjNBOEIwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDkxREE2M0E3
OTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgKi87IH07CkBAIC0yMjc3LDYgKzIyNzQs
MTUgQEAKIAkJNzFFQURDRDgyMjA4N0U3MjAwNjVBNDVGIC8qIFBvaW50ZXJJRC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFQURDRDYyMjA4N0U2RDAw
NjVBNDVGIC8qIFBvaW50ZXJJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZl
Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRUZD
RUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUYwNUY4MDI1MTI0NDJFMDA3MUU2
OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcxRjA1RjdFMjUxMjQ0MEMwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0
eUFuaW1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTcyMDBDRjU5MjcwOUFCRkIwMDUxNUMyNCAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDY5MjcwM0Q4RTUwMDNDNUFB
RSAvKiBGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk3MjAwQ0Y1QTI3MDlBQzExMDA1MTVDMjQgLyogRmlsdGVyRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDY2MjcwM0Q2
NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBDRjVCMjcwOUFDQjYwMDUxNUMyNCAvKiBGaWx0
ZXJSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyQzkwQTNBMjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjAwQ0Y1QzI3MDlBRDNBMDA1
MTVDMjQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMUNBOEY1MjcwMzk0NTYwMEMwREQ2NSAvKiBGaWx0ZXJS
ZXByZXNlbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyMDBDRjVEMjcwOUFEQ0UwMDUxNUMyNCAvKiBGaWx0ZXJPdXRwdXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOTc4RDQzMjZGRTlE
RTcwMEZEMkM1NiAvKiBGaWx0ZXJPdXRwdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MjAwQ0Y2NTI3MEMwNjE3MDA1MTVDMjQgLyogRmlsdGVy
R2VvbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyQTgzRDgzMjcwNjY3NEMwMDNDNUFBRSAvKiBGaWx0ZXJHZW9tZXRyeS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBDRjY4MjcwQzQ3ODcw
MDUxNUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyMDBDRjY3MjcwQzQ3MTQwMDUxNUMyNCAvKiBGaWx0ZXJSZWZl
cmVuY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjAwQ0Y2QjI3MENENjA5MDA1MTVDMjQgLyogQ1NTRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2RDI3MDNEQzNBMDAzQzVBQUUg
LyogQ1NTRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNzIwMENGNkMyNzBDRDYxOTAwNTE1QzI0IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENkIyNzAzREE5QTAw
M0M1QUFFIC8qIFNWR0ZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyMTQ0MzMzMjIzRUM4QjAwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjMy
MjNCMkEyNDAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNW
R1Byb3BlcnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxQjQ5NzQy
NTEyQkEzQjAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNCIC8q
IEltYWdlQml0bWFwQmFja2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0yNjk3LDggKzI3MDMsNiBAQAogCQk4NDIyNDE5NDEwN0U3OEE3MDA3
NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyMjQxOTExMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaCAqLzsgfTsKIAkJODQzMDBCRDYxMjBDOUFBQzAwMjE5NTRBIC8q
IFNWR1BhdGhTdHJpbmdTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0MzAwQkQ1MTIwQzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291
cmNlLmggKi87IH07CiAJCTg0MzAwQkQ4MTIwQzlBRDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDMwMEJE
NzEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0aFNvdXJjZS5oICovOyB9OwotCQk4NDVFNzJGODBG
RDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGNzBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggKi87
IH07Ci0JCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkZBMEZEMjYyMzkwMEE4
N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLzsgfTsKIAkJODQ2NTBFN0UyMzg3QUQ3RDAwNjI2NkUyIC8q
IE1lZGlhUXVlcnlMaXN0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0NjUwRTdDMjM4N0FEN0MwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2
ZW50LmggKi87IH07CiAJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRT
b3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAqLzsgfTsKIAkJ
ODQ3MzBENzkxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDVDMTI0OEYwQjMwMEQz
QTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggKi87IH07CkBAIC02MDUyLDggKzYwNTYsNiBAQAog
CQkwODE2NjhENzEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxNjY4RDgxMjU2MDNENTAwNkYyNURF
IC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHVGV4dExheW91dEVuZ2luZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
ODFBQThEOTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVy
QnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0
ZXJCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJGMzkwRkQz
NEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwODNEQUVBMjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVB
MzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8q
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjIwMCw4ICs2MjAyLDYgQEAKIAkJMEY0OTY2QTgxREI0MEM0
MzAwQTI3NEJCIC8qIEpTRE9NUG9pbnRSZWFkT25seS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0RPTVBvaW50UmVhZE9ubHkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjQ5NjZBOTFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2ludFJlYWRP
bmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25s
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFC
MDIgLyogU2Nyb2xsVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQg
LyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENT
U0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgzMjEzQjFC
QjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEz
Qjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAv
KiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzA5LDEwICs3MzA5LDYgQEAKIAkJ
MkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxNZXRhQ2hh
cnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4
QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyog
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyRWZmZWN0
UmVuZGVyZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQ0FBNEEzNzI0QkUx
OEExMDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQyMURB
NjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQzMURBNjM5ODgwMEE3RkIy
NiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRDA2MjE0NzFEQTYzQTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlO
ZWVkZWRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJL
aXRNZWRpYUtleU5lZWRlZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEwNDQ0LDEwICsxMDQ0MCwyMCBAQAogCQk3MUY2RUU0MTI1NUVERjlDMDBGQzRDNUIgLyogR3Jp
ZFRyYWNrU2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmlk
VHJhY2tTaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGOTM2RjcxREQ0
Rjk5QjAwOTIyQ0M3IC8qIHRyYWNrcy1zdXBwb3J0LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5q
YXZhc2NyaXB0OyBwYXRoID0gInRyYWNrcy1zdXBwb3J0LmpzIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRvdWNo
UG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50
cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjU3MjcwNzhDNDIwMDUx
NUMyNCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXJHZW9t
ZXRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAwQ0Y1RTI3MEFEMTM3MDA1
MTVDMjQgLyogRmlsdGVyT3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlck91dHB1
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjVGMjcwQkIwMTkwMDUx
NUMyNCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjEyNzBCQkRBODAwNTE1QzI0IC8qIEZpbHRlclJlc3Vs
dENvcmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjIyNzBCQkRGQjAwNTE1QzI0IC8qIEZp
bHRlclJlc3VsdENvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEZpbHRlclJlc3VsdENvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzIwMENGNjMyNzBCQzJDODAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjQyNzBCQzJDODAwNTE1QzI0IC8qIEZpbHRlclJl
c3VsdFNvZnR3YXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3VsdFNvZnR3YXJlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjY2MjcwQzMyMUQwMDUxNUMyNCAvKiBG
aWx0ZXJHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJHZW9tZXRyeS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjY3MjcwQzQ3MTQwMDUxNUMyNCAv
KiBGaWx0ZXJSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVmZXJlbmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBT
VkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1
ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENB
RDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVl
UHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxQjQ5NkYyNTEyQUMw
NDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bWFnZUJpdG1hcEJhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjFC
NDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEltYWdlQml0bWFwQmFja2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjFDQThGNTI3MDM5NDU2MDBDMERENjUgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmlsdGVyUmVwcmVzZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzI0MkFDOTUyNTc1OEZFMDAwNUE5Q0YxIC8qIERpc3BsYXlMaXN0Rmx1c2hJZGVu
dGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0Rmx1
c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEz
QTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMDQ3Miw5ICsxMDQ3OCwzNSBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAwNDQy
RTggLyogRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBF
WFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJFQTZB
MDAwMDQ0MkU4IC8qIEVYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVBNkEw
MDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyOTc4RDQzMjZGRTlERTcwMEZEMkM1
NiAvKiBGaWx0ZXJPdXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyT3V0cHV0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOTlCQzY0MjNENjg2QTYwMENDNjg4MyAvKiBBbHBo
YVByZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFscGhhUHJlbXVsdGlwbGljYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2
ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjlEMDUyRTI1MzEzRTI2MDA0MjIwOTggLyog
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2
NjI3MDNENjZEMDAzQzVBQUUgLyogRmlsdGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmls
dGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENjkyNzAz
RDhFNTAwM0M1QUFFIC8qIEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkEyNzAzREE5
QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTVkdGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q2QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkE4M0Q2QzI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTgzRDZFMjcwM0RGRDgwMDNDNUFBRSAvKiBGaWx0ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBODNENzAyNzA1NzUwNDAwM0M1QUFFIC8qIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkE4M0Q3MTI3MDU3ODUyMDAzQzVBQUUgLyogU291cmNlQWxwaGFT
b2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzIyNzA1NzlDNzAwM0M1QUFFIC8q
IEZFT2Zmc2V0U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVPZmZzZXRTb2Z0d2Fy
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDczMjcwNTdDQkUwMDND
NUFBRSAvKiBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1v
cnBob2xvZ3lTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDc0MjcwNTgzN0QwMDNDNUFBRSAvKiBGRU1lcmdlU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRkVNZXJnZVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBODNENzUyNzA1ODVCODAwM0M1QUFFIC8qIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkE4M0Q3NjI3MDU4OTAyMDAzQzVBQUUgLyogRkVDb21wb3NpdGVT
b2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzgyNzA1OEMwMzAwM0M1QUFFIC8q
IEZFRmxvb2RTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUZsb29kU29mdHdhcmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3QTI3MDVBREZBMDAzQzVB
QUUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQTgzRDdCMjcwNUIyQzkwMDNDNUFBRSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3QzI3MDVCRDg2MDAzQzVBQUUgLyogRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29udm9sdmVN
YXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdE
MjcwNUM3RUYwMDNDNUFBRSAvKiBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkE4M0Q3RTI3MDYzMzZCMDAzQzVBQUUgLyogRkVEcm9wU2hhZG93
U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEcm9wU2hhZG93U29mdHdhcmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3RjI3MDYzRjRDMDAzQzVBQUUg
LyogRkVUaWxlU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVUaWxlU29mdHdhcmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MDI3MDY0MUI2MDAzQzVB
QUUgLyogRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVUdXJi
dWxlbmNlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4
MTI3MDY0NkUyMDAzQzVBQUUgLyogRkVMaWdodGluZ1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZFTGlnaHRpbmdTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQTgzRDgyMjcwNjUxMUIwMDNDNUFBRSAvKiBGRUJsZW5kU29mdHdhcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRkVCbGVuZFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJBODNEODMyNzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZpbHRlckdlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQkFDM0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFD
IC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJC
QUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTA0ODYsNiArMTA1MTgsOCBAQAogCQk3MkJBQzNBQzIzRTFF
NTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBC
MDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzkw
QTM5MjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRmlsdGVyUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJDOTBB
M0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0
ZXJSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQy
RjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0
MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMTQxNyw5ICsxMTQ1MSw2IEBACiAJCTg0MzAwQkQ1MTIwQzlBQUMwMDIxOTU0
QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NDMwMEJEOTEyMEM5QUVEMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU3RyaW5n
U291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcyRjcwRkQyNjFF
RTAwQTg3RDc5IC8qIEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
aWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcyRjkwRkQyNjIzOTAw
QTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJG
QTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1
MEU3QzIzODdBRDdDMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdGMjM4N0FEOEEwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5
TGlzdEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlh
UXVlcnlMaXN0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1MEU4
MDIzODdBRDhCMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gTWVkaWFRdWVyeUxpc3RFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xOTM3NCw4ICsxOTQwNSw5IEBACiAJCTJDRTExODk4MjRDMjQwMkMwMDM3NzBF
OSAvKiBjb3JlaW1hZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAotCQkJCTJDQUE0QTM5MjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZS5oICovLAotCQkJCTJDQUE0QTM3MjRCRTE4QTEwMDlERUU3MCAvKiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZS5tbSAqLywKKwkJCQk3MjAwQ0Y2MTI3MEJCREE4MDA1MTVDMjQg
LyogRmlsdGVyUmVzdWx0Q29yZUltYWdlLmggKi8sCisJCQkJNzIwMENGNjIyNzBCQkRGQjAwNTE1
QzI0IC8qIEZpbHRlclJlc3VsdENvcmVJbWFnZS5tbSAqLywKKwkJCQk3MjAwQ0Y1RjI3MEJCMDE5
MDA1MTVDMjQgLyogU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbSAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gY29yZWltYWdlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTIyOTU5LDYgKzIy
OTkxLDMyIEBACiAJCQlwYXRoID0gIm1vZGVsLWVsZW1lbnQiOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKKwkJNzJBODNENkYyNzA1NzREMDAwM0M1QUFFIC8qIHNvZnR3YXJlICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MkE4M0Q4MjI3
MDY1MTFCMDAzQzVBQUUgLyogRkVCbGVuZFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NTI3
MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4
M0Q3QTI3MDVBREZBMDAzQzVBQUUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcCAq
LywKKwkJCQk3MkE4M0Q3NjI3MDU4OTAyMDAzQzVBQUUgLyogRkVDb21wb3NpdGVTb2Z0d2FyZS5j
cHAgKi8sCisJCQkJNzJBODNEN0MyNzA1QkQ4NjAwM0M1QUFFIC8qIEZFQ29udm9sdmVNYXRyaXhT
b2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFFIC8qIEZFRGlzcGxh
Y2VtZW50TWFwU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdFMjcwNjMzNkIwMDNDNUFBRSAv
KiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzgyNzA1OEMwMzAwM0M1
QUFFIC8qIEZFRmxvb2RTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0IyNzA1QjJDOTAwM0M1
QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDgxMjcwNjQ2
RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc0Mjcw
NTgzN0QwMDNDNUFBRSAvKiBGRU1lcmdlU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDczMjcw
NTdDQkUwMDNDNUFBRSAvKiBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNE
NzIyNzA1NzlDNzAwM0M1QUFFIC8qIEZFT2Zmc2V0U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgz
RDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNE
ODAyNzA2NDFCNjAwM0M1QUFFIC8qIEZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3
MjAwQ0Y2MzI3MEJDMkM4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwICovLAor
CQkJCTcyMDBDRjY0MjcwQkMyQzgwMDUxNUMyNCAvKiBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oICov
LAorCQkJCTcyQTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNw
cCAqLywKKwkJCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNlR3JhcGhpY1NvZnR3
YXJlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gc29mdHdhcmU7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OwogCQk3QzAxMUYzQzI0RkFEMzYwMDA1QkVGMTAgLyogU2V0dGluZ3NU
ZW1wbGF0ZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MjUwMDIsNiArMjUwNjAsNyBAQAogCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0ODEgLyogZmlsdGVy
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNzJBODNE
NkYyNzA1NzREMDAwM0M1QUFFIC8qIHNvZnR3YXJlICovLAogCQkJCUExRTExNTQzMTMwMTVDM0Qw
MDU0QUM4QyAvKiBEaXN0YW50TGlnaHRTb3VyY2UuY3BwICovLAogCQkJCTg0NzMwRDVBMTI0OEYw
QjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAqLywKIAkJCQlBNzVFOEI4MDBFMURF
MkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5jcHAgKi8sCkBAIC0yNTAzOCwxNSArMjUwOTcsMjMgQEAK
IAkJCQk4NDczMEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmggKi8sCiAJCQkJODQ3MzBE
NkYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgKi8sCiAJCQkJODQ3MzBENzAx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovLAotCQkJCTg0NUU3MkY3MEZEMjYx
RUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2RTI3MDNERkQ4MDAzQzVBQUUg
LyogRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVy
LmggKi8sCiAJCQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAg
Ki8sCiAJCQkJMDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAot
CQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAg
Ki8sCi0JCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVy
LmggKi8sCisJCQkJNzJBODNENjYyNzAzRDY2RDAwM0M1QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmgg
Ki8sCisJCQkJNzIwMENGNjYyNzBDMzIxRDAwNTE1QzI0IC8qIEZpbHRlckdlb21ldHJ5LmNwcCAq
LywKKwkJCQk3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLywK
IAkJCQk0OUVDRUI2MzE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywK
IAkJCQk0OUVDRUI2NDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJ
CQkJNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLAog
CQkJCTQ5RUNFQjY2MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggKi8sCisJ
CQkJNzIwMENGNUUyNzBBRDEzNzAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5jcHAgKi8sCisJCQkJ
NzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZpbHRlck91dHB1dC5oICovLAorCQkJCTcyMDBD
RjY3MjcwQzQ3MTQwMDUxNUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLywKKwkJCQk3MjFDQThG
NTI3MDM5NDU2MDBDMERENjUgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLywKKwkJCQk3MkM5
MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmNwcCAqLywKKwkJCQk3MkM5MEEz
QTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmggKi8sCiAJCQkJODQ3MzBENzQxMjQ4
RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi8sCiAJCQkJQTFFMTE1NDUxMzAxNUM0RTAw
NTRBQzhDIC8qIFBvaW50TGlnaHRTb3VyY2UuY3BwICovLAogCQkJCTg0NzMwRDc1MTI0OEYwQjMw
MEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggKi8sCkBAIC0yNjgwNSwxMCArMjY4NzIsOSBA
QAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjI1NTk4RUEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZF
SW1hZ2UuY3BwICovLAogCQkJCUIyNTU5OEVCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdl
LmggKi8sCi0JCQkJODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8s
Ci0JCQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oICovLAotCQkJCTA4
MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCAqLywKLQkJCQkw
ODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovLAorCQkJCTcy
QTgzRDZBMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuY3BwICovLAorCQkJCTcyQTgzRDZC
MjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuaCAqLywKKwkJCQk3MjAwQ0Y1NzI3MDc4QzQy
MDA1MTVDMjQgLyogU1ZHRmlsdGVyR2VvbWV0cnkuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZmls
dGVyczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yOTg4Nyw4ICsyOTk1Myw4IEBA
CiAJCQkJQ0E3RTlCNDcyNDM2MURDNTAwNEU4OUY2IC8qIENvbnRlbnRmdWxQYWludENoZWNrZXIu
aCAqLywKIAkJCQk5MzkyRjE0RjBBRDE4NjIzMDA2OTFCRDQgLyogQ291bnRlck5vZGUuY3BwICov
LAogCQkJCTkzOTJGMTRCMEFEMTg2MUIwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5oICovLAotCQkJ
CTBGNTNGQjgxMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuY3BwICovLAotCQkJCTBGNTNG
QjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2QzI3MDNE
QzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2RDI3MDNEQzNBMDAz
QzVBQUUgLyogQ1NTRmlsdGVyLmggKi8sCiAJCQkJRTNCQkMyNDUyMzgzNTUxQTAwNkVDMzlGIC8q
IENTU1ZhbHVlS2V5LmggKi8sCiAJCQkJRTRBOEQyMTUyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50
UmVnaW9uLmNwcCAqLywKIAkJCQlFNEE4RDIxNDIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdp
b24uaCAqLywKQEAgLTMxOTY0LDYgKzMyMDMwLDcgQEAKIAkJCQlBQTIxRUNDRDBBQkYwRkM2MDAy
QjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NzlF
MTQxQkIyMTVCQjAwQ0FBOEJGIC8qIENTU0N1c3RvbVByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk0NDc2QkRCMURGQ0FDMDMwMDY5MEUyMyAvKiBDU1NEZWZlcnJlZFBhcnNlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNkIyNzBDRDYwOTAwNTE1QzI0IC8qIENTU0ZpbHRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkJCMEM1QjgxN0JCRDYyOTAwM0QzNjc3IC8qIENTU0Zp
bHRlckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjRCNEQ2MENCNDI5OEEwMDVG
MkI2MiAvKiBDU1NGb250RmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRkQwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU0ZvbnRGYWNlUnVsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjQ2Mywx
MiArMzI1MzAsMTYgQEAKIAkJCQk5MzEyQkFEOTI2RjNBQzlBMDBGRERGNUYgLyogRmlsZVN5c3Rl
bUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjlGMEU4MURBRUIwMEIyNTk2
NSAvKiBGaWxsTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDgzMUZFODY1REQwMDIw
MzFDQyAvKiBGaWxsTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRjgwRkQyNjFFRTAw
QTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNTkyNzA5QUJGQjAw
NTE1QzI0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAw
NDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkM4NTY1MzQyNEMw
RjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkyQ0FBNEEzQTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDBDRjVBMjcwOUFDMTEwMDUxNUMyNCAvKiBGaWx0
ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNjUyNzBDMDYxNzAwNTE1QzI0
IC8qIEZpbHRlckdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI3
MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzIwMENGNUQyNzA5QURDRTAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzIwMENGNjgyNzBDNDc4NzAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNUMyNzA5QUQzQTAwNTE1QzI0IC8qIEZpbHRlclJlcHJl
c2VudGF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAwQ0Y1QjI3MDlBQ0I2MDA1MTVDMjQg
LyogRmlsdGVyUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1
Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRGMEExNTRG
MDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI3
RDJERDI1MEZEODI4MDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTM1MzM2LDggKzM1NDA3LDcgQEAKIAkJCQlCMjIyN0EwMzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0Ew
NjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUaWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBMDkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAotCQkJCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0
ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAwQ0Y2QzI3MENENjE5MDA1MTVDMjQg
LyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwQzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRmlsdGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEYwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpdFRvVmll
d0JveC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjA5Myw3ICszNjE2Myw2IEBACiAJCTA4NjdENjkw
RkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFBy
b2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JX
b3Jrc3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDA3MDA7CiAJ
CQkJTGFzdFVwZ3JhZGVDaGVjayA9IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCA4Y2Y5MDlhZTll
NTM3MjRiOTFkYjRhY2UxNGFlMjg1NzFkZDk1NTI2Li4yMTExZmEyODY0MWE2ZjM1OWMwMWZlZWE2
ODQwMGMwM2IxNTg0OTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVy
SW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCkBAIC0x
MTYsMjYgKzExNywyMyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNm
b3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMg
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAg
YXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
cmVuZGVyaW5nTW9kZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdlOjpu
dWxsSW1hZ2UoKTsKIAogICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXpl
IH07CiAgICAgdGV4dHVyZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7
CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgY3NzRmls
dGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBjc3NGaWx0ZXItPnNl
dFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAgIGNzc0ZpbHRlci0+c2V0RmlsdGVyUmVn
aW9uKGltYWdlUmVjdCk7Ci0gICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCBtX2Zp
bHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbikpCisgICAgYXV0
byBmaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25z
LCByZW5kZXJpbmdNb2RlKTsKKyAgICBpZiAoIWZpbHRlcikKICAgICAgICAgcmV0dXJuICZJbWFn
ZTo6bnVsbEltYWdlKCk7Ci0gICAgY3NzRmlsdGVyLT5hcHBseSgpOwogCi0gICAgYXV0byogb3V0
cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKLSAgICBpZiAoIW91dHB1dCkKLSAgICAgICAgcmV0
dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CisgICAgYXV0byBnZW9tZXRyeSA9IHN0ZDo6bWFrZV91
bmlxdWU8RmlsdGVyR2VvbWV0cnk+KGltYWdlUmVjdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoYXV0
byBmaWx0ZXJlZEltYWdlID0gdGV4dHVyZS0+ZmlsdGVyZWRJbWFnZSgqZmlsdGVyLCBXVEZNb3Zl
KGdlb21ldHJ5KSkpCisgICAgICAgIHJldHVybiBmaWx0ZXJlZEltYWdlOwogCi0gICAgcmV0dXJu
IG91dHB1dC0+Y29weUltYWdlKCk7CisgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiB9
CiAKIHZvaWQgQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6ZmlsdGVySW1hZ2VDaGFuZ2VkKGNvbnN0IElu
dFJlY3QmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
Y3JldGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
Y3JldGVJbWFnZUJ1ZmZlci5oCmluZGV4IGE1ZGQyOGI3MzdiYzgzNWU4NmVhM2VmMjAyYTc0ZTQ2
YWIyMjIxODEuLjg4YTMxMDI3Nzk4MmYzMjdkMjQzOTQ2ZWVlZjUyNmU1ZjcyMDk3NDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdl
QnVmZmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCiAKQEAgLTEzOCw2ICsxMzksMTkgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKKyAgICBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3Jl
YXRlZCgpOworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisKKyAgICAgICAgUmVmUHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcjsKKyAgICAgICAgc3RkOjp0aWUoaW1hZ2VCdWZmZXIsIHN0ZDo6aWdub3Jl
KSA9IGZpbHRlci5hcHBseSh0aGlzLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgICAgIHJldHVy
biBpbWFnZUJ1ZmZlciA/IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoKSA6IG51bGxwdHI7CisgICAg
fQorCiAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDk0ZTFh
MGY3OWI0ZmUzZmExNTIxZTllZDUyMjc5ZDRiZTAwNzgyYWYuLjU3MzkyYWRjNGU4MmE5Mzc0YTg1
MDAzYTQ1YzY0MTg4MjQwNjU5YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5j
bHVkZSAiQmlkaVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0
Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCkBAIC02MDMsNiArNjA1LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QKICAgICBJ
bWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zp
bHRlckltYWdlQnVmZmVyKEZpbHRlciYgZmlsdGVyLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkKK3sKKyAgICBhdXRv
IFtmaWx0ZXJkSW1hZ2UsIGltYWdlUmVjdF0gPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1hZ2UsIFdU
Rk1vdmUoZ2VvbWV0cnkpKTsKKyAgICBpZiAoZmlsdGVyZEltYWdlKQorICAgICAgICBkcmF3SW1h
Z2VCdWZmZXIoKmZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0KTsKK30KKwogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQogewog
ICAgIFBhdGggcGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgKaW5kZXggODk0NmViMjA4NDUxYzhiYmI5NDBhYjQxNTA3OWVhODE2
ZTliNTlhZS4uNTkxMmM1Y2RjNjkyNWIwMjI3ZTUzMTdlOTZkYmM1MjhkMjk0ZWQ1NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
QEAgLTg1LDYgKzg1LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBGaWx0ZXI7CitjbGFz
cyBGaWx0ZXJHZW9tZXRyeTsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVu
dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKQEAgLTQ0MCw2ICs0NDIs
OCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VC
dWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVySW1hZ2VC
dWZmZXIoRmlsdGVyJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8
RmlsdGVyR2VvbWV0cnk+JiYpOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IGIx
ZThkM2IwNGFiMjYwNTEzMjg4NmEwYTgwMzA1MDhhMTMxNjEyODAuLmFlZDU1MzIxNGYyMmFkY2Ux
MTdhZDdiMGNhMjdmOGVmYjBmMDhkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtNDIsNiArNDIsOSBAQCBjbGFzcyBEcmF3aW5nQ29u
dGV4dDsKIHN0cnVjdCBJdGVtQnVmZmVySGFuZGxlOwogfQogCitjbGFzcyBGaWx0ZXI7CitjbGFz
cyBGaWx0ZXJHZW9tZXRyeTsKKwogY2xhc3MgSW1hZ2VCdWZmZXIgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8SW1hZ2VCdWZmZXIsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+LCBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8SW1hZ2VCdWZmZXI+IHsKIHB1YmxpYzoKICAgICAvLyBXaWxs
IHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCkBAIC0xMDYsNiAr
MTA5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gZmlsdGVyZWRJbWFn
ZShjb25zdCBGaWx0ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYpID0gMDsK
IAogICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250
ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KICAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQppbmRleCBkNGZhM2M0YmZhZDM0YWFm
MzA5M2E5ZjAyNDg2YmI3MjdmOThkNGFhLi5kNDVhYjMzYzQ0MDhlZDYzNjA3NDYxNGQ0NmY0NTlk
YTZmNTFkNjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KQEAgLTM3
LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogU2hvdWxkIHNo
YXJlIHRoZXNlIHZhbHVlcyB3aXRoIENTU0ZpbHRlcjo6YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4KS4KKy8vIEZJWE1FOiBTaG91bGQgc2hhcmUg
dGhlc2UgdmFsdWVzIHdpdGggRmlsdGVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgogc3RhdGljIGNvbnN0IGRvdWJsZSBzZXBpYUZ1bGxD
b25zdGFudHNbM11bM10gPSB7CiAgICAgeyAwLjM5MywgMC43NjksIDAuMTg5IH0sCiAgICAgeyAw
LjM0OSwgMC42ODYsIDAuMTY4IH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmM4ZGY0ZDU1
YjQ1NjEzNTQ5ZTNhZjQ5MTkyYTI2ZTJjMDQ0YWY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNzMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0Ogot
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFVTRShDT1JFX0lNQUdFKQotCi0jaW1wb3J0ICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgotI2lt
cG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotCi1P
QkpDX0NMQVNTIENJSW1hZ2U7Ci1PQkpDX0NMQVNTIENJRmlsdGVyOwotT0JKQ19DTEFTUyBDSUNv
bnRleHQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRkVDb2xvck1hdHJpeDsKLWNs
YXNzIEZFQ29tcG9uZW50VHJhbnNmZXI7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwotCi1jbGFzcyBG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RSZW5kZXJl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZT4gdHJ5Q3Jl
YXRlKEZpbHRlckVmZmVjdCYpOwotICAgIFJldGFpblB0cjxDSUNvbnRleHQ+IHNoYXJlZENJQ29u
dGV4dCgpOwotICAgIHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAg
IGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vdXRwdXRJbWFnZTsgfQot
ICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCBmaW5hbDsKLSAgICBGbG9hdFJlY3QgZGVz
dFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbGVhclJl
c3VsdCgpIGZpbmFsOwotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCk7Ci0gICAg
Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKEZpbHRl
ckVmZmVjdCYpOwotICAgIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSBm
aW5hbDsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJF
ZmZlY3QmKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VHcmFw
aGljKFNvdXJjZUdyYXBoaWMmKTsKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNv
bG9yTWF0cml4KGNvbnN0IEZFQ29sb3JNYXRyaXgmLCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJ
SW1hZ2U+PiYpOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZFQ29tcG9uZW50VHJh
bnNmZXIoY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFn
ZT4+Jik7Ci0gICAgCi0gICAgUmVmUHRyPElPU3VyZmFjZUltYWdlQnVmZmVyPiBtX291dHB1dElt
YWdlQnVmZmVyOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBtX291dHB1dEltYWdlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWM4NmZjNGMyM2FmOTU0NTU1N2E1NThjOGM0NTFlMTlhOGEzOGZiNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysr
IC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgi
Ci0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgotI2lt
cG9ydCAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgotI2ltcG9ydCAiRmlsdGVyLmgiCi0jaW1wb3J0
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbXBvcnQgIkZpbHRlck9wZXJhdGlvbi5oIgotI2ltcG9ydCAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2ltcG9y
dCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNvdXJjZUdy
YXBoaWMuaCIKLSNpbXBvcnQgPENvcmVJbWFnZS9DSUNvbnRleHQuaD4KLSNpbXBvcnQgPENvcmVJ
bWFnZS9DSUZpbHRlci5oPgotI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgotI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSAg
ICBpZiAoY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMobGFzdEVmZmVjdCkpCi0gICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPigpOwotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lDb250ZXh0PiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZTo6c2hhcmVkQ0lDb250ZXh0KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmV0YWluUHRyPENJQ29udGV4dD4+IGNpQ29udGV4dCA9IFtDSUNvbnRleHQgY29udGV4dFdp
dGhPcHRpb25zOiBAeyBrQ0lDb250ZXh0V29ya2luZ0NvbG9yU3BhY2U6IChfX2JyaWRnZSBpZClD
R0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQil9XTsKLSAgICByZXR1
cm4gY2lDb250ZXh0OwotfQotCi1zdGF0aWMgYm9vbCBpc051bGxPckxpbmVhckNvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24oY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYgZWZmZWN0KQotewotICAg
IGF1dG8gaXNOdWxsT3JMaW5lYXIgPSBbXSAoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgZnVuY3Rpb24pIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgICAgIHx8IGZ1bmN0aW9uLnR5cGUgPT0g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICB9OwotICAgIHJldHVybiBpc051
bGxPckxpbmVhcihlZmZlY3QucmVkRnVuY3Rpb24oKSkgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0
LmdyZWVuRnVuY3Rpb24oKSkKLSAgICAgICAgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0LmJsdWVG
dW5jdGlvbigpKSAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKLX0K
LQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VS
ZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgLy8gRklYTUU6IGNoYW5nZSBy
ZXR1cm4gdmFsdWUgdG8gdHJ1ZSBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkCi0gICAgc3dpdGNo
IChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlR3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6IHsKLSAgICAgICAg
c3dpdGNoIChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLnR5cGUoKSkgewotICAgICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKLSAgICAg
ICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihkb3duY2Fz
dDxGRUNvbXBvbmVudFRyYW5zZmVyPihlZmZlY3QpKTsKLQotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRy
b3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNldDoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0
JiBsYXN0RWZmZWN0KQotewotICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGxh
c3RFZmZlY3QpOwotICAgIGlmICghbV9vdXRwdXRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IHJlbmRlclRvSW1hZ2VCdWZmZXIobGFzdEVmZmVjdCk7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdl
PiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmIGVmZmVjdCkKLXsKLSAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiBpbnB1dElt
YWdlczsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsK
LSAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOwotICAgICAg
ICBpZiAoIWlucHV0SW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
aW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwotICAgIH0KLSAgICBlZmZlY3QuZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBlZmZlY3Quc2V0UmVzdWx0Q29sb3JTcGFjZShl
ZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAKLSAgICBpZiAoZWZmZWN0LmFic29s
dXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkg
ewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICBy
ZXR1cm4gaW1hZ2VGb3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVmZmVj
dCkpOwotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKLSAgICAgICAg
cmV0dXJuIGltYWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZl
Y3QpLCBpbnB1dEltYWdlcyk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGRv
d25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLQotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0
IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRl
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkRyb3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNl
dDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3QpCi17
Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZWZmZWN0LmZpbHRlcigpLnNvdXJjZUlt
YWdlKCk7Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgCi0gICAgaWYgKGlzPElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQotICAg
ICAgICByZXR1cm4gW0NJSW1hZ2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0PElPU3VyZmFj
ZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpLnN1cmZhY2UoKS5zdXJmYWNlKCldOwotICAgIAot
ICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhDR0ltYWdlOnNvdXJjZUltYWdlLT5jb3B5TmF0
aXZlSW1hZ2UoKS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKLX0KLQotUmV0YWluUHRyPENJSW1h
Z2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZFQ29sb3JNYXRyaXgo
Y29uc3QgRkVDb2xvck1hdHJpeCYgZWZmZWN0LCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1h
Z2U+PiYgaW5wdXRJbWFnZXMpCi17Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFnZXMu
YXQoMCk7Ci0KLSAgICBhdXRvIHZhbHVlcyA9IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9h
dHMoZWZmZWN0LnZhbHVlcygpKTsKLSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotICAgIAotICAg
IHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NB
VFVSQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVu
dHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05P
V046Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogLy8gRklY
TUU6IEFkZCBMdW1pbmFuY2UgdG8gQWxwaGEgSW1wbGVtZW50YXRpb24KLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIGF1dG8gKmNvbG9yTWF0cml4RmlsdGVyID0gW0NJ
RmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwotICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dEltYWdlS2V5
XTsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU6IHsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDpjb21wb25lbnRzWzBdIFk6Y29tcG9uZW50c1sxXSBaOmNvbXBvbmVudHNbMl0gVzow
XSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzNdIFk6Y29tcG9uZW50c1s0
XSBaOmNvbXBvbmVudHNbNV0gVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKLSAgICAgICAg
W2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25l
bnRzWzZdIFk6Y29tcG9uZW50c1s3XSBaOmNvbXBvbmVudHNbOF0gVzowXSBmb3JLZXk6QCJpbnB1
dEJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAgICAgICAgICAg
ICAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4Rmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAg
ICAgICAgICBaOjAgICAgICAgICAgICAgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogewotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOnZhbHVlc1swXSAgWTp2YWx1ZXNbMV0gIFo6dmFsdWVzWzJdICBXOnZhbHVlc1szXV0g
IGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0
VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s1XSAgWTp2YWx1ZXNbNl0gIFo6dmFs
dWVzWzddICBXOnZhbHVlc1s4XV0gIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICBb
Y29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1sx
MF0gWTp2YWx1ZXNbMTFdIFo6dmFsdWVzWzEyXSBXOnZhbHVlc1sxM11dIGZvcktleTpAImlucHV0
QlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOnZhbHVlc1sxNV0gWTp2YWx1ZXNbMTZdIFo6dmFsdWVzWzE3XSBXOnZhbHVl
c1sxOF1dIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s0XSAgWTp2YWx1ZXNbOV0g
IFo6dmFsdWVzWzE0XSBXOnZhbHVlc1sxOV1dIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbG9yTWF0cml4RmlsdGVyLm91
dHB1dEltYWdlOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRy
YW5zZmVyJiBlZmZlY3QsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSByZXN0IG9mIEZFQ29tcG9uZW50VHJhbnNm
ZXIgZnVuY3Rpb25zCi0gICAgQVNTRVJUKGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbihlZmZlY3QpKTsKLQotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0SW1hZ2VzLmF0
KDApOwotICAgIGF1dG8gZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xv
clBvbHlub21pYWwiXTsKLSAgICAKLSAgICBbZmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0
KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIGF1dG8gc2V0Q29lZmZpY2ll
bnRzID0gWyZdIChOU1N0cmluZyAqa2V5LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBmdW5jdGlvbikgewotICAgICAgICBpZiAoZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfTElORUFSKQotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6ZnVuY3Rpb24uaW50ZXJjZXB0IFk6ZnVuY3Rpb24uc2xvcGUgWjowIFc6
MF0gZm9yS2V5OmtleV07Ci0gICAgfTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dFJlZENv
ZWZmaWNpZW50cyIsIGVmZmVjdC5yZWRGdW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMo
QCJpbnB1dEdyZWVuQ29lZmZpY2llbnRzIiwgZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSk7Ci0gICAg
c2V0Q29lZmZpY2llbnRzKEAiaW5wdXRCbHVlQ29lZmZpY2llbnRzIiwgZWZmZWN0LmJsdWVGdW5j
dGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEFscGhhQ29lZmZpY2llbnRzIiwg
ZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIGZpbHRlci5vdXRwdXRJ
bWFnZTsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2FuUmVuZGVy
VXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgaWYgKCFzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZyhlZmZlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgZm9yIChhdXRvIGluIDogZWZmZWN0LmlucHV0RWZmZWN0cygpKSB7Ci0gICAgICAgIGlm
ICghc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKmluKSB8fCAhY2FuUmVuZGVyVXNpbmdDSUZp
bHRlcnMoKmluKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
b3V0cHV0KCkgY29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJSZW5kZXJpbmcgIiA8PCB0aGlzIDw8ICIgdXNpbmcgQ29yZUltYWdlXG4iKTsKLSAgICByZXR1
cm4gbV9vdXRwdXRJbWFnZUJ1ZmZlci5nZXQoKTsKLX0KLSAgICAKLXZvaWQgRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBsYXN0
RWZmZWN0KQotewotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBtX291
dHB1dEltYWdlQnVmZmVyID0gSU9TdXJmYWNlSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6
ZSwgbGFzdEVmZmVjdC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpLCBsYXN0RWZmZWN0LnJlc3VsdENv
bG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1fb3V0cHV0SW1hZ2VC
dWZmZXIpIHsKLSAgICAgICAgY2xlYXJSZXN1bHQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFtzaGFyZWRDSUNvbnRleHQoKS5nZXQoKSByZW5kZXI6IG1fb3V0cHV0SW1hZ2UuZ2V0
KCkgdG9JT1N1cmZhY2U6IG1fb3V0cHV0SW1hZ2VCdWZmZXItPnN1cmZhY2UoKS5zdXJmYWNlKCkg
Ym91bmRzOmRlc3RSZWN0KGxhc3RFZmZlY3QpIGNvbG9yU3BhY2U6bGFzdEVmZmVjdC5yZXN1bHRD
b2xvclNwYWNlKCkucGxhdGZvcm1Db2xvclNwYWNlKCldOwotfQotICAgIAotRmxvYXRSZWN0IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3Qm
IGxhc3RFZmZlY3QpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZlY3Qu
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZGVzdFNpemUuc2NhbGUobGFzdEVmZmVj
dC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBkZXN0U2l6ZSk7Ci0gICAgcmV0dXJuIGRlc3RSZWN0OwotfQot
Ci12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjbGVhclJlc3VsdCgpCi17Ci0g
ICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgbV9vdXRwdXRJbWFnZSA9IG51
bGxwdHI7Ci19Ci0KLUZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZSgpCi0gICAgOiBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpCi17Ci19Ci0g
ICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJl
c3VsdENvcmVJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhYmU1NjFiNzAxYmNhMDViMjQ0ZTUyNWUxNzhl
YzI0ZjZkZGQxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDT1JFX0lN
QUdFKQorCisjaW1wb3J0ICJGaWx0ZXJSZXN1bHQuaCIKKworT0JKQ19DTEFTUyBDSUltYWdlOwor
T0JKQ19DTEFTUyBDSUNvbnRleHQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmls
dGVyUmVzdWx0Q29yZUltYWdlIDogcHVibGljIEZpbHRlclJlc3VsdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQ7CisKKyAgICB2b2lkIHNldEltYWdlKFJl
dGFpblB0cjxDSUltYWdlPiYmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVm
ZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92ZXJyaWRlOworICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcigpIG92ZXJyaWRlOworCisgICAgUmV0YWluUHRyPENJSW1hZ2U+IG1faW1hZ2U7
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZp
bHRlclJlc3VsdENvcmVJbWFnZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyUmVzdWx0JiByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkg
PT0gV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7IH0KK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFn
ZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43Mjc5MmIxYWJlOTcwZDhjZGY4OWFmODVhNThkNTRkNWFiODAwYmI2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbQpAQCAtMCwwICsxLDU1IEBACisvKgorKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0
Q29yZUltYWdlLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCA8Q29yZUltYWdl
L0NJQ29udGV4dC5oPgorI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgorI2ltcG9ydCA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2U6OnNldEltYWdlKFJldGFpblB0cjxDSUltYWdlPiYmIGltYWdlKQor
eworICAgIEFTU0VSVChpbWFnZSk7CisgICAgbV9pbWFnZSA9IFdURk1vdmUoaW1hZ2UpOworfQor
CitSZWZQdHI8SW1hZ2VCdWZmZXI+JiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U6OmltYWdlQnVmZmVy
SWZFeGlzdHMoKQoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyOworfQorCitJbWFnZUJ1ZmZl
ciogRmlsdGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhp
Y0NvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmOGE4MGNiZmQ2NzI4MzZk
Zjg5OTVjZjM5ZDQzZGE1YmQ4NTUwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbQpA
QCAtMCwwICsxLDU2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6
CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgorCisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNp
bXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIFNvdXJjZUdyYXBoaWM6OmFwcGx5Q29yZUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgQVNTRVJUKHNvdXJjZUltYWdlKTsKKyAgICBpZiAoIXNvdXJjZUltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2U7CisgICAg
aWYgKGlzPElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQorICAgICAgICBpbWFn
ZSA9IFtDSUltYWdlIGltYWdlV2l0aElPU3VyZmFjZTpkb3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1
ZmZlcj4oKnNvdXJjZUltYWdlKS5zdXJmYWNlKCkuc3VyZmFjZSgpXTsKKyAgICBlbHNlCisgICAg
ICAgIGltYWdlID0gW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTpzb3VyY2VJbWFnZS0+Y29weU5h
dGl2ZUltYWdlKCktPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKV07CisKKyAgICBpZiAoIWltYWdlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZG93bmNhc3Q8RmlsdGVyUmVzdWx0Q29y
ZUltYWdlPihyZXN1bHQpLnNldEltYWdlKFdURk1vdmUoaW1hZ2UpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVP
Ti5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZF
QmxlbmRORU9OLmgKaW5kZXggMjYxMTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2Yx
OC4uZGU2NjA2OGNkZDBhOWNiNTc0YzBhY2JiYzhjOGM2MGE2Nzc0ZmYwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRO
RU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEwNywxNSArMTA3LDE4IEBAIHB1YmxpYzoKICAgICB9CiB9
OwogCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQq
IEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHRzJiByZXN1bHRzLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopCiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRF
ZmZlY3QoMSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIg
PSBzdGFjay50YWtlTGFzdCgpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZ2V0KHsg
KnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byByZXN1
bHQgPSBmaWx0ZXIoKS5jcmVhdGVGaWx0ZXJSZXN1bHQoYWJzb2x1dGVQYWludFJlY3QoKSwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSByZXN1bHQtPnBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
IAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTEyOSw3ICsxMzIsNyBA
QCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBpZiAoc291cmNl
UGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7CiAgICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNvdXJj
ZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCksIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiByZXN1bHQubGVha1JlZigpOwogICAgIH0KICAgICAvLyBJ
ZiB0aGVyZSBpcyBqdXN0IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdvLgogICAgIEFTU0VS
VChzb3VyY2VQaXhlbEFycmF5TGVuZ3RoID4gMCk7CkBAIC0xNDAsNiArMTQzLDggQEAgdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIHNvdXJjZUJBbmREZXN0WzBdID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCkpWzBd
OwogICAgIHBsYXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJj
ZUEpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CiAgICAgcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNl
QkFuZERlc3RbMF07CisKKyAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAogdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwg
dW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJy
YXksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggMWU0NzIx
N2UwNzRjZTU4N2JjYWZmY2ZlYWI0YzMxMDBiZGExNWNhNC4uYzBiYmQ2ZGQ2NTNhZjlkNTY1Yjkw
MGQ3MTVkYWYwZjQ4MmY1ZmVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcApAQCAtMjIyLDYgKzIyMiwxNCBAQCB2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdAogICAg
IGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJJbWFnZUJ1
ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciosIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRy
eT4mJikKK3sKKy8vICAgIGlmIChtX2RlbGVnYXRlKQorLy8gICAgICAgIG1fZGVsZWdhdGUtPnJl
Y29yZEltYWdlQnVmZmVyVXNlKCpzb3VyY2VJbWFnZSk7CisvLyAgICByZWNvcmRGaWx0ZXJVc2Uo
ZmlsdGVyKTsKKy8vICAgIGFwcGVuZDxEcmF3RmlsdGVySW1hZ2VCdWZmZXI+KGZpbHRlci5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBnZW9tZXRyeSk7Cit9CisKIHZvaWQgUmVjb3JkZXI6OnNhdmUoKQogewog
ICAgIGFwcGVuZDxTYXZlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgK
aW5kZXggMzFhNTIyODkwYjdlZTRlNjUwZjViYTViYjFiN2U1MjQ2MmFmMTYxMC4uZTFiOWEwNTg2
N2YxNGE0NDQzZjAxZWYzOGQzYzZhMTIyNTc0OTQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCkBAIC0xMjgsNiArMTI4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRy
YXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCBkcmF3UGF0dGVybihOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAKKyAgICB2b2lkIGRyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0
cjxGaWx0ZXJHZW9tZXRyeT4mJikgZmluYWw7CisKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ry
b2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2NzA0Y2Q2N2ZiMGE3YWZlOWFm
MThmYmI2MmMyY2VkOS4uMzU2ZTM1OTMzZmNlYmQ1YzdmMjg3MDRiMDI2Y2QwNTYxMWZlN2RiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDE0
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsyNiw0MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRORU9OLmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Cisj
aW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQoRmlsdGVyJiBmaWx0
ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Qmxl
bmQpCi0gICAgLCBtX21vZGUobW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoQmxl
bmRNb2RlIG1vZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChtb2RlKSk7
CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIEJsZW5k
TW9kZSBtb2RlKQorRkVCbGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkKKyAgICA6IG1fbW9k
ZShtb2RlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQoZmlsdGVyLCBtb2Rl
KSk7CiB9CiAKIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKQogewot
ICAgIGlmIChtX21vZGUgPT0gbW9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9k
ZSA9IG1vZGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9t
b2RlLCBtb2RlKSAhPSBtX21vZGU7CiB9CiAKLSNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RUJsZW5kOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAg
IEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAg
IGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0byByZXN1bHQg
PSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0
OwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIs
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2lu
dCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsg
aW4sIGluMiB9LCBudWxscHRyKTsKIH0KLSNlbmRpZgogCi1UZXh0U3RyZWFtJiBGRUJsZW5kOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUg
cmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUJsZW5kOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
ICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG1vZGU9
XCIiIDw8IChtX21vZGUgPT0gQmxlbmRNb2RlOjpOb3JtYWwgPyAibm9ybWFsIiA6IGNvbXBvc2l0
ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlKSkgPDwg
IlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsK
LSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCmluZGV4IDcwZTg0MDdiZjVj
MjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLjEwMDAzMmY4ZTQ5OTIyMDJhMjMyMzNhYmE5
YzU1MzE3MjZhY2M1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNCwzMiArMjUsMjcgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgog
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVC
bGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVC
bGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgc3RhdGljIFJlZjxGRUJsZW5k
PiBjcmVhdGUoQmxlbmRNb2RlKTsKIAogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIHNldEJsZW5kTW9kZShCbGVuZE1vZGUpOwogCiBw
cml2YXRlOgorICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKKwogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVCbGVuZCI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyh1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBz
cmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOworICAgIEZpbHRlclJl
c3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0
ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZFQmxlbmQoRmlsdGVyJiwgQmxlbmRN
b2RlKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
QmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKaW5kZXggMzgwNjVjYjk2YzdiNGI0YjAzZmM2YjBlZWQ4NWFjNGI2Yzk2OGE1
NC4uZGI0OGRjZGQ0MTM4ZGE2ZWYzNTkzNzRjMzE4NTkyNzdlMGFiY2M5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywyOCArMjQsMTkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxl
cmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNv
bG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZpbHRlciYgZmlsdGVyLCBDb2xvck1hdHJpeFR5cGUg
dHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IFR5cGU6OkNvbG9yTWF0cml4KQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3ZhbHVlcyhX
VEZNb3ZlKHZhbHVlcykpCitSZWY8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRl
KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQogeworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7
CiB9CiAKLVJlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQorRkVD
b2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZs
b2F0PiYmIHZhbHVlcykKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV92YWx1ZXMoV1RGTW92
ZSh2YWx1ZXMpKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgoZmls
dGVyLCB0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAogYm9vbCBGRUNvbG9yTWF0cml4Ojpz
ZXRUeXBlKENvbG9yTWF0cml4VHlwZSB0eXBlKQpAQCAtNjMsMjU4ICs1NSw0MyBAQCBib29sIEZF
Q29sb3JNYXRyaXg6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+ICZ2YWx1ZXMpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZh
bHVlcykKK3ZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZs
b2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsKLSAgICBmbG9hdCByID0gcmVkOwotICAg
IGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBiID0gYmx1ZTsKLSAgICBmbG9hdCBhID0gYWxw
aGE7Ci0KLSAgICByZWQgICAgID0gdmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNbIDFdICogZyArIHZh
bHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1ZXNbIDRdICogMjU1OwotICAgIGdy
ZWVuICAgPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0gKiBnICsgdmFsdWVzIFs3XSAqIGIg
KyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7Ci0gICAgYmx1ZSAgICA9IHZhbHVl
c1sxMF0gKiByICsgdmFsdWVzWzExXSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10g
KiBhICsgdmFsdWVzWzE0XSAqIDI1NTsKLSAgICBhbHBoYSAgID0gdmFsdWVzWzE1XSAqIHIgKyB2
YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4XSAqIGEgKyB2YWx1ZXNb
MTldICogMjU1OwotfQotCi1pbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYg
cmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBjb25zdCBmbG9hdCogY29tcG9uZW50cykK
LXsKLSAgICBmbG9hdCByID0gcmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBi
ID0gYmx1ZTsKLQotICAgIHJlZCAgICAgPSByICogY29tcG9uZW50c1swXSArIGcgKiBjb21wb25l
bnRzWzFdICsgYiAqIGNvbXBvbmVudHNbMl07Ci0gICAgZ3JlZW4gICA9IHIgKiBjb21wb25lbnRz
WzNdICsgZyAqIGNvbXBvbmVudHNbNF0gKyBiICogY29tcG9uZW50c1s1XTsKLSAgICBibHVlICAg
ID0gciAqIGNvbXBvbmVudHNbNl0gKyBnICogY29tcG9uZW50c1s3XSArIGIgKiBjb21wb25lbnRz
WzhdOwotfQotCi0vLyBGSVhNRTogdGhpcyBzaG91bGQgdXNlIHRoZSBsdW1pbmFuY2UoLi4uKSBm
dW5jdGlvbiBpbiBDb2xvckx1bWluYW5jZS5oLgotaW5saW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0
JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkKLXsKLSAgICBh
bHBoYSA9IDAuMjEyNSAqIHJlZCArIDAuNzE1NCAqIGdyZWVuICsgMC4wNzIxICogYmx1ZTsKLSAg
ICByZWQgPSAwOwotICAgIGdyZWVuID0gMDsKLSAgICBibHVlID0gMDsKLX0KLQotI2lmIFVTRShB
Q0NFTEVSQVRFKQotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci1ib29sIGVm
ZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0
IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxvYXQgY29tcG9uZW50c1s5XSwgSW50U2l6ZSBidWZm
ZXJTaXplKQotewotICAgIEFTU0VSVChwaXhlbEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUu
YXJlYSgpICogNCk7Ci0gICAgCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWCkgewotICAgICAgICAvLyB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCB0
YWtlcyBhIDR4NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhl
IEZFQ29sb3JNYXRyaXggNXg0IG1hdHJpeAotICAgICAgICAvLyBpcyBub3QgemVybywgZmFsbCBi
YWNrIHRvIG5vbi12SW1hZ2UgY29kZS4KLSAgICAgICAgaWYgKHZhbHVlc1s0XSAhPSAwIHx8IHZh
bHVlc1s5XSAhPSAwIHx8IHZhbHVlc1sxNF0gIT0gMCB8fCB2YWx1ZXNbMTldICE9IDApCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29uc3QgaW50MzJfdCBkaXZpc29y
ID0gMjU2OwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKLQotICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsKLSAg
ICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSBi
dWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRhID0gZGF0YTsKLSAgICAKLSAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsK
LSAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRl
cyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gZGF0YTsKLQotICAg
IHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDVdICogZGl2aXNv
cikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMF0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWzE1XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2aXNvcikpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNl0gKiBkaXZpc29yKSksCi0K
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDJdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sg
N10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICogZGl2aXNvcikpLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxM10gKiBkaXZpc29yKSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE4XSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4
ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFn
ZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6
IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRdID0gewotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMF0gKiBkaXZpc29yKSksCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1szXSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25l
bnRzWzZdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s0XSAqIGRpdmlzb3Ip
KSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzdd
ICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzhdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgZGl2aXNvciwKLSAgICAgICAgfTsKLSAgICAg
ICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2
aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogewot
ICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICB9OwotICAgICAg
ICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZp
c29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgY29tcG9uZW50c1swXSA9
ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAw
LjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1
ZSk7CisgICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNv
bXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzVd
ID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAt
IDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZh
bHVlKTsKKyAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7CiB9Ci0j
ZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci12b2lkIGVmZmVj
dFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXplKQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsK
LSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVT
YXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICBlbHNlIGlmIChm
aWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUpCi0gICAgICAgIEZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVz
WzBdKTsKLQotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0
aCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgaWYgKGVmZmVjdEFwcGx5QWNjZWxlcmF0
ZWQ8ZmlsdGVyVHlwZT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRzLCBidWZmZXJTaXpl
KSkKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7
Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQg
PSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQg
Kz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0
ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0
ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVs
QXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIG1hdHJpeChyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSwgdmFsdWVzKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0
KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9
IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCAr
PSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgc2F0dXJhdGVBbmRI
dWVSb3RhdGUocmVkLCBncmVlbiwgYmx1ZSwgY29tcG9uZW50cyk7Ci0gICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXku
c2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwg
cGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZs
b2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAg
ZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAg
ICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIp
OwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zm
c2V0ICsgMyk7Ci0gICAgICAgICAgICBsdW1pbmFuY2UocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1
ZSAqIHBpRmxvYXQgLyAxODApOworICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxv
YXQgLyAxODApOworICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0g
c2luSHVlICogMC4yMTM7CisgICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43
MTUgLSBzaW5IdWUgKiAwLjcxNTsKKyAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUg
KiAwLjA3MiArIHNpbkh1ZSAqIDAuOTI4OworICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNv
c0h1ZSAqIDAuMjEzICsgc2luSHVlICogMC4xNDM7CisgICAgY29tcG9uZW50c1s0XSA9IDAuNzE1
ICsgY29zSHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKKyAgICBjb21wb25lbnRzWzVdID0g
MC4wNzIgLSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOworICAgIGNvbXBvbmVudHNb
Nl0gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7CisgICAgY29tcG9u
ZW50c1s3XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKKyAgICBj
b21wb25lbnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwog
fQogCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFQ29sb3JNYXRyaXg6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoaW5CdWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgp
KTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNlKCkgfTsKLSAgICBJbnRSZWN0IGltYWdl
UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBw
aXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIGltYWdlUmVj
dCk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYg
cGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXV0byBwaXhlbEFycmF5RGlt
ZW5zaW9ucyA9IHBpeGVsQnVmZmVyLT5zaXplKCk7Ci0KLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVl
cyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwotICAgIAotICAgIHN3aXRjaCAobV90eXBl
KSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBlZmZlY3RUeXBl
PEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURTogCi0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBl
ZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU+KHBpeGVsQXJyYXksIHZhbHVl
cywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVs
QXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5n
ZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHJlc3VsdEltYWdl
LT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIGFw
cGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0
eXBlKQpAQCAtMzM5LDEwICsxMTYsOSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5k
ZW50IDw8ICJbZmVDb2xvck1hdHJpeCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiB0eXBlPVwiIiA8PCBt
X3R5cGUgPDwgIlwiIjsKICAgICBpZiAoIW1fdmFsdWVzLmlzRW1wdHkoKSkgewogICAgICAgICB0
cyA8PCAiIHZhbHVlcz1cIiI7CkBAIC0zNTcsOSArMTMzLDYgQEAgVGV4dFN0cmVhbSYgRkVDb2xv
ck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb24KICAgICAgICAgdHMgPDwgIlwiIjsKICAgICB9CiAgICAgdHMgPDwgIl1cbiI7Ci0gICAg
Ci0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0
RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAg
ICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDI5ZTQxYThhZWQxZTRmMGI1
Mzk3MDNhYzRkYjU1MjRlZmE0YzEyM2YuLmY2MTIxM2ZlNjBmZTBiNGNjM2QyY2RlZjliNjQyZjQ2
ZGI0ZDEyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszNyw3IEBA
IGVudW0gQ29sb3JNYXRyaXhUeXBlIHsKIAogY2xhc3MgRkVDb2xvck1hdHJpeCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4gY3Jl
YXRlKEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKKyAgICBzdGF0
aWMgUmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9h
dD4mJik7CiAKICAgICBDb2xvck1hdHJpeFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogICAgIGJvb2wgc2V0VHlwZShDb2xvck1hdHJpeFR5cGUpOwpAQCAtNDYsNTQgKzQ1LDIy
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlczsgfQogICAgIGJvb2wgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4m
KTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMo
ZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQg
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFs
dWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUh1ZVJv
dGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKIAogcHJpdmF0
ZToKLSAgICBGRUNvbG9yTWF0cml4KEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZs
b2F0PiYmKTsKKyAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0
PiYmKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVDb2xvck1hdHJpeCI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIENvbG9yTWF0cml4
VHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPGZsb2F0PiBtX3ZhbHVlczsKIH07CiAKLWlubGluZSB2
b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQgdmFsdWUpCi17Ci0gICAgY29tcG9uZW50c1swXSA9ICgwLjIxMyArIDAu
Nzg3ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVl
KTsKLSAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29t
cG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNF0g
PSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzVdID0gKDAuMDcyIC0g
MC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAtIDAuMjEzICogdmFs
dWUpOwotICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKLSAgICBj
b21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lk
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBv
bmVudHMsIGZsb2F0IHZhbHVlKQotewotICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1ZSAqIHBp
RmxvYXQgLyAxODApOwotICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxvYXQgLyAx
ODApOwotICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0gc2luSHVl
ICogMC4yMTM7Ci0gICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgLSBz
aW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3
MiArIHNpbkh1ZSAqIDAuOTI4OwotICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNvc0h1ZSAq
IDAuMjEzICsgc2luSHVlICogMC4xNDM7Ci0gICAgY29tcG9uZW50c1s0XSA9IDAuNzE1ICsgY29z
SHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKLSAgICBjb21wb25lbnRzWzVdID0gMC4wNzIg
LSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOwotICAgIGNvbXBvbmVudHNbNl0gPSAw
LjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7Ci0gICAgY29tcG9uZW50c1s3
XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25l
bnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwotfQotCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENs
YXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg7IH0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5jcHAKaW5kZXggODQ3ZWE1OGY1ZjliMDM4NjZkOWVhYzU3ZjEwY2NmNTc0MDJmOWU2My4uZmVi
ODA4NmVhZjUyYzJjMjkwNDhiZjVlZmFkYmIyZjI3YjNjZGM0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjQsMTM4ICsyNSwzMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZF
Q29tcG9uZW50VHJhbnNmZXIuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9u
ZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAgIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
YWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyKQotICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKLSAgICAsIG1fZ3Jl
ZW5GdW5jdGlvbihncmVlbkZ1bmN0aW9uKQotICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0
aW9uKQotICAgICwgbV9hbHBoYUZ1bmN0aW9uKGFscGhhRnVuY3Rpb24pCi17Ci19Ci0KLVJlZjxG
RUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAg
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRUNvbXBvbmVudFRyYW5zZmVyKGZpbHRlciwgcmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24s
IGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOwotfQotCi12b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpCitSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCiB7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVDb21wb25lbnRUcmFuc2ZlcihyZWRGdW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1
ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAg
ICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAg
ICAgcmV0dXJuOyAgICAgICAgICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAg
ICAgICAgIAotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAo
biAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRv
dWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKLSAgICAg
ICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2
MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsK
LSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19
Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3Vw
VGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJG
dW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5z
ZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNp
emUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAvIDI1NS4wKTsKLSAgICAgICAgayA9IHN0ZDo6
bWluKGssIG4gLSAxKTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVzW2td
OwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAg
ICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0K
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUg
KiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4w
LCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0
cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEg
ZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBw
b3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGRUNvbXBvbmVu
dFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVl
bkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24s
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBt
X3JlZEZ1bmN0aW9uKHJlZEZ1bmN0aW9uKQorICAgICwgbV9ncmVlbkZ1bmN0aW9uKGdyZWVuRnVu
Y3Rpb24pCisgICAgLCBtX2JsdWVGdW5jdGlvbihibHVlRnVuY3Rpb24pCisgICAgLCBtX2FscGhh
RnVuY3Rpb24oYWxwaGFGdW5jdGlvbikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGdyZWVuVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhy
ZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKLQotICAgIEludFJl
Y3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoID0gZGVzdGluYXRpb25QaXhl
bEFycmF5Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBkZXN0aW5hdGlvblBpeGVsQXJy
YXkuZGF0YSgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNl
dCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAg
ICAgICBkYXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKLSAg
ICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0
ICsgMV1dOwotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtw
aXhlbE9mZnNldCArIDJdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFU
YWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgM11dOwotICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9v
a3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxl
JiBhbHBoYVRhYmxlKQorRmlsdGVyUmVzdWx0KiBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseShG
aWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZm
ZXIqKSBjb25zdAogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWRUYWJsZS5zaXpl
KCk7ICsraSkKLSAgICAgICAgcmVkVGFibGVbaV0gPSBncmVlblRhYmxlW2ldID0gYmx1ZVRhYmxl
W2ldID0gYWxwaGFUYWJsZVtpXSA9IGk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOwor
ICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBl
ID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlk
ZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAg
ICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lE
RU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxl
LCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgotICAgICAgICBjb21wdXRl
R2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9
OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fcmVkRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJS
QVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZ3JlZW5GdW5jdGlvbi50eXBlKSA8IFdURl9BUlJB
WV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9ibHVlRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlf
TEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYWxwaGFGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9M
RU5HVEgoY2FsbEVmZmVjdCkpOwotCi0gICAgY2FsbEVmZmVjdFttX3JlZEZ1bmN0aW9uLnR5cGVd
KHJlZFRhYmxlLCBtX3JlZEZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fZ3JlZW5GdW5jdGlv
bi50eXBlXShncmVlblRhYmxlLCBtX2dyZWVuRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9i
bHVlRnVuY3Rpb24udHlwZV0oYmx1ZVRhYmxlLCBtX2JsdWVGdW5jdGlvbik7Ci0gICAgY2FsbEVm
ZmVjdFttX2FscGhhRnVuY3Rpb24udHlwZV0oYWxwaGFUYWJsZSwgbV9hbHBoYUZ1bmN0aW9uKTsK
KyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb25lbnRU
cmFuc2ZlclR5cGUgdHlwZSkKQEAgLTIwOSwxMCArMTA0LDkgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGYKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9u
VHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29tcG9uZW50VHJhbnNm
ZXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHRzIDw8ICJcbiI7CiAgICAgewogICAgICAgICBUZXh0U3RyZWFtOjpJ
bmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgMik7CkBAIC0yMjEsOSArMTE1LDYgQEAgVGV4dFN0
cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgUmVwcmVzZW4KICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7Ymx1ZTogIiA8PCBt
X2JsdWVGdW5jdGlvbiA8PCAifVxuIjsKICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7YWxwaGE6
ICIgPDwgbV9hbHBoYUZ1bmN0aW9uIDw8ICJ9XVxuIjsKICAgICB9Ci0KLSAgICBUZXh0U3RyZWFt
OjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggMmI1ODZkZWY3ZmI0MmEzN2IyZTEy
M2VkYTg3MTE5YzRlYjM0OGE1MS4uNzYxMDY5ZGI4OWU0Mzc3NGE4NzY4MzY5ZTk1NTZlNjcxNjE0
NGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDkgKzI0LDYgQEAKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gQ29tcG9uZW50VHJhbnNm
ZXJUeXBlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBjcmVhdGUoRmls
dGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJs
dWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOworICAg
IHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVl
RnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24p
OwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRGdW5jdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdy
ZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuRnVuY3Rpb247IH0KQEAgLTYyLDI0
ICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBhbHBoYUZ1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1bmN0aW9uOyB9CiAKIHByaXZhdGU6Ci0g
ICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1
bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5j
KTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBo
YUZ1bmN0aW9uKTsKIAotICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90
LCAyNTY+OworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KIAotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVu
dGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZURp
c2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVH
YW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgY29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUs
IExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBU
YWJsZSYgYWxwaGFUYWJsZSk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG1fcmVkRnVuY3Rpb247CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBt
X2dyZWVuRnVuY3Rpb247CkBAIC04OCw3ICs3NiwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2ZlcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFz
c1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVy
OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhi
NTllNjZkZTlmZThkNjM5MTZjYmU1Y2U2ZGQ0MDM4ZmE0Y2IyYTguLmNmMDRlNDNjNTUyMjkwNzFk
M2YxZjMyNTQ0Zjg5ZjQ1OWJhNThhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI1LDE5IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29t
cG9zaXRlQXJpdGhtZXRpY05FT04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRl
OjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlw
ZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBG
aWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlwZSkK
K1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVPcGVy
YXRvciwgazEsIGsyLCBrMywgazQpKTsKK30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZF
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogbV9jb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVP
cGVyYXRvcikKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQogICAgICwgbV9rMyhrMykK
QEAgLTQyLDI2NCArNDUsNjIgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYgZmls
dGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG8KIHsKIH0KIAotUmVm
PEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBD
b21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGsz
LCBmbG9hdCBrNCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShmaWx0
ZXIsIHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVDb21wb3NpdGU6OnNldE9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCitib29sIEZFQ29tcG9zaXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
KQogewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFu
Z2UobV9jb21wb3NpdGVPcGVyYXRvciwgY29tcG9zaXRlT3BlcmF0b3IpICE9IG1fY29tcG9zaXRl
T3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZsb2F0IGsxKQogewotICAg
IGlmIChtX2sxID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMSA9IGsxOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazEsIGsxKSAhPSBt
X2sxOwogfQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMihmbG9hdCBrMikKIHsKLSAgICBpZiAo
bV9rMiA9PSBrMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazIgPSBrMjsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2syLCBrMikgIT0gbV9rMjsK
IH0KIAogYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzMoZmxvYXQgazMpCiB7Ci0gICAgaWYgKG1fazMg
PT0gazMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2szID0gazM7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMywgazMpICE9IG1fazM7CiB9CiAK
IGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogewotICAgIGlmIChtX2s0ID09IGs0
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rNCA9IGs0OwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazQsIGs0KSAhPSBtX2s0OwogfQogCi12b2lk
IEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQorRmxvYXRSZWN0IEZF
Q29tcG9zaXRlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChtX3R5cGUg
IT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLX0KKyAgICAvLyBGb3IgSW4gYW5k
IEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgorICAg
IC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVj
dCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgorICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9y
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOIHx8IG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVD
T01QT1NJVEVfT1BFUkFUT1JfQVRPUCkKKyAgICAgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERyYXdp
bmdSZWN0KGlucHV0cywgaW5wdXRzWzFdLT5kcmF3aW5nUmVjdCgpKTsKICAgICAKLXN0YXRpYyB1
bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZb
XSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OwotICAgIHVuc2ln
bmVkIHVjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMpOwotICAgIHJldHVybiBidWZmWyEhKHVj
ICYgfjB4ZmYpICsgISEodWMgJiB+KH4wdSA+PiAxKSldOwotfQotCi10ZW1wbGF0ZSA8aW50IGIx
LCBpbnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHModW5z
aWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVs
QXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewot
ICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChiMSkKLSAg
ICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAgIHNjYWxl
ZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3RoID49IDAp
IHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVuc2lnbmVk
IGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsyICogaTEg
KyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVk
SzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2Nh
bGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gY2xhbXBCeXRlKHJlc3VsdCk7Ci0gICAg
ICAgICsrc291cmNlOwotICAgICAgICArK2Rlc3RpbmF0aW9uOwotICAgIH0KLX0KLQotLy8gY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQgaXMgYSBmYXN0ZXIgdmVyc2lvbiBvZiBjb21w
dXRlQXJpdGhtZXRpY1BpeGVscyBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGNsYW1waW5nCi0v
LyBpcyBub3QgbmVjZXNzYXJ5LiBUaGlzIGVuYWJsZXMgYWdncmVzaXZlIGNvbXBpbGVyIG9wdGlt
aXphdGlvbnMgc3VjaCBhcyBhdXRvLXZlY3Rvcml6YXRpb24uCi10ZW1wbGF0ZSA8aW50IGIxLCBp
bnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50
IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChi
MSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAg
IHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3Ro
ID49IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsy
ICogaTEgKyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0g
c2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQg
Kz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gcmVzdWx0OwotICAgICAgICAr
K3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLSNpZiAhSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQotc3RhdGljIGlubGluZSB2b2lkIGFyaXRobWV0aWNTb2Z0d2Fy
ZSh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQg
cGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
Ci17Ci0gICAgZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYsIGsxKSArIHN0ZDo6bWF4
KDAuMGYsIGsyKSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OwotICAgIGZsb2F0IGxvd2VyTGlt
aXQgPSBzdGQ6Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBrMikgKyBzdGQ6Om1pbigw
LjBmLCBrMykgKyBrNDsKLSAgICBpZiAoKGs0ID49IDAuMGYgJiYgazQgPD0gMS4wZikgJiYgKHVw
cGVyTGltaXQgPj0gMC4wZiAmJiB1cHBlckxpbWl0IDw9IDEuMGYpICYmIChsb3dlckxpbWl0ID49
IDAuMGYgJiYgbG93ZXJMaW1pdCA8PSAxLjBmKSkgewotICAgICAgICBpZiAoazQpIHsKLSAgICAg
ICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1Vu
Y2xhbXBlZDwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFy
aXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKGsxKQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwg
azMsIGs0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGht
ZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5
TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChrNCkgewotICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsczwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVu
Z3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoazEpCi0gICAg
ICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9u
LCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24s
IHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9Ci19Ci0jZW5kaWYKLQot
aW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi17Ci0gICAgaW50IGxl
bmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0
PGludD4oZGVzdGluYXRpb24ubGVuZ3RoKCkpKTsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUg
ZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5LgotI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKLSAgICBwbGF0Zm9ybUFy
aXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBr
MSwgazIsIGszLCBrNCk7Ci0jZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2UuZGF0
YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsK
LSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICAvLyBGb3IgSW4g
YW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgot
ICAgICAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBh
aW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQ
YWludFJlY3QoaW5wdXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBj
bGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKLSAgICAgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5m
bHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0Ci0g
ICAgICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KLSAgICAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJv
dGggaW5wdXQgZWZmZWN0cy4KLSAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIC8vIEFyaXRobWV0aWMg
bWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBj
YW4ndAorICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KKyAgICBpZiAobV9j
b21wb3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAg
ICAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CisgICAg
CisgICAgcmV0dXJuIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoaW5wdXRzLCBnZW9tZXRyeSk7
CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFQ29tcG9zaXRlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBpZiAobV90eXBl
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwot
ICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlw
bGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEs
IG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1
ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbiA9IHN0
YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBzdGFjay50YWtlTGFzdCgpOworICAgIAor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdp
b24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9
IGRlc3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAg
ICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3Rp
bmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9z
aXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6
ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5s
b2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3ApOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZm
ZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0
dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluLCBpbjIgfSwgbnVsbHB0cik7CiB9CiAKLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3Np
dGVPcGVyYXRpb25UeXBlJiB0eXBlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZFQ29tcG9zaXRlT3BlcmF0b3ImIGNvbXBvc2l0ZU9wZXJhdG9y
KQogewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0b3Ip
IHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgIHRzIDw8
ICJVTktOT1dOIjsKICAgICAgICAgYnJlYWs7CkBAIC0zMjgsMTggKzEyOSwxMyBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSYgdHlwZQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb21w
b3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0
aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29tcG9zaXRlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlv
bikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbXBvc2l0ZSI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0g
ICAgdHMgPDwgIiBvcGVyYXRpb249XCIiIDw8IG1fdHlwZSA8PCAiXCIiOwotICAgIGlmIChtX3R5
cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICB0cyA8PCAiIG9wZXJh
dGlvbj1cIiIgPDwgbV9jb21wb3NpdGVPcGVyYXRvciA8PCAiXCIiOworICAgIGlmIChtX2NvbXBv
c2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCiAgICAgICAg
IHRzIDw8ICIgazE9XCIiIDw8IG1fazEgPDwgIlwiIGsyPVwiIiA8PCBtX2syIDw8ICJcIiBrMz1c
IiIgPDwgbV9rMyA8PCAiXCIgazQ9XCIiIDw8IG1fazQgPDwgIlwiIjsKICAgICB0cyA8PCAiXVxu
IjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXggN2QwOGUxZjcx
MDdiNGI5NjhjNThlM2EzN2MzMmFlMmY3NmFlYTBjMy4uOTlmMjkwNWRjZmJjMDRjOGZjMWVhNThm
MWMwYTVmMWI4OWViNDNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTIgKzI0LDkgQEAKIAogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBDb21wb3NpdGVP
cGVyYXRpb25UeXBlIHsKK2VudW0gRkVDb21wb3NpdGVPcGVyYXRvciB7CiAgICAgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfVU5LTk9XTiAgICA9IDAsIAogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX09W
RVIgICAgICAgPSAxLAogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOICAgICAgICAgPSAyLApA
QCAtNDEsMTAgKzM5LDEwIEBAIGVudW0gQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB7CiAKIGNsYXNz
IEZFQ29tcG9zaXRlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRUNvbXBvc2l0ZT4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRUNv
bXBvc2l0ZT4gY3JlYXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KTsKIAotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSk7CisgICAgRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBib29s
IHNldENvbXBvc2l0ZU9wZXJhdG9yKEZFQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgZmxvYXQg
azEoKSBjb25zdCB7IHJldHVybiBtX2sxOyB9CiAgICAgYm9vbCBzZXRLMShmbG9hdCk7CkBAIC01
OCwzMCArNTYsMjAgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1cm4gbV9r
NDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1
aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAh
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6Ci0gICAgRkVD
b21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBGRUNvbXBvc2l0ZShGRUNvbXBvc2l0ZU9wZXJhdG9y
LCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKICAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9zaXRlIjsgfQog
Ci0gICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZl
Y3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0
IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAgICBib29sIGFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCi0gICAgdGVtcGxhdGUgPGludCBiMSwgaW50IGI0PgotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc05lb24oY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxv
YXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOworICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZv
cm1Bcml0aG1ldGljTmVvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0
IGszLCBmbG9hdCBrNCk7Ci0jZW5kaWYKLQotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgbV90
eXBlOworICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgbV9jb21wb3NpdGVPcGVyYXRvcjsKICAgICBm
bG9hdCBtX2sxOwogICAgIGZsb2F0IG1fazI7CiAgICAgZmxvYXQgbV9rMzsKQEAgLTg5LDQgKzc3
LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAKaW5kZXggNzViMmU3YzZlYTEzYzJjMWMyZjhmNjVkM2RiNGVkNWNjM2Fm
ZGE4Zi4uMTEyMzkzYWIwODZjZWRiOGJlZjZlNjFkZTQwNDg3YThhOTkxNjk4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFu
IEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQs
MTkgKzI1LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1h
dHJpeC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
LSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5o
PgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0Lmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywg
Y29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAg
IGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6Q29udm9sdmVNYXRyaXgpCi0gICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6
ZSkKK1JlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoY29uc3Qg
SW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50
UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBv
aW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIGtlcm5lbE1hdHJpeCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbnZv
bHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1v
ZGUsIGtlcm5lbFVuaXRMZW5ndGgsIHByZXNlcnZlQWxwaGEsIGtlcm5lbE1hdHJpeCkpOworfQor
CitGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5l
bFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRP
ZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5p
dExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxN
YXRyaXgpCisgICAgOiBtX2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKICAgICAsIG1fZGl2aXNvcihk
aXZpc29yKQogICAgICwgbV9iaWFzKGJpYXMpCiAgICAgLCBtX3RhcmdldE9mZnNldCh0YXJnZXRP
ZmZzZXQpCkBAIC00OSwxNCArNTAsNiBAQCBGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0
cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIEFTU0VS
VChtX2tlcm5lbFNpemUuaGVpZ2h0KCkgPiAwKTsKIH0KIAotUmVmPEZFQ29udm9sdmVNYXRyaXg+
IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYg
a2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2lu
dCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQ
b2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb252
b2x2ZU1hdHJpeChmaWx0ZXIsIGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNl
dCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCi0gICAgICAgIHByZXNlcnZlQWxwaGEsIGtl
cm5lbE1hdHJpeCkpOwotfQotCiB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUo
Y29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSkKIHsKICAgICBBU1NFUlQoa2VybmVsU2l6ZS53aWR0
aCgpID4gMCk7CkBAIC0xMjAsMzE4ICsxMTMsMjAgQEAgYm9vbCBGRUNvbnZvbHZlTWF0cml4Ojpz
ZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotLyoKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICBDb252
b2x2ZU1hdHJpeCBpbXBsZW1lbnRhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAgVGhlIGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93
aW5nIHdheToKLQotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAg
ICAgQSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAg
IHwgICAgICAgICAgICAgfCAgIHwKLSAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8Ci0gICAg
ICB8ICAgfCAgICAgICAgICAgICB8ICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK
LSAgICAgIHwgICAgICAgICAgRSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKwotCi0gICBXaGVyZSByZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZh
bHVlcwotICAgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0
aGUgcmVjdGFuZ2xlLgotCi0gICBFeGFtcGxlOgotICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEw
LCBoZWlnaHQ6IDEwCi0KLSAgICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDog
MywgaGVpZ2h0IDQKLSAgICAgIFRhcmdldDogeDoxLCB5OjMKLQotICAgICAgVGhlIGZvbGxvd2lu
ZyBmaWd1cmUgc2hvd3MgdGhlIHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6Ci0KLSAg
ICAgICAgLi4uCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLlguCi0KLSAgIFRo
ZSByZWdpb25zIGluIHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKLSAgICAgIE5vdGU6ICh4
MSwgeTEpIHRvcC1sZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgot
ICAgICAgTm90ZTogcm93IHgyIGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lv
bgotICAgICAgICAgICAgb25seSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwg
eDIgYW5kIHkxIDw9IHkgPCB5MgotCi0gICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4Mjog
MTAsIHkyOiAzCi0gICAgICBSZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCi0g
ICAgICBSZWdpb24gQzogeDE6IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCi0gICAgICBSZWdpb24g
RDogeDE6IDksIHkxOiAzLCB4MjogMTAsIHkyOiAxMAotICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5
MTogMTAsIHgyOiAxMCwgeTI6IDEwIChlbXB0eSByZWdpb24pCi0KLSAgIFNpbmNlIHJlZ2lvbiBD
IChvZnRlbikgY29udGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAotICAg
YSBmYXN0IGFsZ29yaXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0
SW50ZXJpb3JQaXhlbHMuCi0gICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxz
IGlzIHVzZWQsIHdoaWNoIGNhbGxzIGdldFBpeGVsVmFsdWUsCi0gICB0byBoYW5kbGUgcGl4ZWxz
IG91dHNpZGUgb2YgdGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgotICAga2Vy
bmVsIG1hdHJpeCBpcyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1
bGF0ZWQgYnkgdGhpcwotICAgZnVuY3Rpb24uCi0KLSAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5j
dGlvbnMgaGF2ZSBsb3QgaW4gY29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKLSAgIGNvbW1v
biBhIHRlbXBsYXRlIGZvciB0aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFz
IHdlbGwsCi0gICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgot
Ki8KLQotc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShm
bG9hdCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG1heCA9IDI1NSkKK0Zsb2F0UmVjdCBGRUNvbnZv
bHZlTWF0cml4OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChjaGFubmVs
IDw9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChjaGFubmVsID49IG1heCkKLSAgICAg
ICAgcmV0dXJuIG1heDsKLSAgICByZXR1cm4gY2hhbm5lbDsKKyAgICByZXR1cm4gZ2VvbWV0cnku
bWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CiB9CiAKLXRlbXBsYXRlPGJvb2wgcHJlc2Vy
dmVBbHBoYVZhbHVlcz4KLUFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxv
YXQgYmlhcykKK0ZpbHRlclJlc3VsdCogRkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoRmlsdGVyT3V0
cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29u
c3QKIHsKLSAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/
IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwr
KywgY2xhbXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7
Ci0KLSAgICBpZiAocHJlc2VydmVBbHBoYVZhbHVlcykgewotICAgICAgICBkZXN0UGl4ZWxzLnNl
dChwaXhlbCwgc291cmNlUGl4ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAgICAgKytwaXhlbDsKLSAg
ICB9IGVsc2UKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwotfQot
Ci0jaWYgQ09NUElMRVIoTVNWQykKLS8vIEluY29ycmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRl
IG9mIHN0YWNrIGluIHx0b3RhbHN8IGR1ZSB0byB8cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJh
Z21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlm
Ci0KLS8vIE9ubHkgZm9yIHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1
ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9y
UGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xp
cEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8gZWRnZSBtb2RlIGRvZXMg
bm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQu
eSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAg
aW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0g
KG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0g
b2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhh
VmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7
Ci0KLSAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKLSAg
ICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQg
KyAxKSAqIDQpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5k
KSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQotICAgIGZvciAoaW50IHkg
PSB5RW5kICsgMTsgeSA+IHlTdGFydDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBjbGlw
UmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBw
YWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2Vy
bmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9r
ZXJuZWxTaXplLndpZHRoKCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1
dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwot
ICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0g
ICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90
YWxzWzNdID0gMDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7
ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAgICAgICB3aGlsZSAo
a2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAg
ICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJu
ZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5r
ZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIGlm
ICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9
IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKLSAgICAg
ICAgICAgICAgICArK2tlcm5lbFBpeGVsOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7
Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtl
cm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9
IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBw
aXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKLSAgICAgICAgICAg
IHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5j
cmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOwotICAgIH0KLX0K
LQotQUxXQVlTX0lOTElORSBpbnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQotewotICAgIGlmICh4ID49IDAg
JiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5o
ZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7
Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9O
T05FCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKLSAg
ICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHgg
Pj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0
aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkKLSAgICAgICAgICAgIHkgPSAwOwotICAgICAgICBl
bHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgICAgICB5ID0gcGFpbnRp
bmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0
aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAgICB3aGlsZSAoeCA8
IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICAgICAgeCAlPSBw
YWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHdoaWxlICh5IDwgMCkKLSAgICAgICAgICAgIHkg
Kz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0
OwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAg
IH0KLX0KLQotLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1wbGF0ZTxib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50
IHkyKQotewotICAgIGludCBwaXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAq
IDQ7Ci0gICAgaW50IGhlaWdodCA9IHkyIC0geTE7Ci0gICAgaW50IHdpZHRoID0geDIgLSB4MTsK
LSAgICBpbnQgYmVnaW5LZXJuZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKLSAg
ICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3Rh
cnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsKLSAgICBpbnQgeEluY3Jl
YXNlID0gKHBhaW50aW5nRGF0YS53aWR0aCAtIHdpZHRoKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMg
dGhlIHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNl
cnZlQWxwaGFWYWx1ZXMgPyAwIDogMSldOwotCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAw
LCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9k
aXZpc29yKTsKLQotICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2Vy
bmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAg
ICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICBp
bnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lk
dGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsK
LSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwot
ICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRv
dGFsc1szXSA9IDA7Ci0KLSAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0
YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOwotICAgICAgICAgICAgICAgIGlmIChwaXhl
bEluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5n
RGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCkpOwotICAgICAgICAgICAgICAg
ICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhl
bEluZGV4ICsgMSkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJ
bmRleCA+PSAwKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRh
Lmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMykpOwotICAgICAgICAgICAgICAg
ICsra2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVs
WCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVs
WTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0
aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBw
YWludGluZ0RhdGEuYmlhcyk7Ci0gICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwotICAg
ICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3RhcnRLZXJuZWxQ
aXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsK
LSAgICB9Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8g
RGlzYWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
Y2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAg
Ly8gTXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdB
WVNfSU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291
cmNlIGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RT
ZXRJbnRlcmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRv
bSwgeVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVs
czxmYWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVu
ZCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBp
eGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4Miwg
aW50IHkyKQotewotICAgIC8vIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRv
IHRoZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldElu
dGVyaW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZl
QWxwaGEpCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgx
LCB5MSwgeDIsIHkyKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxz
ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9w
cmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVs
QXJyYXk7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJh
eSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7Ci0gICAgZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnBy
ZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50
U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIFBhaW50aW5nRGF0YSBw
YWludGluZ0RhdGEgPSB7Ci0gICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0
aW5hdGlvblBpeGVsQXJyYXksCi0gICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAotICAgICAgICBw
YWludFNpemUuaGVpZ2h0KCksCi0gICAgICAgIG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9ybWFs
aXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKLSAgICB9OwotCi0gICAgLy8gRHJhd2luZyBmdWxs
eSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAt
IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhl
aWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOwotCi0gICAgaWYgKGNsaXBSaWdodCA8IDAg
fHwgY2xpcEJvdHRvbSA8IDApIHsKLSAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRp
bWl6aWVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0
KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVj
dERpbWVuc2lvbikgewotICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlv
bnM7Ci0gICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAv
IHN0cmlkZTsKLQotICAgICAgICBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShjaHVua0NvdW50
LCBbJl0oc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAq
IGluZGV4KTsKLSAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAo
aW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxz
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAg
ICAgICB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdE
YXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJp
Z2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3Rhcmdl
dE9mZnNldC55KCkgKyAxOwotICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAg
ICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBt
X3RhcmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdo
dCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20s
IHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3Rhcmdl
dE9mZnNldC54KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAg
ICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6
ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0cik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCkBAIC00NTMsMTAgKzE0OCw5
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBF
ZGdlTW9kZVR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNv
bnZvbHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXBy
ZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbnZv
bHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbnZvbHZl
TWF0cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG9yZGVyPVwiIiA8PCBtX2tlcm5lbFNpemUgPDwg
IlwiICIKICAgICAgICA8PCAia2VybmVsTWF0cml4PVwiIiA8PCBtX2tlcm5lbE1hdHJpeCAgPDwg
IlwiICIKICAgICAgICA8PCAiZGl2aXNvcj1cIiIgPDwgbV9kaXZpc29yIDw8ICJcIiAiCkBAIC00
NjUsOSArMTU5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXQKICAgICAgICA8PCAiZWRnZU1v
ZGU9XCIiIDw8IG1fZWRnZU1vZGUgPDwgIlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0
aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoIDw8ICJcIiAiCiAgICAgICAgPDwgInByZXNlcnZl
QWxwaGE9XCIiIDw8IG1fcHJlc2VydmVBbHBoYSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVh
bTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDY3ZDRjNjU2N2ZjZTZiMjdlZTVhYjg5NWE2
ZTFlNTAwNTRlMTNkYmEuLjFhNjk1YjRkOTIxZjI2ODY2ZjBkYTNkMTJiOWNmMmI2MGUzOTc0MjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBa
b2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNCw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw5ICszOCw3IEBAIGVudW0gRWRnZU1vZGVU
eXBlIHsKIAogY2xhc3MgRkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRlciYs
IGNvbnN0IEludFNpemUmLAotICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2lu
dCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29sLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisgICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBj
cmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlh
cywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2tlcm5lbFNpemU7IH0KICAgICB2b2lkIHNldEtlcm5lbFNpemUoY29uc3Qg
SW50U2l6ZSYpOwpAQCAtNjcsNDEgKzY1LDE3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFByZXNl
cnZlQWxwaGEoYm9vbCk7CiAKIHByaXZhdGU6Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsK
LSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAg
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0g
ICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGZsb2F0IGJpYXM7Ci0gICAgICAgIFZlY3Rvcjxm
bG9hdD4ga2VybmVsTWF0cml4OwotICAgIH07Ci0KLSAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRl
ciYsIGNvbnN0IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQ
b2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mKTsKKyAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNp
emUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZz
ZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9v
bCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCiAg
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZv
bHZlTWF0cml4IjsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2Vy
dmVBbHBoYVZhbHVlcz4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9yUGl4
ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0
YXJ0LCBpbnQgeUVuZCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1ZShQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHkpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJS
ZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0
cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTQsNCArODgsMyBAQCBwcml2YXRlOgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3Bw
CmluZGV4IGVlYjE3MjhkYjM1ZThhYzMwMmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLjU5NzlkMGZj
OWExMDlhMmU3NDY1OWNjOThhNGNjZWQ0MTBjNzU5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI3LDM2ICsyOCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVzZUxp
Z2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNl
TGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAw
LCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRT
b3VyY2UpLCBUeXBlOjpEaWZmdXNlTGlnaHRpbmcpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZF
RGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2Nh
bGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlKQorRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VT
Y2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RURpZmZ1c2VMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlm
ZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1v
dmUobGlnaHRTb3VyY2UpKSk7CiB9CiAKLUZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZmdXNlTGln
aHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRkVEaWZmdXNlTGlnaHRpbmc6OnNldERpZmZ1c2VD
b25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCi17Ci0gICAgaWYgKG1fZGlmZnVzZUNvbnN0
YW50ID09IGRpZmZ1c2VDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGlm
ZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1U
ZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4
dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlRGlmZnVzZUxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHN1cmZhY2VTY2Fs
ZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKICAgICAgICA8PCAiZGlmZnVzZUNvbnN0
YW50PVwiIiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxV
bml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJuZWxV
bml0TGVuZ3RoWSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5k
ZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYzZTExMjhiODQyNjE1ZTQ3NTEzYTBkZGRjMy4u
OTYwMDYyMDQ5YTIyZmU1YTg1Y2JmZWJiMzQ5ZWNmMWFiZDQxNzk3MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNl
TGlnaHRpbmcuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNSwyMSArMjYsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBM
aWdodFNvdXJjZTsKLQogY2xhc3MgRkVEaWZmdXNlTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGlu
ZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKEZp
bHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdo
dFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVEaWZmdXNlTGlnaHRpbmcoKTsKLQotICAgIGZs
b2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9
Ci0gICAgYm9vbCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQpOwotCi0gICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGlu
Zz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNl
Q29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGlu
ZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8
TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAg
ICAKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
IkZFRGlmZnVzZUxpZ2h0aW5nIjsgfQorCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcAppbmRleCAwNDc0OTMzOTJiYjI4MTQ2ZDhiMTY5YmEwYTdjMzJiMTZjNTYz
ZmExLi5kODUyMDQxYzM4ODI5MDU4OWVmNzExM2Y5MmExYjU5YzJlNjcwZGUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjQsMTMyICsyNSw1MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFRGlzcGxhY2VtZW50TWFwLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpc3BsYWNl
bWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRpc3Bs
YWNlbWVudE1hcCkKLSAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQot
ICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCi0gICAgLCBtX3NjYWxl
KHNjYWxlKQorUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRl
KENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRURpc3BsYWNlbWVudE1hcCh4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9y
LCBzY2FsZSkpOwogfQogCi1SZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFw
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxl
Y3RvciwKLSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNj
YWxlKQorRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSkKKyAgICA6IG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVj
dG9yKQorICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCisgICAgLCBt
X3NjYWxlKHNjYWxlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlzcGxhY2VtZW50
TWFwKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsK
IH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBD
aGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IpCiB7Ci0gICAgaWYgKG1feENoYW5u
ZWxTZWxlY3RvciA9PSB4Q2hhbm5lbFNlbGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV94Q2hhbm5lbFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3hDaGFubmVsU2VsZWN0b3IsIHhDaGFubmVs
U2VsZWN0b3IpICE9IG1feENoYW5uZWxTZWxlY3RvcjsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVu
dE1hcDo6c2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFu
bmVsU2VsZWN0b3IpCiB7Ci0gICAgaWYgKG1feUNoYW5uZWxTZWxlY3RvciA9PSB5Q2hhbm5lbFNl
bGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV95Q2hhbm5lbFNlbGVjdG9yID0g
eUNoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNo
YW5nZShtX3lDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IpICE9IG1feUNoYW5uZWxT
ZWxlY3RvcjsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2Nh
bGUpCiB7Ci0gICAgaWYgKG1fc2NhbGUgPT0gc2NhbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3NjYWxlID0gc2NhbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJikKLXsKLSAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycg
cHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UKLSAgICAvLyBh
bmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUgJ2luJyBzb3Vy
Y2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCi0gICAgLy8gY3VycmVudCBjb2xvciBzcGFjZS4K
LSAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBiZWNhdXNlIGl0
IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRlckVmZmVjdDo6
c2V0UmVzdWx0Q29sb3JTcGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpKTsK
LX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShG
aWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gbm90IHRyYW5z
Zm9ybSB0aGUgZmlyc3QgcHJpbWl0aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYg
KGluZGV4KQotICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2NhbGUsIHNjYWxlKSAh
PSBtX3NjYWxlOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVs
KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQorRmxvYXRSZWN0IEZF
RGlzcGxhY2VtZW50TWFwOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGNvbnN0
IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhl
bCArIHkgKiByb3dCeXRlczsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVn
aW9uKGlucHV0cyk7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXJP
dXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBj
b25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgQVNTRVJUKG1feENoYW5uZWxT
ZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwotICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0
b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgp
ID49IDIpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFE
cmF3aW5nUmVjdCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKAmGluMuKA
mSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KLSAg
ICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0
QkRyYXdpbmdSZWN0KTsKLSAgICAKLSAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3BsYWNlbWVu
dEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaW5wdXRJbWFnZS0+bGVuZ3Ro
KCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsKLQotICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotCi0gICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2Fs
ZS53aWR0aCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWln
aHQoKSAvIDI1NS4wOwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0
aCgpICogMC41OwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFkgPSAwLjUgLSBzY2FsZS5oZWlnaHQo
KSAqIDAuNTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIGluMiA9
IHN0YWNrLnRha2VMYXN0KCk7CiAgICAgCi0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0g
eENoYW5uZWxJbmRleCgpOwotICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVs
SW5kZXgoKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0
aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgaW50IHJvd0J5dGVzID0gcGFp
bnRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNpemUu
aGVpZ2h0KCk7ICsreSkgewotICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJvd0J5
dGVzOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsr
eCkgewotICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQg
KyB4ICogNDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGlj
X2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3Rp
bmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKLSAg
ICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkg
KiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50
Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0
aW5hdGlvblBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9u
UGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKLSAgICAgICAgICAgIGlmIChz
cmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kg
Pj0gcGFpbnRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4
ZWxQdHIgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkKj4oaW5wdXRJbWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwg
cm93Qnl0ZXMpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShv
dXRwdXQsIHsgaW4sIGluMiB9LCBudWxscHRyKTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUp
CkBAIC0xNzQsMTcgKzk2LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFRGlzcGxhY2VtZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZURpc3BsYWNlbWVudE1hcCI7Ci0gICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBz
Y2FsZT1cIiIgPDwgbV9zY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJ4Q2hhbm5lbFNlbGVjdG9y
PVwiIiA8PCBtX3hDaGFubmVsU2VsZWN0b3IgPDwgIlwiICIKICAgICAgICA8PCAieUNoYW5uZWxT
ZWxlY3Rvcj1cIiIgPDwgbV95Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICBpbnB1dEVm
ZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAg
IHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IGRkNzMyYTg4MTA3
M2UyNjZiYzg0NmFmZTY4MTllNjc1MTYyM2EzYTIuLjM5Y2U1NDljZjE5ZWFjMGRhNTI4ZjYyYmYz
MDI0ODNkNjE1MTBkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zNyw3ICszNiw3IEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7CiAKIGNsYXNz
IEZFRGlzcGxhY2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKEZpbHRlciYsIENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNl
bGVjdG9yLCBmbG9hdCBzY2FsZSk7CisgICAgc3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4g
Y3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKICAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2Vs
ZWN0b3I7IH0KICAgICBib29sIHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVj
dG9yVHlwZSk7CkBAIC00OCwyMiArNDcsMjEgQEAgcHVibGljOgogICAgIGZsb2F0IHNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQogICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwogCi0g
ICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
IG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwotCiBwcml2YXRlOgotICAgIEZFRGlzcGxhY2VtZW50
TWFwKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5l
bFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CisgICAgRkVEaXNwbGFjZW1l
bnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKKworICAgIGludCB4Q2hhbm5l
bEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQorICAgIGlu
dCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsg
fQogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RURpc3BsYWNlbWVudE1hcCI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZp
bHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFj
aywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGludCB4
Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQot
ICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9y
IC0gMTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1f
eUNoYW5uZWxTZWxlY3RvcjsKQEAgLTcxLDQgKzY5LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDVjZTdiZTNhNDcxYjQ3
YjhkZDU0MjZkOTY1YmJmZTc4OWY2YmJkZDguLjgwODc1Yjg4YzQyNzNhNjJhOGMwOTBiZWQ1ZTE4
NzE3NzhlNDAxMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsOTggKzI0LDQ4IEBACiAjaW5jbHVk
ZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKICNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBm
aWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZm
ZWN0KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRvdykKLSAgICAsIG1fc3RkWChzdGRYKQotICAgICwg
bV9zdGRZKHN0ZFkpCi0gICAgLCBtX2R4KGR4KQotICAgICwgbV9keShkeSkKLSAgICAsIG1fc2hh
ZG93Q29sb3Ioc2hhZG93Q29sb3IpCi0gICAgLCBtX3NoYWRvd09wYWNpdHkoc2hhZG93T3BhY2l0
eSkKLXsKLX0KIAotUmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29u
c3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorUmVmPEZFRHJvcFNo
YWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQg
ZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgs
IGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIGNvbG9yLCBvcGFjaXR5KSk7CiB9
CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGRURy
b3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKKyAgICA6IG1fc3Rk
WChzdGRYKQorICAgICwgbV9zdGRZKHN0ZFkpCisgICAgLCBtX2R4KGR4KQorICAgICwgbV9keShk
eSkKKyAgICAsIG1fY29sb3IoY29sb3IpCisgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKIHsKLSAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotCi0gICAgRmxvYXRSZWN0IGFic29s
dXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAg
RmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKLSAg
ICBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29s
dXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShhYnNv
bHV0ZU9mZnNldFBhaW50UmVjdCk7Ci0KLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7
Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3
aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNv
bHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0g
ICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAw
LjVmKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRS
ZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1
dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLQotICAgIHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBG
RURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVEcm9wU2hh
ZG93OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0
ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFk
aXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKLSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBG
bG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgs
IG1fZHkgfSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKLSAgICBkcmF3aW5nUmVnaW9uV2l0
aE9mZnNldC5tb3ZlKG9mZnNldCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBp
bi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFjaXR5
KTsKLSAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdp
bmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOwotCi0g
ICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dD
b2xvcik7Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3Bh
Y2UoKSB9OwotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+
bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQ
aXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxB
cnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgp
LndpZHRoKCkpOwotICAgIAotICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxC
dWZmZXIsIHNoYWRvd0FyZWEpOwotCi0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKLSAgICByZXN1bHRDb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KSwgbV9zaGFkb3dDb2xvcik7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7Ci0KLSAgICByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb24p
OworICAgIHJldHVybiB7IH07CisvLyAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigp
OworLy8KKy8vICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDAp
LT5hYnNvbHV0ZVBhaW50UmVjdCgpOworLy8gICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFp
bnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKKy8vICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0
Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwor
Ly8gICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOwor
Ly8KKy8vICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVL
ZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKy8vCisvLyAgICAvLyBXZSB0
YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNh
dXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKy8vICAgIGFic29sdXRlUGFpbnRSZWN0
LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKKy8vICAgIGFic29sdXRl
UGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CisvLwor
Ly8gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKKy8vICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5p
bnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKKy8vICAgIGVsc2UKKy8vICAgICAgICBhYnNvbHV0
ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworLy8KKy8vICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKIH0KIAogSW50T3V0c2V0cyBGRURyb3BT
aGFkb3c6Om91dHNldHMoKSBjb25zdApAQCAtMTI4LDE0ICs3OSwyMyBAQCBJbnRPdXRzZXRzIEZF
RHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0CiAgICAgfTsKIH0KIAotVGV4dFN0cmVhbSYgRkVE
cm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNl
bnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFRHJvcFNo
YWRvdzo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsKLSAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNo
YWRvdyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAi
LCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5
IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFj
aXR5IDw8ICJdXG4iOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGlu
ID0gc3RhY2sudGFrZUxhc3QoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1
bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICByZXR1cm4g
YXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0m
IEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmls
dGVyUmVwcmVzZW50YXRpb24pIGNvbnN0Cit7CisgICAgdHMgIDw8IGluZGVudCA8PCJbZmVEcm9w
U2hhZG93IjsKKyAgICB0cyAgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAi
IDw8IG1fc3RkWQorICAgICAgICA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8
PCBtX2R5CisgICAgICAgIDw8ICJcIiBjb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQobV9jb2xvcikgPDwiXCIgb3BhY2l0eT1cIiIgPDwgbV9vcGFjaXR5IDw8ICJd
XG4iOwogICAgIHJldHVybiB0czsKIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAx
MmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEyOWVmZjM4NGMuLmQ1NTY1ZTQ5NzI4ZTA4M2UxYjMxM2Vl
ZDExNmJiYzY1YjA4N2NiODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwxNCArMjEsMTMgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3Mg
RkVEcm9wU2hhZG93IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+
IGNyZWF0ZShmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0
IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAKICAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29u
c3QgeyByZXR1cm4gbV9zdGRYOyB9CiAgICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0
ZFgpIHsgbV9zdGRYID0gc3RkWDsgfQpAQCAtNDEsMzIgKzQxLDMzIEBAIHB1YmxpYzoKICAgICBm
bG9hdCBkeSgpIGNvbnN0IHsgcmV0dXJuIG1fZHk7IH0KICAgICB2b2lkIHNldER5KGZsb2F0IGR5
KSB7IG1fZHkgPSBkeTsgfQogCi0gICAgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFkb3dDb2xvcjsgfSAKLSAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7IH0KKyAg
ICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgdm9p
ZCBzZXRjQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsgfQogCi0g
ICAgZmxvYXQgc2hhZG93T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93T3BhY2l0eTsg
fQotICAgIHZvaWQgc2V0U2hhZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hh
ZG93T3BhY2l0eSA9IHNoYWRvd09wYWNpdHk7IH0KKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
IHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQogCiBwcml2YXRlOgotICAgIEZFRHJvcFNoYWRvdyhG
aWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7
CisgICAgRkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9h
dCBkeSwgY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQogCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVz
dWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciopIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZp
bHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7
CiAgICAgZmxvYXQgbV9keDsKICAgICBmbG9hdCBtX2R5OwotICAgIENvbG9yIG1fc2hhZG93Q29s
b3I7Ci0gICAgZmxvYXQgbV9zaGFkb3dPcGFjaXR5OworICAgIENvbG9yIG1fY29sb3I7CisgICAg
ZmxvYXQgbV9vcGFjaXR5OwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHAKaW5kZXggYjQyMzU1MzRjMzhiMWViYTIxMWVlODQ4NjE3OTkyMzgwZjNiNmIwMS4uOWJjYTJk
NWRjYTQ5NDUyZjdlNGM4YzhiZDc5OGMwOTJkZGM5MjUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCkBAIC0zLDYgKzMs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI0LDU2ICsyNSw1NSBAQAogI2luY2x1ZGUgIkZFRmxvb2QuaCIKIAog
I2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUZsb29kOjpGRUZsb29kKEZpbHRlciYgZmls
dGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Rmxvb2QpCi0gICAgLCBtX2Zsb29kQ29sb3IoZmxv
b2RDb2xvcikKLSAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29k
PiBGRUZsb29kOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQogewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2QoY29sb3IsIG9wYWNpdHkpKTsKIH0KIAot
UmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKK0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3Qg
Q29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQorICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAs
IG1fb3BhY2l0eShvcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2Qo
ZmlsdGVyLCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKIH0KIAotYm9vbCBGRUZsb29kOjpz
ZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK2Jvb2wgRkVGbG9vZDo6c2V0Q29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChtX2Zsb29kQ29sb3IgPT0gY29sb3IpCisg
ICAgaWYgKG1fY29sb3IgPT0gY29sb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Zs
b29kQ29sb3IgPSBjb2xvcjsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkK
K2Jvb2wgRkVGbG9vZDo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChtX2Zs
b29kT3BhY2l0eSA9PSBmbG9vZE9wYWNpdHkpCisgICAgaWYgKG1fb3BhY2l0eSA9PSBvcGFjaXR5
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9mbG9vZE9wYWNpdHkgPSBmbG9vZE9wYWNp
dHk7CisgICAgbV9vcGFjaXR5ID0gb3BhY2l0eTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFRmxvb2Q6OmRy
YXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJl
dHVybjsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7Cit9
CisKK0ZpbHRlclJlc3VsdCogRkVGbG9vZDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZp
bHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKikgY29uc3QKK3sKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgYXV0byBjb2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5m
aWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSksIGNvbG9yKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgfSwgbnVsbHB0
cik7CiB9CiAKLVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1Rl
eHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIHRzIDw8IGluZGVudCA8PCAiW2Zl
Rmxvb2QiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGZsb29kQ29sb3IoKSkgPDwgIlwiICIKLSAgICAgICA8PCAi
Zmxvb2Qtb3BhY2l0eT1cIiIgPDwgZmxvb2RPcGFjaXR5KCkgPDwgIlwiXVxuIjsKKyAgICB0cyAg
PDwgaW5kZW50IDw8ICJbZmVGbG9vZCI7CisgICAgdHMgIDw8ICIgY29sb3I9XCIiIDw8IHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKCkpIDw8ICJcIiAiCisgICAgICAgIDw8
ICJvcGFjaXR5PVwiIiA8PCBvcGFjaXR5KCkgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0NjgyZmEwNjE3MzQ4ZS4uNzk4
NmQ0NjY4NGJmNThhYmNiY2U4NGNmYjY2YTIxMjI4MDhhZTc5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNDIgKzIzLDM1IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRkVGbG9vZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVGbG9vZD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIHN0
YXRpYyBSZWY8RkVGbG9vZD4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAK
LSAgICBjb25zdCBDb2xvciYgZmxvb2RDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RDb2xv
cjsgfQotICAgIGJvb2wgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYpOworICAgIGNvbnN0IENv
bG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBib29sIHNldENvbG9y
KGNvbnN0IENvbG9yJik7CiAKLSAgICBmbG9hdCBmbG9vZE9wYWNpdHkoKSBjb25zdCB7IHJldHVy
biBtX2Zsb29kT3BhY2l0eTsgfQotICAgIGJvb2wgc2V0Rmxvb2RPcGFjaXR5KGZsb2F0KTsKLQot
I2lmICFVU0UoQ0cpCi0gICAgLy8gZmVGbG9vZCBkb2VzIG5vdCBwZXJmb3JtIGNvbG9yIGludGVy
cG9sYXRpb24gb2YgYW55IGtpbmQsIHNvIHRoZSByZXN1bHQgaXMgYWx3YXlzIGluIHRoZSBjdXJy
ZW50Ci0gICAgLy8gY29sb3Igc3BhY2UgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgY29sb3It
aW50ZXJwb2xhdGlvbi1maWx0ZXJzLgotICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KLSAgICB2
b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3Zl
cnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOyB9Ci0jZW5kaWYKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgYm9vbCBzZXRPcGFjaXR5KGZsb2F0KTsKIAogcHJpdmF0
ZToKLSAgICBGRUZsb29kKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIEZFRmxv
b2QoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9vZCI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBDb2xvciBt
X2Zsb29kQ29sb3I7Ci0gICAgZmxvYXQgbV9mbG9vZE9wYWNpdHk7CisgICAgQ29sb3IgbV9jb2xv
cjsKKyAgICBmbG9hdCBtX29wYWNpdHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2YzNmViYjZiYmI4
YWIzNjM5NDM2NS4uYzcwNTk0MDk3NGViYTljNjA3NWM1OWQyMGNlZmM1MDI5NDc0Njc4MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjYsNDUwICsyNiwzNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyLmgiCiAKLSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIFVTRShB
Q0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2Vy
bmVsRmFjdG9yKCkKLXsKLSAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsK
LX0KLQotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlv
biwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKK1Jl
ZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5v
cmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRldGFpbHMu
Ci0gICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBpZiAo
IShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMiAtIDE7
Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAgICAgICAgICAg
IGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAg
ICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewot
ICAgICAgICAgICAgZGVsdGFSaWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1
c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNz
aWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5CbHVyKQot
ICAgICwgbV9zdGRYKHgpCitGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorICAgIDogbV9zdGRYKHgpCiAgICAgLCBt
X3N0ZFkoeSkKICAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCiB7CiB9CiAKLVJlZjxGRUdhdXNz
aWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFR2F1c3NpYW5CbHVyKGZpbHRlciwgeCwgeSwgZWRnZU1vZGUpKTsKLX0KLQotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4KQotewotICAgIG1fc3RkWCA9
IHg7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkK
LXsKLSAgICBtX3N0ZFkgPSB5OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9k
ZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOwot
fQotCi0vLyBUaGlzIGZ1bmN0aW9uIG9ubHkgb3BlcmF0ZXMgb24gQWxwaGEgY2hhbm5lbC4KLWlu
bGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1Bp
eGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LAotICAgIHVuc2lnbmVk
IGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVM
aW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhL
ZXJuZWxTaXplKQotewotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5
LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0g
ICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwgemVyby1pbmRleCBiYXNlZC4KLSAgICBj
b25zdCBpbnQgY2hhbm5lbCA9IDM7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhl
aWdodDsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAg
IGludCBzdW0gPSAwOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgY29uc3QgdWludDhf
dCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKLSAgICAgICAgICAgIHN1bSArPSBzcmNQdHJb
Y2hhbm5lbF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZSArIGNoYW5uZWw7Ci0gICAgICAg
ICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotICAgICAg
ICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bSAvIGR4KTsKLQotICAgICAg
ICAgICAgLy8gU2hpZnQga2VybmVsLgotICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4
TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBz
cmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gLT0gKnNyY1B0cjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgp
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNl
dCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3Jj
UHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1bSArPSAqc3Jj
UHRyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBi
b3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1w
ZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50
IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGlu
dCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQot
ewotICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0
V2lkdGgpOwotICAgIGlmIChhbHBoYUltYWdlKQotICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhh
T25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBz
dHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxT
aXplKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEo
KTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICAv
LyBDb25jZXJuaW5nIHRoZSBhcnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSAr
IE1hcmdpbiArIEJvcmRlci4gVGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQotICAgIC8vIFAg
PSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzLgotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZm
ZWN0SGVpZ2h0OyArK3kpIHsKLSAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKLSAg
ICAgICAgaW50IHN1bVIgPSAwLCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAwOwotCi0gICAg
ICAgIGlmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FKSB7Ci0gICAgICAgICAgICAvLyBGaWxs
IHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNp
emU7ICsraSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICog
c3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEg
KyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAg
ICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRyOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
ZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9m
ZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0
ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRy
KysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAg
ICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAg
ICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA+PSBk
eExlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVs
Qnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bVIgLT0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0
clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAg
ICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAq
IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3Jj
RGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clsw
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNy
Y1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIGhlcmUu
Ci0gICAgICAgICAgICAvLyBHZXQgZWRnZSB2YWx1ZXMgZm9yIGVkZ2VNb2RlICdkdXBsaWNhdGUn
LgotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlTGVmdCA9IHNyY0RhdGEgKyBs
aW5lOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlUmlnaHQgID0gc3JjRGF0
YSArIChsaW5lICsgKGVmZmVjdFdpZHRoIC0gMSkgKiBzdHJpZGUpOwotCi0gICAgICAgICAgICAv
LyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gZHhMZWZ0ICogLTE7
IGkgPCBkeFJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHJpZ2h0IGZv
ciBuZWdhdGl2ZSB2YWx1ZXMgb2YgJ2knPwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVMZWZ0WzBdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZUxlZnRbMV07Ci0gICAgICAgICAgICAgICAgICAg
IHN1bUIgKz0gZWRnZVZhbHVlTGVmdFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBl
ZGdlVmFsdWVMZWZ0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+PSBlZmZlY3RX
aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOwot
ICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAg
ICBzdW1HICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLQot
ICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBk
eCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Vt
RyAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90
PihzdW1CIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihzdW1BIC8gZHgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgotICAg
ICAgICAgICAgICAgIGlmICh4IDwgZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIg
LT0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBlZGdlVmFs
dWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IGVkZ2VWYWx1ZUxlZnRbMl07
Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0
ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcg
LT0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKLSAg
ICAgICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0ID49IGVmZmVjdFdpZHRoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1
bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRn
ZVZhbHVlUmlnaHRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICog
c3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNE
YXRhICsgcmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBd
OwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQiArPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3Jj
UHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotaW5saW5lIHZvaWQgYWNjZWxlcmF0ZUJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1
ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBp
bnQgZWZmZWN0SGVpZ2h0KQotewotICAgIGlmICghaW9CdWZmZXIuZGF0YSgpIHx8ICF0ZW1wQnVm
ZmVyLmRhdGEoKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChlZmZlY3RXaWR0aCA8PSAwIHx8IGVmZmVjdEhlaWdodCA8
PSAwIHx8IHN0cmlkZSA8PSAwKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgbXVzdCBhbHdheXMgdXNlIGFuIG9kZCBy
YWRpdXMuCi0gICAgaWYgKGtlcm5lbFNpemUgJSAyICE9IDEpCi0gICAgICAgIGtlcm5lbFNpemUg
Kz0gMTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZWZmZWN0SW5CdWZmZXI7Ci0gICAgZWZmZWN0SW5C
dWZmZXIuZGF0YSA9IHN0YXRpY19jYXN0PHZvaWQqPihpb0J1ZmZlci5kYXRhKCkpOwotICAgIGVm
ZmVjdEluQnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZmZWN0SW5CdWZmZXIuaGVp
Z2h0ID0gZWZmZWN0SGVpZ2h0OwotICAgIGVmZmVjdEluQnVmZmVyLnJvd0J5dGVzID0gc3RyaWRl
OwotCi0gICAgdkltYWdlX0J1ZmZlciBlZmZlY3RPdXRCdWZmZXI7Ci0gICAgZWZmZWN0T3V0QnVm
ZmVyLmRhdGEgPSB0ZW1wQnVmZmVyLmRhdGEoKTsKLSAgICBlZmZlY3RPdXRCdWZmZXIud2lkdGgg
PSBlZmZlY3RXaWR0aDsKLSAgICBlZmZlY3RPdXRCdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0
OwotICAgIGVmZmVjdE91dEJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIC8vIERldGVy
bWluZSB0aGUgc2l6ZSBvZiBhIHRlbXBvcmFyeSBidWZmZXIgYnkgY2FsbGluZyB0aGUgZnVuY3Rp
b24gZmlyc3Qgd2l0aCBhIHNwZWNpYWwgZmxhZy4gdkltYWdlIHdpbGwgcmV0dXJuCi0gICAgLy8g
dGhlIHNpemUgbmVlZGVkLCBvciBhbiBlcnJvciAod2hpY2ggYXJlIGFsbCBuZWdhdGl2ZSkuCi0g
ICAgc2l6ZV90IHRtcEJ1ZmZlclNpemUgPSB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZm
ZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIDAsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5l
bFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kIHwga3ZJbWFnZUdldFRlbXBCdWZmZXJTaXplKTsK
LSAgICBpZiAodG1wQnVmZmVyU2l6ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2b2lk
KiB0bXBCdWZmZXIgPSBmYXN0TWFsbG9jKHRtcEJ1ZmZlclNpemUpOwotICAgIHZJbWFnZUJveENv
bnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgdG1wQnVm
ZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7
Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdE91dEJ1ZmZlciwgJmVmZmVj
dEluQnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2
SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0
SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwg
a2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIFdURjo6ZmFzdEZyZWUodG1w
QnVmZmVyKTsKLQotICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBp
b0J1ZmZlci4KLSAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gdGVtcEJ1ZmZlci5sZW5n
dGgoKSk7Ci0gICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgdGVtcEJ1ZmZlci5kYXRhKCksIGlv
QnVmZmVyLmxlbmd0aCgpKTsKLX0KLSNlbmRpZgotCi1pbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1
ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3Ry
aWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUg
ZWRnZU1vZGUpCi17Ci0gICAgaW50IGR4TGVmdCA9IDA7Ci0gICAgaW50IGR4UmlnaHQgPSAwOwot
ICAgIGludCBkeUxlZnQgPSAwOwotICAgIGludCBkeVJpZ2h0ID0gMDsKLSAgICAKLSAgICBVaW50
OENsYW1wZWRBcnJheSogZnJvbUJ1ZmZlciA9ICZpb0J1ZmZlcjsKLSAgICBVaW50OENsYW1wZWRB
cnJheSogdG9CdWZmZXIgPSAmdGVtcEJ1ZmZlcjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MzsgKytpKSB7Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWCkgewotICAgICAgICAgICAga2VybmVs
UG9zaXRpb24oaSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCk7Ci0jaWYgSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAg
ICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgs
IGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXpl
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpm
cm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0
cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgdHJ1ZSwgZWRnZU1v
ZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwg
a2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgo
KSwgcGFpbnRTaXplLmhlaWdodCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgot
ICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWSkgewotICAgICAgICAgICAga2VybmVsUG9zaXRpb24o
aSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCk7Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAgICAgICAgICAg
Ym94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwg
ZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVy
LCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFp
bnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vs
c2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6
ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50
U2l6ZS53aWR0aCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgotICAgICAgICAg
ICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAg
ICBpZiAoJmlvQnVmZmVyICE9IGZyb21CdWZmZXIpIHsKLSAgICAgICAgQVNTRVJUKGlvQnVmZmVy
Lmxlbmd0aCgpID09IGZyb21CdWZmZXItPmxlbmd0aCgpKTsKLSAgICAgICAgbWVtY3B5KGlvQnVm
ZmVyLmRhdGEoKSwgZnJvbUJ1ZmZlci0+ZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci0gICAg
fQotfQotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMo
VWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxB
cnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXpl
JiBwYWludFNpemUpCi17Ci0gICAgaW50IHN0cmlkZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsK
LQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChrZXJuZWxTaXplWCA9PSBrZXJuZWxTaXpl
WSAmJiAobV9lZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8IG1fZWRnZU1vZGUgPT0gRURHRU1P
REVfRFVQTElDQVRFKSkgewotICAgICAgICBhY2NlbGVyYXRlQm94Qmx1cihpb0J1ZmZlciwgdG1w
UGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0
YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5l
bFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlKCksIG1fZWRnZU1vZGUpOwot
fQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBw
bHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQotewotICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFt
ZXRlcnMtPndpZHRoLCBwYXJhbWV0ZXJzLT5oZWlnaHQpOwotICAgIHBhcmFtZXRlcnMtPmZpbHRl
ci0+cGxhdGZvcm1BcHBseUdlbmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFt
ZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJz
LT5rZXJuZWxTaXplWSwgcGFpbnRTaXplKTsKLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1w
ZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtl
cm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpCitzdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNz
aWFuS2VybmVsRmFjdG9yKCkKIHsKLSNpZiAhVVNFKEFDQ0VMRVJBVEUpCi0gICAgaW50IHNjYW5s
aW5lID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwotICAgIGludCBleHRyYUhlaWdodCA9IDMgKiBr
ZXJuZWxTaXplWSAqIDAuNWY7Ci0gICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAocGFpbnRT
aXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gKHNfbWluaW1hbFJlY3REaW1lbnNp
b24gKyBleHRyYUhlaWdodCAqIHBhaW50U2l6ZS53aWR0aCgpKTsKLQotICAgIGlmIChvcHRpbWFs
VGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFs
VGhyZWFkTnVtYmVyKTsKLQotICAgICAgICBpbnQgam9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJP
ZkpvYnMoKTsKLSAgICAgICAgaWYgKGpvYnMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0
aGUgam9iIGludG8gImJsb2NrSGVpZ2h0Ii1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2Jz
IHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKLSAgICAgICAgICAgIC8vIGJs
b2NrSGVpZ2h0ICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBi
eSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGNvbnN0IGludCBi
bG9ja0hlaWdodCA9IHBhaW50U2l6ZS5oZWlnaHQoKSAvIGpvYnM7Ci0gICAgICAgICAgICBjb25z
dCBpbnQgam9ic1dpdGhFeHRyYSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAlIGpvYnM7Ci0KLSAgICAg
ICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAwOyBq
b2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0
ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICBpbnQgc3RhcnRZID0g
IWpvYiA/IDAgOiBjdXJyZW50WSAtIGV4dHJhSGVpZ2h0OwotICAgICAgICAgICAgICAgIGN1cnJl
bnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdo
dDsKLSAgICAgICAgICAgICAgICBpbnQgZW5kWSA9IGpvYiA9PSBqb2JzIC0gMSA/IGN1cnJlbnRZ
IDogY3VycmVudFkgKyBleHRyYUhlaWdodDsKLQotICAgICAgICAgICAgICAgIGludCBibG9ja1Np
emUgPSAoZW5kWSAtIHN0YXJ0WSkgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBpZiAoIWpv
YikgewotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gJmlvQnVmZmVy
OwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9ICZ0bXBQaXhlbEFy
cmF5OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFt
cy5pb1BpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChi
bG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9IFVp
bnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1lbWNweShwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCksIGlvQnVmZmVy
LmRhdGEoKSArIHN0YXJ0WSAqIHNjYW5saW5lLCBibG9ja1NpemUpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHBhcmFtcy53aWR0aCA9IHBhaW50U2l6ZS53aWR0aCgpOwot
ICAgICAgICAgICAgICAgIHBhcmFtcy5oZWlnaHQgPSBlbmRZIC0gc3RhcnRZOwotICAgICAgICAg
ICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWCA9IGtlcm5lbFNpemVYOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5rZXJuZWxTaXplWSA9IGtlcm5lbFNpemVZOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotCi0gICAgICAgICAgICAvLyBDb3B5IHRv
Z2V0aGVyIHRoZSBwYXJ0cyBvZiB0aGUgaW1hZ2UuCi0gICAgICAgICAgICBjdXJyZW50WSA9IDA7
Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAxOyBqb2IgPCBqb2JzOyBqb2IrKykgewotICAg
ICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpv
YnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgaW50IHNvdXJjZU9mZnNldDsKLSAg
ICAgICAgICAgICAgICBpbnQgZGVzdGluYXRpb25PZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50
IHNpemU7Ci0gICAgICAgICAgICAgICAgaW50IGFkanVzdGVkQmxvY2tIZWlnaHQgPSBqb2IgPCBq
b2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0KLSAgICAgICAg
ICAgICAgICBjdXJyZW50WSArPSBhZGp1c3RlZEJsb2NrSGVpZ2h0OwotICAgICAgICAgICAgICAg
IHNvdXJjZU9mZnNldCA9IGV4dHJhSGVpZ2h0ICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25PZmZzZXQgPSBjdXJyZW50WSAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAg
IHNpemUgPSBhZGp1c3RlZEJsb2NrSGVpZ2h0ICogc2NhbmxpbmU7Ci0KLSAgICAgICAgICAgICAg
ICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpICsgZGVzdGluYXRpb25PZmZzZXQsIHBhcmFtcy5pb1Bp
eGVsQXJyYXktPmRhdGEoKSArIHNvdXJjZU9mZnNldCwgc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2lu
Z2xlIHRocmVhZGVkIG1vZGUuCi0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBUaGUgc2VsZWN0aW9u
IGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZv
cm1zLgotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBr
ZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIDMgLyA0LmYg
KiBzcXJ0ZigyICogcGlGbG9hdCk7CiB9CiAKIHN0YXRpYyBpbnQgY2xhbXBlZFRvS2VybmVsU2l6
ZShmbG9hdCB2YWx1ZSkKIHsKICAgICAvLyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAwLiBB
IGJpZ2dlciByYWRpdXMgd29uJ3QgbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0
IGltYWdlIGJ1dAogICAgIC8vIGluZmxhdGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRvbyBt
dWNoLiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBGaXJlZm94JyBiZWhhdmlvci4KKyAgICBzdGF0
aWMgY29uc3QgaW50IGdNYXhLZXJuZWxTaXplID0gNTAwOwogICAgIHVuc2lnbmVkIHNpemUgPSBz
dGQ6Om1heDx1bnNpZ25lZD4oMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1ZSAq
IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkgKyAwLjVmKSkpOwogICAgIHJldHVybiBjbGFtcFRvPGlu
dD4oc3RkOjptaW4oc2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdNYXhLZXJuZWxTaXplKSkp
OwogfQotICAgIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCisKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlv
bikKIHsKICAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkgPj0gMCAmJiBzdGREZXZpYXRp
b24uaGVpZ2h0KCkgPj0gMCk7CiAgICAgSW50U2l6ZSBrZXJuZWxTaXplOwpAQCAtNDgzLDEyICs3
MCwxMiBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNp
emUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4ga2VybmVsU2l6ZTsKIH0KIAot
SW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXIm
IGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7Ci0g
ICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0
ZXJSZXNvbHV0aW9uKHN0ZERldmlhdGlvbikpOworICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxl
ZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uIC8qZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bihzdGREZXZpYXRpb24pKi8pOwogfQogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxh
dGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQog
ewogICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGRE
ZXZpYXRpb24pOwogCkBAIC00OTYsNTYgKzgzLDIwIEBAIEludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4g
eyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAy
IH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkKK0Zsb2F0UmVjdCBGRUdhdXNzaWFuQmx1cjo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
IHsKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigp
LCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0
ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwogICAgIC8vIEVkZ2UgbW9kZXMg
b3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBhaW50IHJlY3Qu
Ci0gICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICBzZXRBYnNv
bHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkK
KyAgICAgICAgcmV0dXJuIGRyYXdpbmdSZWN0OwogCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBr
ZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94
IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtl
cm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZ
KDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5k
cygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJl
Y3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29s
dXRlUGFpbnRSZWN0KSk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAg
IEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNB
bHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFtX3N0ZFggJiYg
IW1fc3RkWSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2Fs
Y3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBrZXJu
ZWxTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotCi0gICAgSW50U2l6ZSBwYWlu
dFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUo
ZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7
Ci0gICAgaWYgKCF0bXBJbWFnZURhdGEpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBXZSB0YWtl
IHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNl
IHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgz
ICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVko
MyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHBsYXRmb3JtQXBwbHkoZGVz
dGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtl
cm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERy
YXdpbmdSZWN0KGlucHV0cywgZHJhd2luZ1JlY3QpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3Np
YW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKQEAgLTU1NCwxNCArMTA1LDIxIEBAIEludE91dHNldHMg
RkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdAogICAgIHJldHVybiB7IG91dHNldFNpemUu
aGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0
U2l6ZS53aWR0aCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVz
ZW50YXRpb24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFR2F1c3NpYW5CbHVyOjphcHBseShGaWx0
ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
KSBjb25zdAoreworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0g
c3RhY2sudGFrZUxhc3QoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRz
KCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4g
YXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0m
IEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUdh
dXNzaWFuQmx1ciI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3Rk
WCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50
U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmgKaW5kZXggNWZiOTdmZmIwNzBjMmRhZWI2ZWIyODNiZWFhYTE3NjQ3Y2JiMmQz
ZS4uOTRhMGY1M2QxOTk5ZWE4YWM2NmE3NzQ1YzUxYTkzM2M0ZDE4ZWZjMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMiw1OSArMjMsNDAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRkVDb252b2x2
ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5CbHVyIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4g
Y3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMg
UmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwog
CiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQotICAg
IHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCk7CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25Y
KGZsb2F0IHgpIHsgbV9zdGRYID0geDsgfQogCiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RkWTsgfQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCk7
CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpIHsgbV9zdGRZID0geTsgfQogCiAg
ICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlTW9kZTsgfQot
ICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKKyAgICB2b2lkIHNldEVkZ2VNb2Rl
KEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkgeyBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7IH0KIAotICAg
IHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxvYXRT
aXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRL
ZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNh
bGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIElu
dFNpemUgY2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7
CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRz
ZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAgICBG
RUdhdXNzaWFuQmx1cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CisgICAg
RkVHYXVzc2lhbkJsdXIoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwogCiAgICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7
IH0KIAotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAq
IDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQot
ICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFR2F1c3NpYW5C
bHVyKiBmaWx0ZXI7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFy
cmF5OwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0g
ICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQg
a2VybmVsU2l6ZVg7Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOwotICAgIH07Ci0KLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5n
UmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
RmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9y
bUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50
U2l6ZSYgcGFpbnRTaXplKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2ln
bmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXpl
KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxv
YXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGRmMTc2Zjhl
MDcwYTQxOGMyMDg1MTgwOTBlZTdhNmNhMTEzZTU2ZjUuLjkwZThiOWZhNDIxMGRkNzYyYTRlNGQ5
MWRlMjUwMzQ4ODBmZDJmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ3MCArMjgsNzIgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRl
ICJDb2xvckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIs
IExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2Us
IFR5cGUgdHlwZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xp
Z2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGln
aHRTb3VyY2UpKQotICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0
aW5nOjpGRUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IG1fY29sb3IoY29sb3IpCiAg
ICAgLCBtX3N1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUpCiAgICAgLCBtX2RpZmZ1c2VDb25zdGFu
dChkaWZmdXNlQ29uc3RhbnQpCiAgICAgLCBtX3NwZWN1bGFyQ29uc3RhbnQoc3BlY3VsYXJDb25z
dGFudCkKICAgICAsIG1fc3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQogICAgICwg
bV9rZXJuZWxVbml0TGVuZ3RoWChrZXJuZWxVbml0TGVuZ3RoWCkKICAgICAsIG1fa2VybmVsVW5p
dExlbmd0aFkoa2VybmVsVW5pdExlbmd0aFkpCisgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJj
ZSkpCiB7CiB9CiAKLWJvb2wgRkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZh
Y2VTY2FsZSkKLXsKLSAgICBpZiAobV9zdXJmYWNlU2NhbGUgPT0gc3VyZmFjZVNjYWxlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUxpZ2h0aW5nOjpzZXRMaWdodGluZ0NvbG9y
KGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKG1fbGlnaHRpbmdDb2xvciA9PSBsaWdodGlu
Z0NvbG9yKQorICAgIGlmIChtX2NvbG9yID09IGNvbG9yKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBtX2xpZ2h0aW5nQ29sb3IgPSBsaWdodGluZ0NvbG9yOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhYKQotewotICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGhYID09IGtlcm5lbFVu
aXRMZW5ndGhYKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYID0ga2VybmVsVW5pdExlbmd0aFg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVM
aWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCi17
Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFkgPT0ga2VybmVsVW5pdExlbmd0aFkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0
TGVuZ3RoWTsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNpemUgPSA0Owotc3RhdGljIGNvbnN0ZXhwciBpbnQg
Y0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7Ci1zdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgY09wYXF1
ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRik7Ci0KLS8vIFRoZXNlIGZhY3RvcnMg
YW5kIHRoZSBub3JtYWwgY29lZmZpY2llbnRzIGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIgaHR0
cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50Lgotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKLXN0
YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7Ci1zdGF0aWMgY29u
c3RleHByIGZsb2F0IGNGYWN0b3IxZGl2NCA9IC0xIC8gNC5mOwotc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBjRmFjdG9yMmRpdjMgPSAtMiAvIDMuZjsKLQotaW5saW5lIEludFNpemUgRkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
IG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJu
IHsKLSAgICAgICAgLTIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21SaWdo
dCwKLSAgICAgICAgLTIgKiBjZW50ZXIgLSByaWdodCArIDIgKiBib3R0b20gKyBib3R0b21SaWdo
dAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
LSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b20gPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4g
ewotICAgICAgICAtMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9tUmln
aHQsCi0gICAgICAgIC1sZWZ0IC0gMiAqIGNlbnRlciAtIHJpZ2h0ICsgYm90dG9tTGVmdCArIDIg
KiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGln
aHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsK
LSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRv
bUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0
dXJuIHsKLSAgICAgICAgLTIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0
b20sCi0gICAgICAgIC1sZWZ0IC0gMiAqIGNlbnRlciArIGJvdHRvbUxlZnQgKyAyICogYm90dG9t
Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjps
ZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGNlbnRlciA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3BS
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b21SaWdo
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcCArIHRvcFJp
Z2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAg
ICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAg
fTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlv
ck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNvbnN0Ci17Ci0g
ICAgaW50IHJpZ2h0QWxwaGFPZmZzZXQgPSBvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldDsKLSAgICAKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShyaWdodEFscGhhT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplKSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSk7
Ci0KLSAgICBpbnQgbGVmdCA9IGFscGhhV2luZG93LmxlZnQoKTsKLSAgICBpbnQgdG9wTGVmdCA9
IGFscGhhV2luZG93LnRvcExlZnQoKTsKLSAgICBpbnQgdG9wID0gYWxwaGFXaW5kb3cudG9wKCk7
Ci0KLSAgICBpbnQgYm90dG9tTGVmdCA9IGFscGhhV2luZG93LmJvdHRvbUxlZnQoKTsKLSAgICBp
bnQgYm90dG9tID0gYWxwaGFXaW5kb3cuYm90dG9tKCk7Ci0KLSAgICAvLyBUaGUgYWxwaGFXaW5k
b3cgaGFzIGJlZW4gc2hpZnRlZCwgYW5kIGhlcmUgd2UgZmlsbCBpbiB0aGUgcmlnaHQgY29sdW1u
LgotICAgIGFscGhhV2luZG93LmFscGhhWzBdWzJdID0gdG9wUmlnaHQ7Ci0gICAgYWxwaGFXaW5k
b3cuYWxwaGFbMV1bMl0gPSByaWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsyXVsyXSA9IGJv
dHRvbVJpZ2h0OwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgdGhlIGFscGhhV2luZG93IGlzIHdv
cmtpbmcgd2l0aCBzb21lIHNwb3QtY2hlY2tzLgotICAgIEFTU0VSVChhbHBoYVdpbmRvdy50b3BM
ZWZ0KCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgLSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wTGVmdAotICAgIEFT
U0VSVChhbHBoYVdpbmRvdy50b3AoKSA9PSBwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcAotCi0gICAg
cmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3BSaWdodCAtIDIgKiBsZWZ0ICsgMiAqIHJp
Z2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtdG9wTGVmdCAtIDIgKiB0
b3AgLSB0b3BSaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAg
ICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0
Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3AgLSAy
ICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAotICAgICAgICAtdG9w
TGVmdCAtIDIgKiB0b3AgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50
ZXIgKyAyICogcmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQgKyAyICogY2VudGVy
ICsgcmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGlu
Z0RhdGE6OmJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorYm9vbCBGRUxpZ2h0aW5n
OjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQogewotICAgIGludCBsZWZ0ID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOwotICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsK
LSAgICAgICAgLXRvcExlZnQgKyB0b3BSaWdodCAtIDIgKiBsZWZ0ICsgMiAqIHJpZ2h0LAotICAg
ICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgLSB0b3BSaWdodCArIGxlZnQgKyAyICogY2VudGVyICsg
cmlnaHQKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc3VyZmFjZVNjYWxlLCBz
dXJmYWNlU2NhbGUpICE9IG1fc3VyZmFjZVNjYWxlOwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0
Citib29sIEZFTGlnaHRpbmc6OnNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQpCiB7Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGlu
dCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJl
dHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICogY2VudGVyLAot
ICAgICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgKyBsZWZ0ICsgMiAqIGNlbnRlcgotICAgIH07Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaWZmdXNlQ29uc3RhbnQsIGRpZmZ1c2VDb25zdGFu
dCkgIT0gbV9kaWZmdXNlQ29uc3RhbnQ7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWwo
aW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwg
ZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvcikKK2Jvb2wgRkVMaWdodGluZzo6
c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQogewotICAgIHNldFBp
eGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZh
Y3RvclksIG5vcm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zcGVjdWxhckNvbnN0
YW50LCBzcGVjdWxhckNvbnN0YW50KSAhPSBzcGVjdWxhckNvbnN0YW50OwogfQogCi12b2lkIEZF
TGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRh
JiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwy
RFZlY3RvciwgZmxvYXQgYWxwaGEpCitib29sIEZFTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25l
bnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkKIHsKLSAgICBmbG9hdCB6ID0gYWxwaGEgKiBkYXRh
LnN1cmZhY2VTY2FsZTsKLSAgICBMaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgbGln
aHRpbmdEYXRhID0gbV9saWdodFNvdXJjZS0+Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKHBhaW50
aW5nRGF0YSwgeCwgeSwgeik7Ci0KLSAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOwotICAgIGlmIChu
b3JtYWwyRFZlY3Rvci5pc1plcm8oKSkgewotICAgICAgICAvLyBOb3JtYWwgdmVjdG9yIGlzICgw
LCAwLCAxKS4gVGhpcyBpcyBhIHF1aXRlIGZyZXF1ZW50IGNhc2UuCi0gICAgICAgIGlmIChtX2xp
Z2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAgICAgICAgICBs
aWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0
b3IueigpIC8gbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gewotICAgICAgICAgICAg
ICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci54KCksCi0gICAgICAgICAgICAgICAgbGlnaHRp
bmdEYXRhLmxpZ2h0VmVjdG9yLnkoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3IueigpICsgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCi0gICAgICAgICAg
ICB9OwotICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0
b3IubGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCi0g
ICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3
YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aDsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93Ziho
YWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVu
dCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFs
VmVjdG9yID0gewotICAgICAgICAgICAgZmFjdG9yWCAqIG5vcm1hbDJEVmVjdG9yLndpZHRoKCkg
KiBkYXRhLnN1cmZhY2VTY2FsZSwKLSAgICAgICAgICAgIGZhY3RvclkgKiBub3JtYWwyRFZlY3Rv
ci5oZWlnaHQoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAgICAgICAgICAgMS4wZgotICAgICAg
ICB9OwotICAgICAgICBmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSBub3JtYWxWZWN0b3IubGVu
Z3RoKCk7Ci0KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1
c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFu
dCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZl
Y3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAg
ICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAgICAgICAgICAgICAgICBs
aWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndh
eVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0g
MSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICog
KG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhh
bGZ3YXlWZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBo
YWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3Ro
KSwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsaWdo
dFN0cmVuZ3RoID4gMSkKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDE7Ci0gICAgaWYgKGxpZ2h0
U3RyZW5ndGggPCAwKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMDsKLQotICAgIHVpbnQ4X3Qg
cGl4ZWxWYWx1ZVszXSA9IHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJl
bmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci54KCkgKiAyNTUuMGYpLAotICAgICAgICBz
dGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVj
dG9yLnkoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3Ry
ZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueigpICogMjU1LjBmKQotICAgIH07Ci0g
ICAgCi0gICAgZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFsdWUsIDMsIG9mZnNldCk7Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zcGVjdWxhckV4cG9uZW50LCBzcGVjdWxhckV4cG9u
ZW50KSAhPSBtX3NwZWN1bGFyRXhwb25lbnQ7CiB9CiAKLS8vIFRoaXMgYXBwZWFycyB0byByZWFk
IGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzYW1lIHBpeGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVh
ZHMgdGhlIGFscGhhIGNoYW5uZWwsIGFuZCB3cml0ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4K
LXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+
IDAgc2luY2Ugd2UgcmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCi0gICAg
QVNTRVJUKHN0YXJ0WSk7Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgZm9yIChp
bnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgcm93U3RhcnRPZmZz
ZXQgPSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHBy
ZXZpb3VzUm93U3RhcnQgPSByb3dTdGFydE9mZnNldCAtIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgICAgIGludCBuZXh0Um93U3RhcnQgPSByb3dTdGFydE9mZnNldCArIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0KLSAgICAgICAgLy8gYWxwaGFXaW5kb3cg
aXMgYSBsb2NhbCBjYWNoZSBvZiBhbHBoYSB2YWx1ZXMuCi0gICAgICAgIC8vIEZpbGwgdGhlIHR3
byByaWdodCBjb2x1bW5zIHB1dHRpbmcgdGhlIGxlZnQgZWRnZSB2YWx1ZSBpbiB0aGUgY2VudGVy
IGNvbHVtbi4KLSAgICAgICAgLy8gRm9yIGVhY2ggcGl4ZWwsIHdlIHNoaWZ0IGVhY2ggcm93IGxl
ZnQgdGhlbiBmaWxsIHRoZSByaWdodCBjb2x1bW4uCi0gICAgICAgIEFscGhhV2luZG93IGFscGhh
V2luZG93OwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3AoZGF0YS5waXhlbHMtPml0ZW0ocHJl
dmlvdXNSb3dTdGFydCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5k
b3cuc2V0VG9wUmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFydCArIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0
Q2VudGVyKGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRSaWdodChkYXRhLnBpeGVscy0+aXRlbShy
b3dTdGFydE9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAg
ICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tKGRhdGEucGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFy
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9t
UmlnaHQoZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3RhcnRPZmZzZXQg
KyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNy
ZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAgICAgYWxw
aGFXaW5kb3cuc2hpZnQoKTsKLSAgICAgICAgICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBk
YXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGNGYWN0b3IxZGl2NCwgY0ZhY3RvcjFkaXY0LCBkYXRh
LmludGVyaW9yTm9ybWFsKG9mZnNldCwgYWxwaGFXaW5kb3cpLCBhbHBoYVdpbmRvdy5jZW50ZXIo
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCkKIHsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0
ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlFbmQpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdl
KG1fa2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhYKSAhPSBtX2tlcm5lbFVuaXRM
ZW5ndGhYOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0
IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQotewotICAgIHVuc2lnbmVkIHJvd3NUb1Byb2Nlc3MgPSBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lIC0gMTsKLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gcm93c1RvUHJv
Y2VzcyAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVu
c2lnbmVkPigoKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSAtIDEpICogcm93c1RvUHJvY2Vzcykg
LyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2Jz
Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVy
cz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlciwgb3B0aW1hbFRocmVh
ZE51bWJlcik7Ci0KLSAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0gICAgICAg
IGludCBqb2IgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChqb2Ig
PiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInlTdGVwIi1zaXplZCBq
b2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIg
c2luY2UKLSAgICAgICAgICAgIC8vIHlTdGVwICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4
dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAg
ICAgICAgIGNvbnN0IGludCB5U3RlcCA9IHJvd3NUb1Byb2Nlc3MgLyBqb2I7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQgam9ic1dpdGhFeHRyYSA9IHJvd3NUb1Byb2Nlc3MgJSBqb2I7Ci0KLSAgICAg
ICAgICAgIGludCB5U3RhcnQgPSAxOwotICAgICAgICAgICAgZm9yICgtLWpvYjsgam9iID49IDA7
IC0tam9iKSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJz
JiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAg
cGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmRhdGEgPSBkYXRh
OwotICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSBwYWludGluZ0RhdGE7Ci0g
ICAgICAgICAgICAgICAgcGFyYW1zLnlTdGFydCA9IHlTdGFydDsKLSAgICAgICAgICAgICAgICB5
U3RhcnQgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IHlTdGVwICsgMSA6IHlTdGVwOwotICAgICAg
ICAgICAgICAgIHBhcmFtcy55RW5kID0geVN0YXJ0OwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4KLSAgICB9Ci0K
LSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGRhdGEsIHBhaW50aW5nRGF0YSwgMSwgZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCitib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVu
aXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKQogewotICAgIC8vIFRoZSBzZWxlY3Rp
b24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0
Zm9ybXMuCi0jaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01Q
SUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBwbGF0Zm9ybUFwcGx5TmVvbihkYXRhLCBwYWludGlu
Z0RhdGEpOwotI2Vsc2UKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhkYXRhLCBwYWludGluZ0Rh
dGEpOwotI2VuZGlmCisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rZXJuZWxVbml0TGVuZ3Ro
WSwga2VybmVsVW5pdExlbmd0aFkpICE9IG1fa2VybmVsVW5pdExlbmd0aFk7CiB9CiAKLWJvb2wg
RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3
aWR0aCwgaW50IGhlaWdodCkKK0Zsb2F0UmVjdCBGRUxpZ2h0aW5nOjpkcmF3aW5nUmVjdChjb25z
dCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KSBjb25zdAogewotICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRh
OwotICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotCi0gICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBp
ZiB3aWR0aCBvciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEgcGl4ZWwuCi0gICAgLy8gVGhlIFczIHNw
ZWMgZG9lcyBub3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5z
LgotICAgIGlmICh3aWR0aCA8PSAyIHx8IGhlaWdodCA8PSAyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBkYXRhLnBpeGVscyA9ICZwaXhlbHM7Ci0gICAgZGF0YS5zdXJmYWNlU2NhbGUg
PSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKLSAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplID0gd2lkdGggKiBjUGl4ZWxTaXplOwotICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9u
ZSA9IHdpZHRoIC0gMTsKLSAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0g
MTsKLQotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbV9saWdodGluZ0NvbG9yLnRvQ29sb3JDb21w
b25lbnRzSW5Db2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgcGFpbnRpbmdE
YXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QociwgZywg
Yik7Ci0KLSAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCp0aGlzLCBwYWludGlu
Z0RhdGEpOwotCi0gICAgLy8gVG9wIGxlZnQuCi0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIDAsIGNGYWN0b3IyZGl2MywgY0Zh
Y3RvcjJkaXYzLCBkYXRhLnRvcExlZnROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBUb3Agcmln
aHQuCi0gICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhl
bFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lk
dGhEZWNyZWFzZWRCeU9uZSwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9w
UmlnaHROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBCb3R0b20gbGVmdC4KLSAgICBvZmZzZXQg
PSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90
dG9tTGVmdE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8vIEJvdHRvbSByaWdodC4KLSAgICBvZmZz
ZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6
ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERl
Y3JlYXNlZEJ5T25lLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNG
YWN0b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5vcm1hbChvZmZzZXQpKTsKLQotICAgIGlmICh3
aWR0aCA+PSAzKSB7Ci0gICAgICAgIC8vIFRvcCByb3cuCi0gICAgICAgIG9mZnNldCA9IGNQaXhl
bFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIDAsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYy
LCBkYXRhLnRvcFJvd05vcm1hbChvZmZzZXQpKTsKLQotICAgICAgICAvLyBCb3R0b20gcm93Lgot
ICAgICAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAx
OyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXpl
KQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRh
LmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAoaGVpZ2h0ID49IDMp
IHsKLSAgICAgICAgLy8gTGVmdCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdE
YXRhLCAwLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5sZWZ0Q29sdW1uTm9y
bWFsKG9mZnNldCkpOwotCi0gICAgICAgIC8vIFJpZ2h0IGNvbHVtbi4KLSAgICAgICAgb2Zmc2V0
ID0gMiAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAg
ICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwg
b2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCi0gICAgICAgICAgICBz
ZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5yaWdodENvbHVtbk5vcm1h
bChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAod2lkdGggPj0gMyAmJiBoZWlnaHQgPj0gMykg
ewotICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCi0gICAgICAgIHBsYXRmb3JtQXBwbHkoZGF0
YSwgcGFpbnRpbmdEYXRhKTsKLSAgICB9Ci0KLSAgICBpbnQgbGFzdFBpeGVsID0gZGF0YS53aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKLSAgICBpZiAobV9saWdodGluZ1R5cGUg
PT0gRGlmZnVzZUxpZ2h0aW5nKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVs
T2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBkYXRh
LnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAg
ICAgdWludDhfdCBhMSA9IGRhdGEucGl4ZWxzLT5pdGVtKGkpOwotICAgICAgICAgICAgdWludDhf
dCBhMiA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAxKTsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTMg
PSBkYXRhLnBpeGVscy0+aXRlbShpICsgMik7Ci0gICAgICAgICAgICAvLyBhbHBoYSBzZXQgdG8g
c2V0IHRvIG1heChhMSwgYTIsIGEzKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpICsg
MywgYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBnZW9t
ZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzKTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUxpZ2h0aW5nOjphcHBs
eShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VC
dWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CisgICAg
QVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgp
OwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5p
dExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMK
LSAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJv
d3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKLSAgICAvLyBvdXRwdXQgZm9yIHZhcmlv
dXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxl
LgotICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGlt
cGxlbWVudGF0aW9uCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQo
eyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEludFNpemUgYWJzb2x1
dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkcmF3TGlnaHRp
bmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNv
bHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0
LCB7IGluIH0sIG51bGxwdHIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5o
CmluZGV4IDdmYjU2MDlkYmI1N2I3NjIwMWYzMzAzMzcwNTJlNDFhYzI1MDNjZjkuLmI4MjRjNDM2
N2QwMzkxMTllZWMyM2U2ZmVlYzI5ODdiYmIyNmIzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsMjYgKzI4LDI3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNv
bG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAj
aW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENs
YW1wZWRBcnJheS5oPgotCi0vLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRp
bmcgYW5kIEZFU3BlY3VsYXJMaWdodGluZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVj
dCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbjsKLQogY2xhc3MgRkVMaWdodGluZyA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9CisgICAgYm9vbCBzZXRDb2xvcihjb25zdCBDb2xvciYpOwogCiAg
ICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0K
ICAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CiAKLSAgICBjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQotICAgIGJvb2wg
c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9CisgICAgYm9vbCBzZXREaWZm
dXNlQ29uc3RhbnQoZmxvYXQpOworCisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQorICAgIGJvb2wgc2V0U3BlY3VsYXJDb25z
dGFudChmbG9hdCk7CisKKyAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1
cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9CisgICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZs
b2F0KTsKIAogICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QgeyByZXR1cm4gbV9r
ZXJuZWxVbml0TGVuZ3RoWDsgfQogICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQp
OwpAQCAtNTQsMTE1ICs1NiwyNSBAQCBwdWJsaWM6CiAgICAgZmxvYXQga2VybmVsVW5pdExlbmd0
aFkoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOyB9CiAgICAgYm9vbCBzZXRL
ZXJuZWxVbml0TGVuZ3RoWShmbG9hdCk7CiAKLSAgICBjb25zdCBMaWdodFNvdXJjZSYgbGlnaHRT
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOyB9CisgICAgY29uc3Qg
TGlnaHRTb3VyY2UmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdldCgpOyB9CiAK
IHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24g
PSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0K
LSAgICBlbnVtIExpZ2h0aW5nVHlwZSB7Ci0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAg
ICAgU3BlY3VsYXJMaWdodGluZwotICAgIH07Ci0gICAgCi0gICAgc3RydWN0IEFscGhhV2luZG93
IHsKLSAgICAgICAgdWludDhfdCBhbHBoYVszXVszXSB7IH07Ci0gICAgICAgIAotICAgICAgICAv
LyBUaGUgaW1wbGVtZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRp
Y2VzIGVhc2llci4KLSAgICAgICAgdWludDhfdCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMF1bMF07IH0KLSAgICAgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAg
ICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMF07IH0KLSAgICAgICAgdWludDhfdCBib3R0
b21MZWZ0KCkgY29uc3QgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KLQotICAgICAg
ICB1aW50OF90IHRvcCgpIGNvbnN0ICAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsx
XTsgfQotICAgICAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVy
biBhbHBoYVsxXVsxXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAg
ICAgICB7IHJldHVybiBhbHBoYVsyXVsxXTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wKHVpbnQ4
X3QgdmFsdWUpICAgICAgICAgIHsgYWxwaGFbMF1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lk
IHNldENlbnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0K
LSAgICAgICAgdm9pZCBzZXRCb3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsx
XSA9IHZhbHVlOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3BSaWdodCh1aW50OF90IHZhbHVlKSAg
ICAgeyBhbHBoYVswXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0UmlnaHQodWludDhf
dCB2YWx1ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNl
dEJvdHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KLQot
ICAgICAgICBzdGF0aWMgdm9pZCBzaGlmdFJvdyh1aW50OF90IGFscGhhWzNdKQotICAgICAgICB7
Ci0gICAgICAgICAgICBhbHBoYVswXSA9IGFscGhhWzFdOwotICAgICAgICAgICAgYWxwaGFbMV0g
PSBhbHBoYVsyXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzaGlmdCgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKLSAgICAgICAgICAgIHNo
aWZ0Um93KGFscGhhWzFdKTsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKLSAgICAgICAgLy8gVGhp
cyBzdHJ1Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkgKFNNUCBzYWZlKSBkYXRhCi0gICAg
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7Ci0gICAgICAgIGZsb2F0IHN1cmZhY2VTY2Fs
ZTsKLSAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQg
d2lkdGhEZWNyZWFzZWRCeU9uZTsKLSAgICAgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOwot
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
LSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29u
c3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFs
cGhhV2luZG93JikgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHJpZ2h0Q29sdW1uTm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21MZWZ0
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21S
b3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRv
bVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1
Y3QgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVMaWdodGluZyog
ZmlsdGVyOwotICAgICAgICBMaWdodGluZ0RhdGEgZGF0YTsKLSAgICAgICAgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgICAgIGludCB5U3RhcnQ7Ci0gICAgICAg
IGludCB5RW5kOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
Y1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqKTsKLSAgICBzdGF0aWMgdm9p
ZCBwbGF0Zm9ybUFwcGx5TmVvbldvcmtlcihGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbiop
OwotCi0gICAgRkVMaWdodGluZyhGaWx0ZXImLCBMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNl
PiYmLCBUeXBlKTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVMaWdodGluZyI7IH0KLQotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xh
bXBlZEFycmF5JiwgaW50LCBpbnQpOwotCi0gICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBj
b25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50
IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZl
Y3Rvcik7Ci0gICAgdm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0
aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHks
IGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9h
dCBhbHBoYSk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQ
YWludChjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRh
JiwgaW50IHN0YXJ0WCwgaW50IHN0YXJ0WSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
Yyhjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7
Ci0KLSNpZiBDUFUoQVJNX05FT04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVS
KEdDQ19DT01QQVRJQkxFKQotICAgIHN0YXRpYyBpbnQgZ2V0UG93ZXJDb2VmZmljaWVudHMoZmxv
YXQgZXhwb25lbnQpOwotICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uKGNvbnN0IExp
Z2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLSNlbmRpZgot
Ci0gICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdUeXBlOwotICAgIFJlZjxMaWdodFNvdXJjZT4g
bV9saWdodFNvdXJjZTsKLQotICAgIENvbG9yIG1fbGlnaHRpbmdDb2xvcjsKKyAgICBGRUxpZ2h0
aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291
cmNlPiYmKTsKKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKKworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIENvbG9yIG1fY29sb3I7CiAgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7CiAgICAgZmxvYXQg
bV9kaWZmdXNlQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckNvbnN0YW50OwogICAgIGZs
b2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwog
ICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7CisgICAgUmVmPExpZ2h0U291cmNlPiBtX3Nv
dXJjZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMGEyMDAw
MWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uYjRhZTY1MTU5NjE2NDg1NmJkODYz
YjNkZGEwNjQ2YjJlODFjODUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1MSArMjMsNDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTWVyZ2U6OkZFTWVyZ2Uo
RmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpNZXJnZSkK
K1JlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1
dHMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShudW1iZXJPZkVmZmVjdElu
cHV0cykpOwogfQogCi1SZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVy
KQorRkVNZXJnZTo6RkVNZXJnZSh1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cykKKyAgICA6
IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMobnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShmaWx0ZXIpKTsKKyAgICBBU1NFUlQobV9udW1iZXJP
ZkVmZmVjdElucHV0cyk7CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK2NvbnN0IEF0b21TdHJpbmcmIEZFTWVyZ2U6OmVmZmVjdE5hbWUoKQogewotICAgIHVuc2ln
bmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7
CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBz
X2VmZmVjdE5hbWUoIkZFTWVyZ2UiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKK30KKworRmlsdGVyUmVzdWx0KiBGRU1lcmdlOjph
cHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1h
Z2VCdWZmZXIqKSBjb25zdAoreworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPT0gbV9udW1iZXJP
ZkVmZmVjdElucHV0cyk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVy
bjsKKyAgICBWZWN0b3I8UmVmPEZpbHRlclJlc3VsdD4+IGlucHV0czsKKyAgICBmb3IgKGF1dG8g
aW5wdXRzU2l6ZSA9IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHM7IGlucHV0c1NpemUtLTsgKQorICAg
ICAgICBpbnB1dHMuYXBwZW5kKHN0YWNrLnRha2VMYXN0KCkpOwogCisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdl
LT5jb250ZXh0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChJ
bWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKSkKLSAgICAgICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgIH0KKyAgICByZXR1
cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIGlucHV0cywgbnVsbHB0cik7CiB9CiAKLVRleHRTdHJl
YW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJl
c2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFTWVyZ2U6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0
aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTWVyZ2UiOwotICAgIEZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAg
IHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXpl
ID4gMCk7Ci0gICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8ICJcIl1cbiI7Ci0K
LSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgaW5wdXRFZmZlY3QoaSktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIG1l
cmdlTm9kZXM9XCIiIDw8IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMgPDwgIlwiXVxuIjsKICAgICBy
ZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNm
MThmMjYwNy4uZjNmNDVjMzY4YTNhYTMxZjM4NWQ2MmMwODQyYzYzZTY3YjVlOTRlOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgK
QEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4
LDE2ICsyOSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFTWVyZ2UgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0
ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZSh1bnNpZ25lZCBtX251
bWJlck9mRWZmZWN0SW5wdXRzKTsKKworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZl
Y3ROYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgRkVNZXJnZShGaWx0ZXImKTsKKyAgICBGRU1lcmdl
KHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNZXJnZSI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShG
aWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZp
bHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlk
ZTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX251bWJlck9mRWZmZWN0SW5wdXRzOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDhhN2U1YjY2N2FiNzcz
YjkwYjg5MGUzODM4NjM5MzU2MmI5ZDhkZjUuLmYwYmM5ODEzMmY4ZDFkMzQyZmEzYWUwM2YxYTI2
NWE0MDIwNmViODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjY1ICsyNSw2MSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgogCi0jaW5jbHVkZSAiQ29sb3JD
b21wb25lbnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgor
I2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShG
aWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNY
LCBmbG9hdCByYWRpdXNZKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TW9ycGhv
bG9neSkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAgICwgbV9yYWRpdXNYKHJhZGl1c1gpCi0gICAg
LCBtX3JhZGl1c1kocmFkaXVzWSkKK1JlZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3Jl
YXRlKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gs
IGZsb2F0IHJhZGl1c1kpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5
KG1vcnBob2xvZ3lPcGVyYXRvciwgcmFkaXVzWCwgcmFkaXVzWSkpOwogfQogCi1SZWY8RkVNb3Jw
aG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQorRkVNb3JwaG9s
b2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwg
ZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKKyAgICA6IG1fbW9ycGhvbG9neU9wZXJhdG9y
KG1vcnBob2xvZ3lPcGVyYXRvcikKKyAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQorICAgICwgbV9y
YWRpdXNZKHJhZGl1c1kpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5
KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwgcmFkaXVzWSkpOwogfQogCi1ib29sIEZFTW9ycGhvbG9n
eTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK2Jv
b2wgRkVNb3JwaG9sb2d5OjpzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9y
IG1vcnBob2xvZ3lPcGVyYXRvcikKIHsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fbW9ycGhvbG9neU9wZXJhdG9yLCBtb3JwaG9sb2d5T3Bl
cmF0b3IpICE9IG1vcnBob2xvZ3lPcGVyYXRvcjsKIH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNl
dFJhZGl1c1goZmxvYXQgcmFkaXVzWCkKIHsKLSAgICBpZiAobV9yYWRpdXNYID09IHJhZGl1c1gp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3JhZGl1c1ggPSByYWRpdXNYOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fcmFkaXVzWCwgcmFkaXVzWCkg
IT0gbV9yYWRpdXNYOwogfQogCiBib29sIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCBy
YWRpdXNZKQogewotICAgIGlmIChtX3JhZGl1c1kgPT0gcmFkaXVzWSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fcmFkaXVzWSA9IHJhZGl1c1k7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAg
RmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgp
OwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lmlu
ZmxhdGUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRp
dXNZIH0pKTsKLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50
ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5p
dGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KHBhaW50UmVjdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5k
ZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpCi17Ci0gICAgcmV0dXJuICh5ICogd2lkdGggKyB4
KSAqIDQ7Ci19Ci0KLWlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9y
Q29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKQotewotICAg
IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7Ci19Ci0KLWlubGluZSBQ
YWNrZWRDb2xvcjo6UkdCQSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3Qg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBjb21wb25lbnRzKQotewotICAgIHJldHVybiBQ
YWNrZWRDb2xvcjo6UkdCQSB7IG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29t
cG9uZW50cykgfTsKLX0KLQotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgot
QUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWluT3JNYXgoY29uc3Qg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4mIGIpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VS
T0RFKQotICAgICAgICByZXR1cm4gcGVyQ29tcG9uZW50TWluKGEsIGIpOwotCi0gICAgcmV0dXJu
IHBlckNvbXBvbmVudE1heChhLCBiKTsKLX0KLQotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9y
VHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29s
dW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoKQotewotICAgIGF1dG8gZXh0cmVtdW0g
PSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAq
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsg
cGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKLQotICAgIGZvciAoaW50IHkg
PSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7Ci0gICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtl
Q29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxB
cnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8
dHlwZT4oZXh0cmVtdW0sIHBpeGVsKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4dHJlbXVtOwotfQot
Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11
bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3Rh
cnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsK
LSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJl
dHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+KHNyY1BpeGVs
QXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotCi0gICAgcmV0dXJuIGNvbHVtbkV4dHJl
bXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFy
dCwgeUVuZCwgd2lkdGgpOwotfQotCi11c2luZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9y
Q29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+OwotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBr
ZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwpCi17Ci0gICAgYXV0byBl
eHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5z
aXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwg
a2VybmVsW2ldKTsKLQotICAgIHJldHVybiBleHRyZW11bTsKLX0KLQotQUxXQVlTX0lOTElORSBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0
cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5
cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4ga2VybmVs
RXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihrZXJuZWwpOwotCi0gICAgcmV0
dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KGtlcm5lbCk7
Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgQVNT
RVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBh
aW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OwotCi0gICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWlu
dGluZ0RhdGEucmFkaXVzWDsKLSAgICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5y
YWRpdXNZOwotICAgIGNvbnN0IGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICBj
b25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLQotICAgIEFTU0VSVChyYWRp
dXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVpZ2h0KTsKLSAgICBBU1NFUlQoc3RhcnRZID49
IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZIDwgZW5kWSk7Ci0KLSAgICBDb2x1bW5FeHRy
ZW1hIGV4dHJlbWE7Ci0gICAgZXh0cmVtYS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRp
dXNYICsgMSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0g
ICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7Ci0gICAg
ICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOwot
Ci0gICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOwotCi0gICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRo
ZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4K
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCi0gICAgICAgICAgICBl
eHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3Rh
cnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAvLyBLZXJuZWwgaXMg
ZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbgotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNY
KQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVs
QXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5
cGUpKTsKLQotICAgICAgICAgICAgaWYgKHggPiByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4
dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJh
eUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVs
VmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkp
LnZhbHVlOwotICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fcmFk
aXVzWSwgcmFkaXVzWSkgIT0gbV9yYWRpdXNZOwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxh
dGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW0pCitGbG9hdFJl
Y3QgRkVNb3JwaG9sb2d5OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIHBhcmFt
LT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJh
bS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7
CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwor
ICAgIGRyYXdpbmdSZWN0LmluZmxhdGUoeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KTsKKyAgICBy
ZXR1cm4gZ2VvbWV0cnkubWF4RHJhd2luZ1JlY3QoaW5wdXRzLCBkcmF3aW5nUmVjdCk7CiB9CiAK
LXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQorRmlsdGVyUmVzdWx0KiBGRU1vcnBob2xvZ3k6OmFwcGx5KEZpbHRlck91dHB1
dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0
CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIg
b3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4K
LSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFp
bnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7
CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50
IG1pbmltYWxBcmVhID0gKDE2MCAqIDE2MCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBw
YXJhbGxlbCBqb2JzCi0gICAgCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5n
RGF0YS5oZWlnaHQgLyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6
Om1pbjx1bnNpZ25lZD4oKHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQg
KiBrZXJuZWxGYWN0b3IpIC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwotICAgIGlmIChv
cHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0
Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHlXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotICAgICAgICBhdXRv
IG51bU9mVGhyZWFkcyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYg
KG51bU9mVGhyZWFkcyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAi
am9iU2l6ZSItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUg
c2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyBqb2JTaXplICogam9icyA8IHRv
dGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2Jz
V2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGludCBqb2JTaXplID0gcGFpbnRpbmdEYXRhLmhlaWdo
dCAvIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRp
bmdEYXRhLmhlaWdodCAlIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBjdXJyZW50WSA9
IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0g
MDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFy
YW0gPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW0u
ZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsK
LSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6
ZSArIDEgOiBqb2JTaXplOwotICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsK
LSAgICAgICAgICAgICAgICBwYXJhbS5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhy
ZWFkIG1vZGVsCi0gICAgfQorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCku
Z2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBwbGF0Zm9ybUFw
cGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIHJl
dHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiB9LCBudWxscHRyKTsKIH0KIAotYm9vbCBG
RU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBk
c3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQg
cmFkaXVzWSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBNb3JwaG9sb2d5T3BlcmF0b3ImIG1vcnBob2xvZ3lPcGVyYXRvcikKIHsKLSAgICBpZiAo
cmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewot
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5j
b3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQot
ewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
LSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRh
dGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0KLSAgICBJbnRTaXplIHJhZGl1cyA9IGZs
b29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChw
bGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdp
bmdSZWN0LCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBhdXRvIHNvdXJj
ZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwg
b3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRC
eUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaW50IHJh
ZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndp
ZHRoKCkpOwotICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVp
Z2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdl
bmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gs
IHJhZGl1c1kpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50
aW5nRGF0YTsKLSAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJy
YXkuZ2V0KCk7Ci0gICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25Q
aXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdS
ZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhl
aWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpICogZmlsdGVyLmZpbHRlclNj
YWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCAqIGZpbHRl
ci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1
c1kgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5n
RGF0YSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBlKQotewotICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIHN3aXRjaCAobW9ycGhvbG9neU9wZXJhdG9yKSB7CiAgICAgY2FzZSBGRU1PUlBI
T0xPR1lfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAgICAg
ICBicmVhazsKQEAgLTI5NywxNSArOTMsMTEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUKICAg
ICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0
aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZU1vcnBob2xvZ3kiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgb3BlcmF0
b3I9XCIiIDw8IG1vcnBob2xvZ3lPcGVyYXRvcigpIDw8ICJcIiAiCiAgICAgICAgPDwgInJhZGl1
cz1cIiIgPDwgcmFkaXVzWCgpIDw8ICIsICIgPDwgcmFkaXVzWSgpIDw8ICJcIl1cbiI7Ci0KLSAg
ICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZl
Y3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICBy
ZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmluZGV4IDQ4ZmMzNTQxMTdmYzI3Y2NmYzhlOTNm
MTRlZGYwNzVkZTM5YzVhMTEuLmExOTUwMTY5YTVkNWY1M2M4M2EwNzRlMDk1M2Y0YTE1MzVhZTBm
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1vcnBob2xvZ3kuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTEgKzIzLDEwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWVudW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CitlbnVtIE1vcnBob2xvZ3lP
cGVyYXRvciB7CiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV04gPSAwLAogICAgIEZF
TU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSA9IDEsCiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9S
X0RJTEFURSA9IDIKQEAgLTM0LDEwICszNCwxMCBAQCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgewogCiBjbGFzcyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZFTW9ycGhvbG9neT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xv
Z3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRp
YyBSZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRp
dXNYLCBmbG9hdCByYWRpdXNZKTsKIAotICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhv
bG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRNb3Jw
aG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CisgICAgTW9ycGhvbG9neU9w
ZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9w
ZXJhdG9yOyB9CisgICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJh
dG9yKTsKIAogICAgIGZsb2F0IHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1g7IH0K
ICAgICBib29sIHNldFJhZGl1c1goZmxvYXQpOwpAQCAtNDYsNDAgKzQ2LDE5IEBAIHB1YmxpYzoK
ICAgICBib29sIHNldFJhZGl1c1koZmxvYXQpOwogCiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9n
eShGaWx0ZXImLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCBy
YWRpdXNZKTsKKyAgICBGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRp
dXNYLCBmbG9hdCByYWRpdXNZKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiAiRkVNb3JwaG9sb2d5IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3Qg
RmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJp
ZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJl
c2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVj
dCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOworICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsK
LSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAg
IFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0g
ICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGludCByYWRpdXNYOwotICAgICAgICBpbnQgcmFk
aXVzWTsKLSAgICB9OwotCi0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAg
ICAgICAgRkVNb3JwaG9sb2d5KiBmaWx0ZXI7Ci0gICAgICAgIGludCBzdGFydFk7Ci0gICAgICAg
IGludCBlbmRZOwotICAgICAgICBjb25zdCBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAg
ICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5
UGFyYW1ldGVycyopOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0
YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwg
aW50IHN0YXJ0WSwgaW50IGVuZFkpOwotCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5
cGU7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1fbW9ycGhvbG9neU9wZXJhdG9yOwogICAgIGZs
b2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBtX3JhZGl1c1k7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAw
MjcwZGI5MjQ4MWEzMzkyZDNkNWExZTkxN2MyZDY1YWE0MTQwZjY5Li43MWQ4NDA2NDM2MjYyZmU3
OTU2ODkzMjA3YWUzMzIxOTFmNzgwN2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtNCw2ICs0LDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcxICsyNSw0NSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVPZmZzZXQ6OkZFT2Zmc2V0KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCi0g
ICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpPZmZzZXQpCi0gICAgLCBtX2R4KGR4KQor
RkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSkKKyAgICA6IG1fZHgoZHgpCiAg
ICAgLCBtX2R5KGR5KQogewogfQogCi1SZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoRmls
dGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKK1JlZjxGRU9mZnNldD4gRkVPZmZzZXQ6
OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9m
ZnNldChkeCwgZHkpKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6c2V0RHgoZmxvYXQgZHgpCitGbG9h
dFJlY3QgRkVPZmZzZXQ6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0CiB7Ci0gICAgbV9keCA9IGR4OworICAg
IEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBpbnB1
dHNbMF0tPmRyYXdpbmdSZWN0KCk7CisgICAgZHJhd2luZ1JlY3QubW92ZSh7IG1fZHgsIG1fZHkg
fSk7CisgICAgcmV0dXJuIGRyYXdpbmdSZWN0OwogfQogCi12b2lkIEZFT2Zmc2V0OjpzZXREeShm
bG9hdCBkeSkKK0ZpbHRlclJlc3VsdCogRkVPZmZzZXQ6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0
cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0g
ICAgbV9keSA9IGR5OwotfQotCi12b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNv
bHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0g
ICAgcGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgs
IG1fZHkgfSkpOwotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5p
bnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51
bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QocGFpbnRSZWN0KSk7Ci19CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOwor
ICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi12b2lkIEZFT2Zmc2V0OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQor
ICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhh
SW1hZ2UoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRC
eUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24pOworICAgIHJl
dHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiB9LCBudWxscHRyKTsKIH0KIAotVGV4dFN0
cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFT2Zm
c2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZU9mZnNldCI7Ci0gICAg
RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
CiAgICAgdHMgPDwgIiBkeD1cIiIgPDwgZHgoKSA8PCAiXCIgZHk9XCIiIDw8IGR5KCkgPDwgIlwi
XVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAg
ICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCmluZGV4IDY1YWJkYTkwYTQ3YjFiZmU3NmFl
NWM3NGFhYjVhYTE2N2ZiMWU2OWUuLmE5OGU0YTk5YzA1YjM3MWM1ZjRlNjBmYzNiZmJlNzU2MmJl
OTU3NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIyLDM0ICsyMyw2MCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJG
aWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkp
OworICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwog
CiAgICAgZmxvYXQgZHgoKSBjb25zdCB7IHJldHVybiBtX2R4OyB9Ci0gICAgdm9pZCBzZXREeChm
bG9hdCk7CisgICAgdm9pZCBzZXREeChmbG9hdCBkeCkgeyBtX2R4ID0gZHg7IH0KIAogICAgIGZs
b2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9keTsgfQotICAgIHZvaWQgc2V0RHkoZmxvYXQpOwor
ICAgIHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9keSA9IGR5OyB9CisKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gZGVjb2Rl
KERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBGRU9mZnNldChGaWx0ZXImLCBmbG9hdCBkeCwg
ZmxvYXQgZHkpOworICAgIEZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSk7CiAKICAgICBjb25z
dCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFT2Zmc2V0IjsgfQog
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21l
dHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91
dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBp
bnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RG
OjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgZmxvYXQgbV9keDsKICAgICBmbG9hdCBtX2R5OwogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVPZmZzZXQ6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9keDsKKyAgICBlbmNvZGVy
IDw8IG1fZHk7Cit9CiAKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJl
ZjxGRU9mZnNldD4+IEZFT2Zmc2V0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiBkeDsKKyAgICBkZWNvZGVyID4+IGR4OworICAgIGlmICghZHgp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0
PiBkeTsKKyAgICBkZWNvZGVyID4+IGR5OworICAgIGlmICghZHkpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVPZmZzZXQ6OmNyZWF0ZSgqZHgsICpkeSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcApp
bmRleCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0MWY3NGY5YzQ4N2ExNDRjLi45OWFiOGRhNjRm
Y2Q1YTM2YjEyNjFmYTEyZjBkMWYwYThjMWRmMzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRp
bmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMiw0OSArMjMsMjYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRVNw
ZWN1bGFyTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFU3BlY3Vs
YXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0
YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAg
ICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBz
dXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5l
bFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5
cGU6OlNwZWN1bGFyTGlnaHRpbmcpCitSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFy
TGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwg
ZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+
JiYgc291cmNlKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJMaWdodGlu
Zyhjb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50
LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSkp
OwogfQogCi1SZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0
ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGln
aHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCitGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJM
aWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3Bl
Y3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExl
bmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNl
KQorICAgIDogRkVMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0
YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0
aFksIFdURk1vdmUoc291cmNlKSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVNwZWN1
bGFyTGlnaHRpbmcoZmlsdGVyLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1bGFy
Q29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0
TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVTcGVjdWxhckxpZ2h0aW5n
Ojp+RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCi1ib29sIEZFU3BlY3VsYXJMaWdo
dGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQotewotICAg
IGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3BlY3VsYXJDb25zdGFudCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fc3BlY3VsYXJDb25zdGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxh
ckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25lbnQpCi17Ci0gICAgaWYgKG1fc3BlY3VsYXJF
eHBvbmVudCA9PSBzcGVjdWxhckV4cG9uZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJFeHBvbmVudDsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNv
bnN0CitUZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlU3BlY3VsYXJMaWdodGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBz
dXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInNw
ZWN1YWxDb25zdGFudD1cIiIgPDwgbV9zcGVjdWxhckNvbnN0YW50IDw8ICJcIiAiCiAgICAgICAg
PDwgInNwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1fc3BlY3VsYXJFeHBvbmVudCA8PCAiXCJdXG4i
OwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlu
cHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAppbmRleCBlOTk4
YTc2MDVkMWU0NzM1ZDlmNDk3OThkMzk4MThiZjNiMjQ5NThhLi5jYWU1YjgyZmJlYmM1YWI2MzQz
NTY5MDVlOWJlN2U2ZjNmMDMyZjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKQEAgLTIs
NiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDIwICsy
OCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6
IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJM
aWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3Bl
Y3VsYXJMaWdodGluZygpOworICAgIHN0YXRpYyBSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVh
dGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAotICAgIGZsb2F0IHNw
ZWN1bGFyQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyQ29uc3RhbnQ7IH0KLSAg
ICBib29sIHNldFNwZWN1bGFyQ29uc3RhbnQoZmxvYXQpOwotCi0gICAgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJFeHBvbmVudDsgfQotICAgIGJvb2wg
c2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCk7Citwcml2YXRlOgorICAgIEZFU3BlY3VsYXJMaWdo
dGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCi0gICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJl
c2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJGRVNwZWN1bGFyTGlnaHRpbmciOyB9CiAKLXBy
aXZhdGU6Ci0gICAgRkVTcGVjdWxhckxpZ2h0aW5nKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxv
YXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1MWNiYjIyOWRlZTk2NDJkYzFlN2RjYTBjNWRi
MmZjYWMyMGFkLi4xMzc5MmRkOGQwM2ZjMTliMmM2MzIxZTMxNjJmNzEzYTc3MTY3MzIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
Y3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhl
d3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIx
LDgwICsyMiwzNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFVGlsZS5oIgog
Ci0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUg
IlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVUaWxlOjpGRVRpbGUoRmlsdGVyJiBmaWx0
ZXIpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpUaWxlKQorUmVmPEZFVGlsZT4g
RkVUaWxlOjpjcmVhdGUoKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVGlsZSgpKTsK
IH0KIAotUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIpCitGbG9hdFJl
Y3QgRkVUaWxlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVUaWxlKGZpbHRlcikpOworICAgIC8vIERvbid0IHVzZSB0aGUgaW5wdXRzJyBzdWJyZWdp
b25zIGZvciA8ZmVUaWxlPi4KKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVn
aW9uKHsgfSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmls
dGVyUmVzdWx0KiBGRVRpbGU6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1
bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0vLyBGSVhNRTogU2VlIGJ1
ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29yayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUs
IGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3RoZXJ3aXNlLgotICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAg
YXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZl
ciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWlu
QnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJl
c3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHNl
dElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgLy8gU291cmNlIGlucHV0
IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lv
biBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJh
Y2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgot
ICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQ
b2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9h
dFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7Ci0g
ICAgaWYgKGluLT5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlu
cHV0KSB7Ci0gICAgICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgICAg
IHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0aWxlUmVjdC5zY2Fs
ZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0
aW9uKCkuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKLSAgICBp
ZiAoIXRpbGVJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiB0
aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29u
dGV4dC50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2Nh
dGlvbi55KCkpOwotICAgIHRpbGVJbWFnZUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZl
ciwgaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKSk7Ci0KLSAgICBhdXRvIHRpbGVJ
bWFnZUNvcHkgPSBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKHRpbGVJ
bWFnZSkpOwotICAgIGlmICghdGlsZUltYWdlQ29weSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50
cmFuc2xhdGUoaW5NYXhFZmZlY3RMb2NhdGlvbiAtIG1heEVmZmVjdExvY2F0aW9uKTsKLQotICAg
IGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25O
dWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmls
dGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJD
b250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51
bGxwdHIpOwogfQogCi1UZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QK
K1RleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgdHMgPDwgaW5kZW50IDw8ICJb
ZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVu
dFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotCisgICAgdHMgPDwgaW5kZW50IDw8ICJb
ZmVUaWxlXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCmluZGV4IDQ5YmQ5OWYwOTQ0N2RhZTFj
ZjA5YWYxMjM1OGM2ZGU4NDA2ODc3MTQuLjYxM2E1ODU2ZjVjOWIxOGRhZjc2MWNjZTc3OTQ4YWQ0
NmVhZTg2MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVRpbGUuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjIsMjcgKzIzLDI1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgCiBjbGFzcyBGRVRpbGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVU
aWxlPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBGRVRpbGUoRmlsdGVyJik7CisgICAgdXNp
bmcgRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3Q7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJO
YW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVGlsZSI7IH0KIAotICAgIEZpbHRlckVmZmVj
dFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVm
ZmVjdFR5cGVUaWxlOyB9CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0
ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ss
IEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVj
dChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBhcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2Vu
dGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBj
b25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwCmluZGV4IGFjMjM0NmU4YTRiYTU4YWFhOTI0YTZkNjdiZDVlNGI3N2RkMjI2OGYuLjgy
YmY4N2M1YTQxZGI0MzI5YjE2NDAzNTZjMTRjMzdkODUyNDY5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJl
bmlAaW5mLnUtc3plZ2VkLmh1PgogICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxv
a2lAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjYsMzEgKzI2LDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUdXJi
dWxlbmNlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5o
IgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9i
cy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8qCi0gICAgUHJvZHVjZXMgcmVz
dWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0gMl0uIEFsZ29yaXRobSBpczoKLSAgICByID0g
KGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFtcGxpdHVkZSA9IDE2ODA3IGFuZAotICAgIG0g
PSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIxNDc0ODM2NDcsIHIgPSBzZWVkLgotICAgIFNl
ZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAzMSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4
Ci0gICAgVG8gdGVzdDogdGhlIGFsZ29yaXRobSBzaG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEw
NDM2MTgwNjUKLSAgICBhcyB0aGUgMTAsMDAwdGggZ2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3Jp
Z2luYWwgc2VlZCBpcyAxLgotKi8KLXN0YXRpYyBjb25zdCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQw
OTY7Ci1zdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioq
MzEgLSAxCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3OyAvLyA3Kio1
OyBwcmltaXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7
IC8vIG0gLyBhCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFIgPSAyODM2OyAvLyBtICUgYQorUmVm
PEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZl
cywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBu
dW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOworfQogCi1GRVR1cmJ1bGVuY2U6OkZFVHVy
YnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2Vl
ZCwgYm9vbCBzdGl0Y2hUaWxlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlR1
cmJ1bGVuY2UpCi0gICAgLCBtX3R5cGUodHlwZSkKK0ZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNl
KFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJl
cXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisg
ICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgp
CiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQogICAgICwgbV9udW1PY3Rh
dmVzKG51bU9jdGF2ZXMpCkBAIC01OSw0MDUgKzQ2LDQ3IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJi
dWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJl
cXVlCiB7CiB9CiAKLVJlZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZpbHRl
ciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxv
YXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRj
aFRpbGVzKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZShmaWx0ZXIs
IHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwg
c3RpdGNoVGlsZXMpKTsKLX0KLQogYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsZW5j
ZVR5cGUgdHlwZSkKIHsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZF
VHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkoZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi17Ci0g
ICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVkgPT0gYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX2Jhc2VGcmVxdWVuY3lZID0gYmFzZUZyZXF1ZW5jeVk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV90eXBlLCB0eXBlKSAhPSBtX3R5
cGU7CiB9CiAKIGJvb2wgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WChmbG9hdCBiYXNl
RnJlcXVlbmN5WCkKIHsKLSAgICBpZiAobV9iYXNlRnJlcXVlbmN5WCA9PSBiYXNlRnJlcXVlbmN5
WCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYmFzZUZyZXF1ZW5jeVggPSBiYXNlRnJl
cXVlbmN5WDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Jh
c2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WCkgIT0gbV9iYXNlRnJlcXVlbmN5WDsKIH0KIAot
Ym9vbCBGRVR1cmJ1bGVuY2U6OnNldFNlZWQoZmxvYXQgc2VlZCkKK2Jvb2wgRkVUdXJidWxlbmNl
OjpzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNlRnJlcXVlbmN5WSkKIHsKLSAgICBpZiAobV9z
ZWVkID09IHNlZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NlZWQgPSBzZWVkOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fYmFzZUZyZXF1ZW5j
eVksIGJhc2VGcmVxdWVuY3lZKSAhPSBtX2Jhc2VGcmVxdWVuY3lZOwogfQogCiBib29sIEZFVHVy
YnVsZW5jZTo6c2V0TnVtT2N0YXZlcyhpbnQgbnVtT2N0YXZlcykKIHsKLSAgICBpZiAobV9udW1P
Y3RhdmVzID09IG51bU9jdGF2ZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX251bU9j
dGF2ZXMgPSBudW1PY3RhdmVzOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVs
ZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0Y2gpCi17Ci0gICAgaWYgKG1fc3RpdGNoVGls
ZXMgPT0gc3RpdGNoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zdGl0Y2hUaWxlcyA9
IHN0aXRjaDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGhlIHR1cmJ1bGVuY2UgY2FsY3Vs
YXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZlcnNpb24gb2Ygd2hhdCBhcHBlYXJzIGluIHRoZSBT
VkcgMS4xIHNwZWNpZmljYXRpb246Ci0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0
ZXJzLmh0bWwjZmVUdXJidWxlbmNlCi0KLS8vIENvbXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIu
Ci1pbmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAg
ICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVkZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3Jh
bmRSICogKHNlZWQgLyBzX3JhbmRRKTsKLSAgICBpZiAocmVzdWx0IDw9IDApCi0gICAgICAgIHJl
c3VsdCArPSBzX3JhbmRNYXhpbXVtOwotICAgIHNlZWQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotaW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0
dXJuIHQgKiB0ICogKDMgLSAyICogdCk7Ci19Ci0KLWlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBv
bGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEgKyB0ICog
KGIgLSBhKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OmluaXRQYWludChQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkKLXsKLSAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yOwotCi0gICAg
Ly8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhlIHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0g
MV0uCi0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkIDw9IDApCi0gICAgICAgIHBhaW50aW5nRGF0
YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAlIChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsK
LSAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBzX3JhbmRNYXhpbXVtIC0gMSkKLSAgICAgICAg
cGFpbnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhpbXVtIC0gMTsKLQotICAgIGZsb2F0KiBncmFk
aWVudDsKLSAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkg
ewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplOyArK2kpIHsKLSAgICAg
ICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBpOwotICAgICAgICAgICAg
Z3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV07Ci0gICAgICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4o
KHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXpl
KSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBz
X2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAgICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVu
dFswXSAmJiAhZ3JhZGllbnRbMV0pOwotICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9
IHN0ZDo6aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKLSAgICAgICAgICAgIGdyYWRp
ZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7Ci0gICAgICAgICAgICBncmFkaWVudFsxXSAv
PSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQg
aSA9IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0taSkgewotICAgICAgICBpbnQgayA9IHBhaW50
aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0gICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRh
LnJhbmRvbSgpICUgc19ibG9ja1NpemU7Ci0gICAgICAgIEFTU0VSVChqID49IDApOwotICAgICAg
ICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSArIDIpOwotICAgICAgICBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXSA9IGs7Ci0gICAgfQotCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgewotICAgICAgICBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5l
bCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2No
YW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5l
bF1baV1bMF07Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19i
bG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotRkVUdXJidWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVs
ZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1
ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29uc3QKLXsKLSAgICBpZiAoIW1fc3RpdGNo
VGlsZXMpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxl
U2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHRpbGVIZWlnaHQgPSB0aWxlU2l6ZS5oZWlnaHQoKTsK
LSAgICBBU1NFUlQodGlsZVdpZHRoID4gMCAmJiB0aWxlSGVpZ2h0ID4gMCk7Ci0KLSAgICAvLyBX
aGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNlLCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBh
ZGp1c3RlZAotICAgIC8vIHNvIHRoYXQgdGhlIHRpbGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVv
dXMuCi0gICAgaWYgKGJhc2VGcmVxdWVuY3lYKSB7Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5j
eSA9IGZsb29yZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAg
ICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5
WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIC8vIEJhc2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1u
ZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkLgotICAgICAgICBpZiAoYmFzZUZyZXF1
ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCi0g
ICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGxvd0ZyZXF1ZW5jeTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBoaWdoRnJlcXVlbmN5OwotICAgIH0KLSAgICBp
ZiAoYmFzZUZyZXF1ZW5jeVkpIHsKLSAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3Jm
KHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OwotICAgICAgICBmbG9h
dCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRp
bGVIZWlnaHQ7Ci0gICAgICAgIGlmIChiYXNlRnJlcXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhp
Z2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZ
ID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5
WSA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotCi0gICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwot
ICAgIHN0aXRjaERhdGEud2lkdGggPSByb3VuZGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgp
OwotICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0
aDsKLSAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJvdW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1
ZW5jeVkpOwotICAgIHN0aXRjaERhdGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0
YS5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gc3RpdGNoRGF0YTsKLX0KLQotLy8gVGhpcyBpcyB0YWtl
biAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5o
dG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVy
YnVsZW5jZTo6bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3Qg
U3RpdGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpIGNv
bnN0Ci17Ci0gICAgc3RydWN0IE5vaXNlUG9zaXRpb24gewotICAgICAgICBpbnQgaW5kZXg7IC8v
IGJ4MCwgYnkwIGluIHRoZSBzcGVjIHRleHQuCi0gICAgICAgIGludCBuZXh0SW5kZXg7IC8vIGJ4
MSwgYnkxIGluIHRoZSBzcGVjIHRleHQuCi0gICAgICAgIGZsb2F0IGZyYWN0aW9uOyAvLyByeDAs
IHJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgotCi0gICAgICAgIE5vaXNlUG9zaXRpb24oZmxvYXQgY29t
cG9uZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyAgdCA9IHZlY1swXSArIFBlcmxpbk47
Ci0gICAgICAgICAgICAvLyAgYngwID0gKGludCl0OwotICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4
MCsxOwotICAgICAgICAgICAgLy8gIHJ4MCA9IHQgLSAoaW50KXQ7Ci0gICAgICAgICAgICBmbG9h
dCBwb3NpdGlvbiA9IGNvbXBvbmVudCArIHNfcGVybGluTm9pc2U7Ci0gICAgICAgICAgICBpbmRl
eCA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24pOwotICAgICAgICAgICAgbmV4dEluZGV4ID0g
aW5kZXggKyAxOwotICAgICAgICAgICAgZnJhY3Rpb24gPSBwb3NpdGlvbiAtIGluZGV4OwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHN0aXRjaChpbnQgc2l6ZSwgaW50IHdyYXBT
aXplKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBpZiAoYngwID49IHBTdGl0Y2hJbmZvLT5u
V3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4MCAtPSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAg
ICAgICAgICAgaWYgKGluZGV4ID49IHdyYXBTaXplKQotICAgICAgICAgICAgICAgIGluZGV4IC09
IHNpemU7Ci0KLSAgICAgICAgICAgIC8vIGlmIChieDEgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkK
LSAgICAgICAgICAgIC8vICAgYngxIC09IHBTdGl0Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAg
ICBpZiAobmV4dEluZGV4ID49IHdyYXBTaXplKQotICAgICAgICAgICAgICAgIG5leHRJbmRleCAt
PSBzaXplOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIE5vaXNlUG9zaXRpb24gbm9pc2VYKG5v
aXNlVmVjdG9yLngoKSk7Ci0gICAgTm9pc2VQb3NpdGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgp
KTsKLQotICAgIC8vIElmIHN0aXRjaGluZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGlu
Z2x5LgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAgIG5vaXNlWC5zdGl0Y2goc3Rp
dGNoRGF0YS53aWR0aCwgc3RpdGNoRGF0YS53cmFwWCk7Ci0gICAgICAgIG5vaXNlWS5zdGl0Y2go
c3RpdGNoRGF0YS5oZWlnaHQsIHN0aXRjaERhdGEud3JhcFkpOwotICAgIH0KLQotICAgIC8vIGJ4
MCAmPSBCTTsKLSAgICAvLyBieDEgJj0gQk07Ci0gICAgLy8gYnkwICY9IEJNOwotICAgIC8vIGJ5
MSAmPSBCTTsKLSAgICBub2lzZVguaW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VYLm5l
eHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7
Ci0gICAgbm9pc2VZLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKLQotICAgIC8vIGkgPSB1TGF0
dGljZVNlbGVjdG9yW2J4MF07Ci0gICAgLy8gaiA9IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKLSAg
ICBpbnQgbGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVgu
aW5kZXhdOwotICAgIGludCBuZXh0TGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VT
ZWxlY3Rvcltub2lzZVgubmV4dEluZGV4XTsKLQotICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUo
cngwKSk7Ci0gICAgLy8gc3kgPSBkb3VibGUoc19jdXJ2ZShyeTApKTsKLSAgICBmbG9hdCBzeCA9
IHNtb290aEN1cnZlKG5vaXNlWC5mcmFjdGlvbik7Ci0gICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2
ZShub2lzZVkuZnJhY3Rpb24pOwotCi0gICAgYXV0byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50
IGNoYW5uZWwpIHsKLSAgICAgICAgLy8gYjAwID0gdUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQot
ICAgICAgICBpbnQgYjAwID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5k
ZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5u
ZWxdW2IwMF07IHUgPSByeDAgKiBxWzBdICsgcnkwICogcVsxXTsKLSAgICAgICAgY29uc3QgZmxv
YXQqIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjAwXTsKLSAgICAgICAgZmxv
YXQgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwot
Ci0gICAgICAgIC8vIGIxMCA9IHVMYXR0aWNlU2VsZWN0b3JbaiArIGJ5MF07Ci0gICAgICAgIGlu
dCBiMTAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBu
b2lzZVkuaW5kZXhdOwotICAgICAgICAvLyByeDEgPSByeDAgLSAxLjBmOwotICAgICAgICAvLyBx
ID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMF07IHYgPSByeDEgKiBxWzBdICsgcnkwICog
cVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOwot
ICAgICAgICBmbG9hdCB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5m
cmFjdGlvbiAqIHFbMV07Ci0gICAgICAgIC8vIGEgPSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAg
ZmxvYXQgYSA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwotCi0gICAgICAgIC8vIGIw
MSA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MV07Ci0gICAgICAgIGludCBiMDEgPSBwYWludGlu
Z0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwot
ICAgICAgICAvLyByeTEgPSByeTAgLSAxLjBmOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25D
b2xvckNoYW5uZWxdW2IwMV07IHUgPSByeDAgKiBxWzBdICsgcnkxICogcVsxXTsKLSAgICAgICAg
cSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDFdOwotICAgICAgICB1ID0gbm9p
c2VYLmZyYWN0aW9uICogcVswXSArIChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07Ci0KLSAg
ICAgICAgLy8gYjExID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkxXTsKLSAgICAgICAgaW50IGIx
MSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNl
WS5uZXh0SW5kZXhdOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2Ix
MV07IHYgPSByeDEgKiBxWzBdICsgcnkxICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtiMTFdOwotICAgICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAt
IDEpICogcVswXSArIChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07Ci0gICAgICAgIC8vIGIg
PSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxvYXQgYiA9IGxpbmVhckludGVycG9sYXRpb24o
c3gsIHUsIHYpOwotCi0gICAgICAgIC8vIHJldHVybiBsZXJwKHN5LCBhLCBiKTsKLSAgICAgICAg
cmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ksIGEsIGIpOwotICAgIH07Ci0KLSAgICByZXR1
cm4gewotICAgICAgICBub2lzZUZvckNoYW5uZWwoMCksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5l
bCgxKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDIpLAotICAgICAgICBub2lzZUZvckNoYW5u
ZWwoMykKLSAgICB9OwotfQotCi0vLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMu
aHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50IGRlc2NyaWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29s
b3IgY29tcG9uZW50cy4KLS8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNS
R0JBPHVpbnQ4Pj4oU1JHQkE8ZmxvYXQ+KSB0byBnZXQgdGhlIHNhbWUgYmVoYXZpb3IuCi1zdGF0
aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21w
b25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykK
LXsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0
PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpj
bGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSks
IDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50Pihm
bG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAyNTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVp
bnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1
KSwKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fbnVtT2N0YXZlcywgbnVtT2N0
YXZlcykgIT0gbV9udW1PY3RhdmVzOwogfQogCi1Db2xvckNvbXBvbmVudHM8dWludDhfdCwgND4g
RkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNl
ZWQpCiB7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0dXJidWxlbmNlRnVuY3Rpb25S
ZXN1bHQ7Ci0gICAgRmxvYXRQb2ludCBub2lzZVZlY3Rvcihwb2ludC54KCkgKiBwYWludGluZ0Rh
dGEuYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5
WSk7Ci0gICAgZmxvYXQgcmF0aW8gPSAxOwotICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2
ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsKLSAgICAgICAgaWYgKG1fdHlwZSA9PSBUdXJi
dWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3Rvcikg
LyByYXRpbzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVz
dWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvcikuYWJz
KCkgLyByYXRpbzsKLQotICAgICAgICBub2lzZVZlY3Rvci5zZXRYKG5vaXNlVmVjdG9yLngoKSAq
IDIpOwotICAgICAgICBub2lzZVZlY3Rvci5zZXRZKG5vaXNlVmVjdG9yLnkoKSAqIDIpOwotICAg
ICAgICByYXRpbyAqPSAyOwotCi0gICAgICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAg
ICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4gU3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBi
ZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAotICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFm
dGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0aW5nIGl0IG9uY2UuCi0gICAgICAgICAgICBz
dGl0Y2hEYXRhLndpZHRoICo9IDI7Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAq
IHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5vaXNlOwotICAgICAgICAgICAgc3RpdGNoRGF0
YS5oZWlnaHQgKj0gMjsKLSAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNo
RGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBU
aGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxl
bmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCi0gICAg
Ly8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0g
ICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAgICAgICB0
dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVm
ICsgMC41ZjsKLQotICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVu
Y2VGdW5jdGlvblJlc3VsdCk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zZWVkLCBzZWVk
KSAhPSBtX3NlZWQ7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xh
bXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
U3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3QKK2Jvb2wg
RkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhib29sIHN0aXRjaFRpbGVzKQogewotICAgIEFT
U0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIEludFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1
dGVQYWludFJlY3QoKTsKLSAgICBmaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2Nh
bGUoKSk7Ci0gICAgRmxvYXRQb2ludCBwb2ludCgwLCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZ
KTsKLSAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5lbCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24u
d2lkdGgoKSA8PCAyKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZp
bHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5z
Zm9ybSgpKTsKLQotICAgIGZvciAoaW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAg
ICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAxKTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0
ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24u
d2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwot
ICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQ
b2ludChwb2ludCk7Ci0gICAgICAgICAgICBhdXRvIHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0g
ICAgICAgICAgICBwaXhlbEFycmF5LnNldFJhbmdlKHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwg
NCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7Ci0gICAgICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVs
ICs9IDQ7Ci0gICAgICAgIH0KLSAgICB9CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zdGl0
Y2hUaWxlcywgc3RpdGNoVGlsZXMpICE9IG1fc3RpdGNoVGlsZXM7CiB9CiAKLXZvaWQgRkVUdXJi
dWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQorRmxvYXRSZWN0IEZFVHVyYnVsZW5jZTo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIHBh
cmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbigqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBh
cmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVy
cy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJp
bWl0aXZlU3VicmVnaW9uKHsgfSk7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRlck91
dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2Nh
bGUoKSk7Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVzdGlu
YXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCkuc2l6ZSgpKTsKLQotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVl
bmN5WDsKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAg
U3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZy
ZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0Rh
dGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLSAg
ICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKLQotICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUu
YXJlYSgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW50IGhlaWdodCA9IHJlc3VsdFNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBt
YXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVt
YmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBt
YXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAg
ICAgV1RGOjpQYXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygm
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVt
YmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgYXV0
byBudW1Kb2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAobnVt
Sm9icyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAic3RlcFkiLXNp
emVkIGpvYnMsIGRpc3RyaWJ1dGluZyB0aGUgZXh0cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAiam9i
c1dpdGhFeHRyYSIgam9icy4KLSAgICAgICAgICAgIHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0IC8g
bnVtSm9iczsKLSAgICAgICAgICAgIHVuc2lnbmVkIGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQgJSBu
dW1Kb2JzOwotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRZID0gMDsKLQotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgewotICAgICAgICAgICAgICAg
IEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkp
OwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKLSAgICAgICAgICAg
ICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1z
LnN0YXJ0WSA9IHN0YXJ0WTsKLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpvYkhlaWdodCA9
IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSArIDEgOiBzdGVwWTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkgKyBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICAg
ICAgc3RhcnRZICs9IGpvYkhlaWdodDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFy
YWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0p
KQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRo
cmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBw
YWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIHJldHVybiBh
cHBseVBsYXRmb3JtKG91dHB1dCwgeyB9LCBudWxscHRyKTsKIH0KIAogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBlIHR5cGUpCkBAIC00
NzYsMTAgKzEwNSw5IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVh
bSYgRkVUdXJidWxlbmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBS
ZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVR1
cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlVHVyYnVsZW5j
ZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgdHMgPDwgIiB0eXBlPVwiIiA8PCB0eXBlKCkgPDwgIlwiICIKICAgICAg
ICA8PCAiYmFzZUZyZXF1ZW5jeT1cIiIgPDwgYmFzZUZyZXF1ZW5jeVgoKSA8PCAiLCAiIDw8IGJh
c2VGcmVxdWVuY3lZKCkgPDwgIlwiICIKICAgICAgICA8PCAic2VlZD1cIiIgPDwgc2VlZCgpIDw8
ICJcIiAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0ZDUzNmIzN2E4MGFhZGY5MTFlYmZjZTg5Nzc0Y2Qz
Y2NlY2I1Y2ZiLi44ZjcxMmZlZTUzYmMwYTY2MjIyZGNkZDVlMDQwYjcwYzMyZDU2ZDRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmgKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3Zh
biA8cmVuaUBpbmYudS1zemVnZWQuaHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNCw5ICsyNCw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ29sb3JD
b21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgsNyArMzYsNyBAQCBlbnVtIGNsYXNz
IFR1cmJ1bGVuY2VUeXBlIHsKIAogY2xhc3MgRkVUdXJidWxlbmNlIDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShGaWx0
ZXImLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKyAg
ICBzdGF0aWMgUmVmPEZFVHVyYnVsZW5jZT4gY3JlYXRlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBi
YXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9h
dCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAogICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldFR5cGUoVHVyYnVsZW5jZVR5cGUp
OwpAQCAtNTksNjggKzU3LDE3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFN0aXRjaFRpbGVzKGJv
b2wpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7
Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNfYmxvY2tTaXplIC0gMTsKLQot
ICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDAp
OyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icy4KLQotICAgIHN0cnVj
dCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWludGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQs
IGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0
IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgOiBzZWVkKHBhaW50aW5nU2VlZCkKLSAgICAg
ICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1NpemUpCi0gICAgICAgICAgICAsIGJhc2VGcmVx
dWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNl
RnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgbG9uZyBzZWVkOwot
ICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2NrU2l6ZSArIDJdOwotICAgICAg
ICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1NpemUgKyAyXVsyXTsKLSAgICAgICAgSW50
U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKLSAgICAgICAg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAgICAgaW5saW5lIGxvbmcgcmFuZG9tKCk7Ci0g
ICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAgICAgICAgU3RpdGNoRGF0YSgpID0g
ZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGggeyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1YnRy
YWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAgICAgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBN
aW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAgIGludCBoZWlnaHQgeyAwIH07Ci0gICAgICAg
IGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
LSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwotCi0gICAgc3RydWN0IEZpbGxSZWdpb25Q
YXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxlbmNlKiBmaWx0ZXI7Ci0gICAgICAgIFVpbnQ4
Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwotICAgICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5n
RGF0YTsKLSAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgICAgICBpbnQgc3RhcnRZ
OwotICAgICAgICBpbnQgZW5kWTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lv
bldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyopOwotCi0gICAgRkVUdXJidWxlbmNlKEZpbHRl
ciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOworICAg
IEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0
IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hU
aWxlcyk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFVHVyYnVsZW5jZSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRl
IHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkp
KTsgfQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5pdFBhaW50KFBh
aW50aW5nRGF0YSYpOwotICAgIFN0aXRjaERhdGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRp
bGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29u
c3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50aW5n
RGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBv
aW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdDsKLSAgICB2b2lkIGZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQYWlu
dGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3Q7CisgICAg
RmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0
YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3Rh
dGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lkKik7CisgICAgYm9vbCBhcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKICAg
ICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lYOwpAQCAtMTMxLDQgKzc4LDMgQEAgcHJpdmF0ZToKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyMmM4NjA4NGQx
NWYyNDA5NWU0OTg1NGZmZDkzZjcwNTk5YWYwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRmlsdGVyOjpGaWx0ZXIoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBUeXBlIHR5
cGUpCisgICAgOiBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fdHlwZSh0
eXBlKQoreworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4g
RmlsdGVyOjphcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxG
aWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBGaWx0ZXJSZXN1bHRWZWN0
b3Igc3RhY2s7CisgICAgRmlsdGVyT3V0cHV0IG91dHB1dChXVEZNb3ZlKGdlb21ldHJ5KSwgbV9y
ZW5kZXJpbmdNb2RlKTsKKworICAgIGF1dG8gcmVzdWx0ID0gYXBwbHkob3V0cHV0LCBzdGFjaywg
c291cmNlSW1hZ2UpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgQVNTRVJUKHN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmVzdWx0LT50cmFuc2Zvcm1Ub0NvbG9y
U3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgIHJldHVybiB7IHJlc3Vs
dC0+aW1hZ2VCdWZmZXIoKSwgcmVzdWx0LT5hYnNvbHV0ZURyYXdpbmdSZWN0KCkgfTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggYTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5
YzBjZTI2MTEwYmMxZi4uYjQ0MWY2ZTgxZDMwNjk2MDc2YWZjMGNmNmIxY2EzZTMyZmE1OWViMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDU5ICsyMSw0MiBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSAiRmls
dGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJl
bmRlcmluZ01vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZl
Y3Q7CitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24geworICAgIHVzaW5nIEZp
bHRlckZ1bmN0aW9uOjphcHBseTsKIAotY2xhc3MgRmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8
RmlsdGVyPiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJz
b2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0gMSkKLSAgICAgICAgOiBtX2Fic29s
dXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAgICAgICAsIG1fZmlsdGVyU2NhbGUo
ZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+RmlsdGVyKCkgPSBkZWZhdWx0Owor
ICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeyBDU1MsIFNWRyB9OwogCi0gICAgdm9pZCBz
ZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3Vy
Y2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsgfQotCi0gICAgRmxvYXRTaXpl
IGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0K
LSAgICB2b2lkIHNldEZpbHRlclJlc29sdXRpb24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNv
bHV0aW9uKSB7IG1fZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KKyAgICBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01v
ZGU7IH0KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAotICAgIGZs
b2F0IGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQotICAgIHZv
aWQgc2V0RmlsdGVyU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxlOyB9
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp0dXBsZTxSZWZQdHI8SW1hZ2VCdWZmZXI+LCBGbG9h
dFJlY3Q+IGFwcGx5KEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZp
bHRlckdlb21ldHJ5PiYmKSBjb25zdDsKIAotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJz
b2x1dGVUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9Citw
cm90ZWN0ZWQ6CisgICAgRmlsdGVyKFJlbmRlcmluZ01vZGUsIFR5cGUpOwogCi0gICAgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9
Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkg
eyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdNb2RlOyB9CisgICAgdmlydHVhbCBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBib29sIGlz
U1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXND
U1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIFJlbmRlcmluZ01vZGUgbV9y
ZW5kZXJpbmdNb2RlOworICAgIFR5cGUgbV90eXBlOworfTsKIAotICAgIHZpcnR1YWwgRmxvYXRT
aXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1
cm4gc2l6ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgIAotICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBm
aWx0ZXJSZWdpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVn
aW9uSW5Vc2VyU3BhY2UoKSBjb25zdCA9IDA7Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLXBy
b3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNv
bHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVzb2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQot
ICAgIHsKLSAgICB9CituYW1lc3BhY2UgV1RGIHsKIAotcHJpdmF0ZToKLSAgICBSZWZQdHI8SW1h
Z2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7Ci0gICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlv
bjsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJp
bmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsK
LSAgICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpGaWx0ZXI6OlR5cGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFs
dWVzPAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXI6OlR5cGUsCisgICAgICAgIFdlYkNvcmU6OkZp
bHRlcjo6VHlwZTo6Q1NTLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXI6OlR5cGU6OlNWRworICAg
ID47CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRmYzViYmNhNTFjMzQ4ZWM3ZjYzZTRjYzkyN2Ri
MTA4Li5mY2E4NDZkZjE1OGUzZTZhOTNjMGQwNmQ1YjNhMzliYzNkZjU5MDkzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCkBAIC0yNCw2NjAgKzI0LDM3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZp
bHRlci5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLSNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25lb24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFD
Q0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKKyNp
bmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRl
ckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlciYgZmlsdGVyLCBUeXBlIHR5cGUpCi0gICAgOiBt
X2ZpbHRlcihmaWx0ZXIpCi0gICAgLCBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZSh0eXBlKQotewot
fQotCi1GaWx0ZXJFZmZlY3Q6On5GaWx0ZXJFZmZlY3QoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgRmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgbV9hYnNvbHV0
ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRF
ZmZlY3RzKQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVmZmVjdC0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci19Ci0KLXZvaWQg
RmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVm
ZmVjdDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICAvLyBGaWx0ZXJzIGluIFNW
RyBjbGlwIHRvIHByaW1pdGl2ZSBzdWJyZWdpb24sIHdoaWxlIENTUyBkb2Vzbid0LgotICAgIGlm
IChtX2NsaXBzVG9Cb3VuZHMpCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0
KGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0
KSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0OworICAgIGZvciAoYXV0byYgaW5wdXQgOiBp
bnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVuaXRlKGlucHV0LT5kcmF3aW5nUmVjdCgpKTsK
KyAgICByZXR1cm4gZ2VvbWV0cnkubWF4RHJhd2luZ1JlY3QoaW5wdXRzLCBkcmF3aW5nUmVjdCk7
CiB9CiAKLUZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1
ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50KSBjb25zdAorRmlsdGVyUmVzdWx0KiBGaWx0
ZXJFZmZlY3Q6OmFwcGx5UGxhdGZvcm0oRmlsdGVyT3V0cHV0JiBvdXRwdXQsIGNvbnN0IEZpbHRl
clJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0CiB7
Ci0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50ID0gbWFwUG9pbnQodXNlclNwYWNlUG9pbnQs
IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uLCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9u
KTsKLSAgICBhYnNvbHV0ZVBvaW50Lm1vdmVCeSgtbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlv
bigpKTsKLSAgICByZXR1cm4gYWJzb2x1dGVQb2ludDsKLX0KLQotSW50UmVjdCBGaWx0ZXJFZmZl
Y3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0JiBlZmZl
Y3RSZWN0KSBjb25zdAotewotICAgIEludFBvaW50IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50
UmVjdC5sb2NhdGlvbigpOwotICAgIGxvY2F0aW9uLm1vdmVCeSgtZWZmZWN0UmVjdC5sb2NhdGlv
bigpKTsKLSAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgbV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwotfQotCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1Jl
c3VsdCgpKTsKLQotICAgIEZsb2F0U2l6ZSBzY2FsZTsKLSAgICBJbWFnZUJ1ZmZlcjo6Y2xhbXBl
ZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIHNjYWxlKTsKLQotICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNmb3JtLnNjYWxlKHNjYWxlKS50cmFuc2xhdGUo
LW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybS5t
YXBSZWN0KHNyY1JlY3QpOwotfQotCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQotewotICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNl
LCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZmZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lv
biBhcyB1bml0ZSByZWN0LgotICAgIEZsb2F0UmVjdCBzdWJyZWdpb247Ci0gICAgaWYgKHVuc2ln
bmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gaW5wdXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAg
ICAgIHN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bWJlck9mSW5w
dXRFZmZlY3RzOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdp
b24gPSBpbnB1dEVmZmVjdChpKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7
Ci0gICAgICAgICAgICBzdWJyZWdpb24udW5pdGUoaW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRl
clJlZ2lvbkluVXNlclNwYWNlKCk7Ci0KLSAgICAvLyBBZnRlciBjYWxsaW5nIGRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBvbiB0aGUgdGFyZ2V0IGVmZmVjdCwgcmVzZXQgdGhlIHN1
YnJlZ2lvbiBhZ2FpbiBmb3IgPGZlVGlsZT4uCi0gICAgaWYgKGZpbHRlckVmZmVjdFR5cGUoKSA9
PSBGaWx0ZXJFZmZlY3RUeXBlVGlsZSkKLSAgICAgICAgc3VicmVnaW9uID0gbV9maWx0ZXIuZmls
dGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIGF1dG8gYm91bmRhcmllcyA9IGVmZmVjdEJv
dW5kYXJpZXMoKTsKLSAgICBpZiAoaGFzWCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0WChib3Vu
ZGFyaWVzLngoKSk7Ci0gICAgaWYgKGhhc1koKSkKLSAgICAgICAgc3VicmVnaW9uLnNldFkoYm91
bmRhcmllcy55KCkpOwotICAgIGlmIChoYXNXaWR0aCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0
V2lkdGgoYm91bmRhcmllcy53aWR0aCgpKTsKLSAgICBpZiAoaGFzSGVpZ2h0KCkpCi0gICAgICAg
IHN1YnJlZ2lvbi5zZXRIZWlnaHQoYm91bmRhcmllcy5oZWlnaHQoKSk7Ci0KLSAgICBzZXRGaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9uKTsKLQotICAgIGF1dG8gYWJzb2x1dGVTdWJy
ZWdpb24gPSBtX2ZpbHRlci5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qoc3VicmVnaW9uKTsK
LSAgICBhdXRvIGZpbHRlclJlc29sdXRpb24gPSBtX2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCk7
Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAgLy8g
U2F2ZSB0aGlzIGJlZm9yZSBjbGlwcGluZyBzbyB3ZSBjYW4gdXNlIGl0IHRvIG1hcCBsaWdodGlu
ZyBwb2ludHMgZnJvbSB1c2VyIHNwYWNlIHRvIGJ1ZmZlciBjb29yZGluYXRlcy4KLSAgICBzZXRV
bmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihhYnNvbHV0ZVN1YnJlZ2lvbik7Ci0KLSAgICAvLyBD
bGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhlIGZpbHRlciByZWdpb24uCi0gICAgYXV0byBh
YnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAg
IGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24pOwotICAg
IGFic29sdXRlU3VicmVnaW9uLmludGVyc2VjdChhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbik7
Ci0KLSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29sdXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4g
c3VicmVnaW9uOwotfQotCi1GaWx0ZXJFZmZlY3QqIEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3Qo
dW5zaWduZWQgbnVtYmVyKSBjb25zdAotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKG51bWJlciA8IG1faW5wdXRFZmZlY3RzLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1faW5w
dXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb2xsZWN0
RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3QqZWZmZWN0LCBIYXNoU2V0PGNvbnN0IEZpbHRlckVm
ZmVjdCo+JiBhbGxFZmZlY3RzKQotewotICAgIGFsbEVmZmVjdHMuYWRkKGVmZmVjdCk7Ci0gICAg
dW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCog
aW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkpOwotICAgICAgICBjb2xsZWN0RWZmZWN0cyhpbiwg
YWxsRWZmZWN0cyk7Ci0gICAgfQotICAgIHJldHVybiBhbGxFZmZlY3RzLnNpemUoKTsKLX0KLQot
dW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QK
LXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+IGFsbEVmZmVjdHM7Ci0gICAgcmV0
dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFsbEVmZmVjdHMpOwotfQotCi12b2lkIEZpbHRlckVm
ZmVjdDo6YXBwbHkoKQotewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0g
bV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCk7Ci0gICAgICAgIGluLT5hcHBseSgpOwotICAgICAg
ICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAv
LyBDb252ZXJ0IGlucHV0IHJlc3VsdHMgdG8gdGhlIGN1cnJlbnQgZWZmZWN0J3MgY29sb3Igc3Bh
Y2UuCi0gICAgICAgIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoaW4sIGkpOwotICAgIH0KLQot
ICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFj
ZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlz
IDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RC
b3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29s
dXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fi
c29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVj
dCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZpbHRlclNjYWxlKCkgPDwgIlxu
ICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKSk7Cisg
ICAgYXV0byBkcmF3aW5nUmVjdCA9IHRoaXMtPmRyYXdpbmdSZWN0KGlucHV0cywgb3V0cHV0Lmdl
b21ldHJ5KCkpOwogCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBp
eGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0g
ICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7
Ci0gICAgfQotICAgIAotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlv
bnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCi0gICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7
Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygp
Ci17Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVy
IGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCi0gICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgaW1hZ2VBcnJh
eSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4
ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBp
bWFnZUFycmF5Lmxlbmd0aCgpOwotCi0gICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVy
IHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0gICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0
aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICBpZiAocGl4ZWxB
cnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERh
dGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKLSAgICAgICAgZG8gewotICAgICAgICAg
ICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0gICAgICAgICAgICB1aW50OHgxNng0
X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBzaXh0
ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVu
UGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5x
X3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAg
ICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJd
LCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEs
IHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OwotICAgICAgICB9
IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOwotCi0gICAgICAgIHBpeGVsQXJyYXlMZW5n
dGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlM
ZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFs
cGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKLSAgICB3aGls
ZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUg
aW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOwotICAgICAg
ICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4
ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0g
YTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwotICAgICAgICB9Ci0gICAgICAgIC8vIEluY3Jl
bWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgfQotfQotCi12b2lkIEZp
bHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQotewotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBu
dWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0g
ICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci19Ci0KLXZvaWQg
RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQotewotICAgIC8vIENsZWFyIGFs
bCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhlIGN1cnJlbnQgZWZmZWN0IGhhcwotICAgIC8v
IGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBlZmZlY3QgaXMgaW4gYW4gZXJyb25lb3VzIHN0
YXRlLgotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgY2xlYXJSZXN1bHQoKTsKLQotICAg
IHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0
KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlz
IDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9p
bWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAi
IDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFoYXNSZXN1
bHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci0KLSAgICBt
X2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2Fs
ZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFt
X2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFJl
Y3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
KTsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VC
dWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwg
ZGVzdGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQt
PnB1dFBpeGVsQnVmZmVyKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJl
Y3QpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotfQotCi1SZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0
IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xv
clNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNT
RVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNj
YWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2Vk
QXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNo
ZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICBhdXRvIHJlc3VsdCA9IG91dHB1dC5jcmVh
dGVGaWx0ZXJSZXN1bHQoZHJhd2luZ1JlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBw
aXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hl
Y2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFj
ZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3Qs
IHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAg
IEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUo
bV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNp
emUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092
ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5
ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEp
OwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29w
eVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAg
IHJldHVybiBwaXhlbEFycmF5OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0
ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIEludFJlY3Qgc2Nh
bGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxl
KCkpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFj
aywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVk
UmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+
IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFp
bnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBk
ZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3Qg
ZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5t
YXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49
IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50
U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHhPcmlnaW4gPSBzY2Fs
ZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAgIGlmICh4T3JpZ2luIDwgMCkgewot
ICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4T3JpZ2luID0gMDsKKyNpZiBVU0Uo
Q09SRV9JTUFHRSkKKyAgICBpZiAob3V0cHV0LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdN
b2RlOjpBY2NlbGVyYXRlZCkgeworICAgICAgICBpZiAoYXBwbHlDb3JlSW1hZ2UoaW5wdXRzLCBz
b3VyY2VJbWFnZSwgKnJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYo
KTsKICAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVu
ZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRT
aXplLndpZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOwotICAgIGlu
dCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHlEZXN0ID0gLXlP
cmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQgeUVuZCA9IHNjYWxl
ZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQot
ICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOwotCi0gICAgaW50IHNpemUg
PSAoeEVuZCAtIHhPcmlnaW4pICogNDsKLSAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNj
YWxlZFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFp
bnRTaXplLndpZHRoKCkgKiA0OwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0
aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAq
IDQ7Ci0gICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5
T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OwotCi0gICAg
d2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVs
LCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGlu
YXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0g
ICAgICAgICsreU9yaWdpbjsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBs
eWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShB
Q0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsK
LQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0
aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5
dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihz
b3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRo
ID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0
KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VQcmVt
dWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNl
Ci0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAg
ICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEo
KSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0
aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0g
ICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBh
bHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2Fz
dDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkg
KiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsK
LSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRp
cGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0
OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndp
ZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93
Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWln
aHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVVu
cHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0j
ZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7
Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5h
cmVhKCkgKiA0KS52YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0g
ZGVzdGluYXRpb24uZGF0YSgpOwotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsK
LSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBpZiAoYWxw
aGEpIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8
aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFd
KSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBz
dGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKLSAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKLSAgICAgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzJdID0gMDsKLSAgICAgICAgfQotICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0Nv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBQ
aXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdl
QnVmZmVyIHRvIHBlcmZvcm0gdGhlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3Nh
cnkuIFdlIGNhbiBkbyBpdCBkaXJlY3RseS4KLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0
KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7Ci0gICAgZGVzdGluYXRpb25SZWN0LnNj
YWxlKDEgLyBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUoZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0g
ICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVy
Ci0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2Zp
bHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVs
QnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBjb252ZXJ0SW1hZ2VCdWZmZXJU
b0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwgZGVzdGluYXRpb25SZWN0LCBw
aXhlbEJ1ZmZlci5mb3JtYXQoKS5hbHBoYUZvcm1hdCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXIm
IGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEFscGhhRm9ybWF0KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1v
cmUgZGlyZWN0bHkgdXNpbmcgUGl4ZWxCdWZmZXJDb252ZXJzaW9uLgotCi0gICAgRmxvYXRTaXpl
IGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKLQot
ICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNl
IGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgYXV0
byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2Zp
bHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIHRhcmdldENvbG9y
U3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJz
aW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVy
IHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZm
ZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IG91dHB1dEFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIHRhcmdldENvbG9yU3Bh
Y2UgfTsKLSAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQs
IHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVy
VG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIC8vIENvbnZlcnRzIHRo
ZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVyUmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5h
dGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJU
b0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAo
IWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0
ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsK
LX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGlu
YXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxC
dWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAg
Ly8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0
byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShj
b2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVy
LT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0
Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+
IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLSAgICAKLSAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJO
YW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8
PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAv
LyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAg
aWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVs
QnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAg
ICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29s
b3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFT
U0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xvclNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNw
YWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3Vs
dENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBt
X2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwg
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0
Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBp
eGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYg
KCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNp
emUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JT
cGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVs
QnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb3B5
SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9u
LCByZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNT
RVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0g
PDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNv
cHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1h
Z2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8
PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBm
cm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7
Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVy
VG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNv
bG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZm
ZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxC
dWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0p
OwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlu
cHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQo
IUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAg
IGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgICAgICAgICAg
QVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0g
bV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwot
ICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNv
cHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVj
dDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVy
RWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgp
LCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBp
cyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRl
UGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9h
dFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZp
bHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlw
bGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25l
IHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAg
QVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRl
UGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNp
emUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3Jt
YXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0Owot
fQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0
ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhp
cyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VS
VCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
OwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUo
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNp
emVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9y
ZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhl
bEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8v
IFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4g
ZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBj
b2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBp
bnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxz
Ci0gICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkg
IT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLSNlbHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xv
ciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BB
UkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19
Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgZGVzdGluYXRpb25Db2xvclNwYWNlKQotewotI2lmIFVTRShD
RykKLSAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRzIGludGVybmFsbHku
Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIGlm
ICghaGFzUmVzdWx0KCkgfHwgZGVzdGluYXRpb25Db2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JT
cGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlz
IHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5n
Ci0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11
bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVmZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29s
b3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNl
ID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6
bnVsbG9wdDsKICNlbmRpZgotfQogCi1UZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBkdW1wIHRoZSBz
dWJSZWdpb25zIG9mIHRoZSBmaWx0ZXIgcHJpbWl0aXZlcyBoZXJlIGxhdGVyLiBUaGlzIGlzbid0
Ci0gICAgLy8gcG9zc2libGUgYXQgdGhlIG1vbWVudCwgYmVjYXVzZSB3ZSBuZWVkIG1vcmUgZGV0
YWlsZWQgaW5mb3JtYXRpb25zIGZyb20gdGhlIHRhcmdldCBvYmplY3QuCi0gICAgCi0gICAgaWYg
KHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZykgewot
ICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEgaW1hZ2UiLCBtX2FscGhhSW1hZ2UpOwotICAgICAgICB0
cy5kdW1wUHJvcGVydHkoIm9wZXJhdGluZyBjb2xvcnNwYWNlIiwgbV9vcGVyYXRpbmdDb2xvclNw
YWNlKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJyZXN1bHQgY29sb3JzcGFjZSIsIG1fcmVz
dWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgIHRzIDw8ICJcbiIgPDwgaW5kZW50OwotICAgIH0KLSAg
ICByZXR1cm4gdHM7Ci19CisgICAgaWYgKGFwcGx5U29mdHdhcmUoaW5wdXRzLCBzb3VyY2VJbWFn
ZSwgKnJlc3VsdCkpCisgICAgICAgIHJldHVybiByZXN1bHQubGVha1JlZigpOwogCi1UZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRl
cikKLXsKLSAgICAvLyBVc2UgYSBuZXcgc3RyZWFtIGJlY2F1c2Ugd2Ugd2FudCBtdWx0aWxpbmUg
bW9kZSBmb3IgbG9nZ2luZyBmaWx0ZXJzLgotICAgIFRleHRTdHJlYW0gZmlsdGVyU3RyZWFtOwot
ICAgIGZpbHRlci5leHRlcm5hbFJlcHJlc2VudGF0aW9uKGZpbHRlclN0cmVhbSwgRmlsdGVyRWZm
ZWN0OjpSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZyk7Ci0gICAgCi0gICAgcmV0dXJuIHRz
IDw8IGZpbHRlclN0cmVhbS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IGJmYTg3N2NhYTNlNWY0MjEx
ZjczOWMxYmUzNzY3MDdkZjZlY2QyYTYuLmZiNWJlMWE5NDg1YmEwNWRiYzYwNzAwOGNiZmY4NTI0
NDQ1NmQyNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMjIsMzggKzIyLDE0IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkRl
c3RpbmF0aW9uQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCi0jaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rp
b24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIEZpbHRlcjsKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEltYWdlQnVmZmVyOwot
Ci10eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9y
OwotCi1lbnVtIEZpbHRlckVmZmVjdFR5cGUgewotICAgIEZpbHRlckVmZmVjdFR5cGVVbmtub3du
LAotICAgIEZpbHRlckVmZmVjdFR5cGVJbWFnZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlVGlsZSwK
LSAgICBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQKLX07CitjbGFzcyBGaWx0ZXJHZW9tZXRy
eTsKIAotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0
PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGlj
OgogICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBCbGVuZCwKQEAgLTY3
LDcgKzQzLDYgQEAgcHVibGljOgogICAgICAgICBGbG9vZCwKICAgICAgICAgR2F1c3NpYW5CbHVy
LAogICAgICAgICBJbWFnZSwKLSAgICAgICAgTGlnaHRpbmcsCiAgICAgICAgIE1lcmdlLAogICAg
ICAgICBNb3JwaG9sb2d5LAogICAgICAgICBPZmZzZXQsCkBAIC03NywxODIgKzUyLDIyIEBAIHB1
YmxpYzoKICAgICAgICAgU291cmNlQWxwaGEsCiAgICAgICAgIFNvdXJjZUdyYXBoaWMKICAgICB9
OwotICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdCgpOwotCi0gICAgdm9pZCBjbGVhclJlc3VsdCgp
OwotICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHVubXVs
dGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGlu
YXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5VW5tdWx0aXBs
aWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYs
IHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0g
ICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KLSAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZm
ZWN0KHVuc2lnbmVkKSBjb25zdDsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygp
IGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQotICAgIHVuc2lnbmVkIHRv
dGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdDsKLSAgICAKLSAgICBpbmxpbmUgYm9vbCBo
YXNSZXN1bHQoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBw
bGF0Zm9ybSBzcGVjaWZpYyBjaGVja3MsIGlmIHRoZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBk
b25lIGJ5IEZpbHRlckVmZmVjdC4KLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQK
LSAgICAgICAgICAgIHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQKLSAgICAgICAgICAgIHx8
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIH0KLQotICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICBJbnRSZWN0
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0JikgY29uc3Q7
Ci0gICAgCi0gICAgLy8gUmVjdXJzZXMgb24gaW5wdXRzLgotICAgIEZsb2F0UmVjdCBkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLQotICAgIC8vIFNvbGlkIGJsYWNrIGltYWdl
IHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVlcy4KLSAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYWxwaGFJbWFnZTsgfQotICAgIHZvaWQgc2V0SXNBbHBoYUltYWdlKGJv
b2wgYWxwaGFJbWFnZSkgeyBtX2FscGhhSW1hZ2UgPSBhbHBoYUltYWdlOyB9Ci0KLSAgICBJbnRS
ZWN0IGFic29sdXRlUGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVBhaW50UmVj
dDsgfQotICAgIHZvaWQgc2V0QWJzb2x1dGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgYWJzb2x1
dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IGFic29sdXRlUGFpbnRSZWN0OyB9
Ci0KLSAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4RWZm
ZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIG1h
eEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVjdDsgfSAKLQotICAg
IHZvaWQgYXBwbHkoKTsKLQotICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBu
ZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgotICAgIC8vIFRo
aXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIg
aW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMg
Y29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4KLSAgICB2
aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLQotICAgIHZpcnR1YWwgRmls
dGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3QgeyByZXR1cm4gRmlsdGVyRWZm
ZWN0VHlwZVVua25vd247IH0KLQotICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29u
c3QgeyByZXR1cm4gSW50T3V0c2V0cygpOyB9Ci0KLSAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0
aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2luZyB9OwotICAgIHZpcnR1YWwgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2Vu
dGF0aW9uVHlwZSA9IFJlcHJlc2VudGF0aW9uVHlwZTo6VGVzdE91dHB1dCkgY29uc3Q7Ci0KLSAg
ICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgU1ZHIHNwZWNpZmljIGFuZCB3aWxsIG1v
dmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgLy8gU2VlIGJ1ZyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU2MTQuCi0gICAgYm9vbCBo
YXNYKCkgY29uc3QgeyByZXR1cm4gbV9oYXNYOyB9Ci0gICAgdm9pZCBzZXRIYXNYKGJvb2wgdmFs
dWUpIHsgbV9oYXNYID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzWSgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzWTsgfQotICAgIHZvaWQgc2V0SGFzWShib29sIHZhbHVlKSB7IG1faGFzWSA9IHZhbHVl
OyB9Ci0KLSAgICBib29sIGhhc1dpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9oYXNXaWR0aDsgfQot
ICAgIHZvaWQgc2V0SGFzV2lkdGgoYm9vbCB2YWx1ZSkgeyBtX2hhc1dpZHRoID0gdmFsdWU7IH0K
LQotICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNIZWlnaHQ7IH0KLSAg
ICB2b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVlKSB7IG1faGFzSGVpZ2h0ID0gdmFsdWU7IH0K
LQotICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQotICAgIHZvaWQgc2V0RmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKSB7
IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9
Ci0KLSAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fZWZm
ZWN0Qm91bmRhcmllczsgfQotICAgIHZvaWQgc2V0RWZmZWN0Qm91bmRhcmllcyhjb25zdCBGbG9h
dFJlY3QmIGVmZmVjdEJvdW5kYXJpZXMpIHsgbV9lZmZlY3RCb3VuZGFyaWVzID0gZWZmZWN0Qm91
bmRhcmllczsgfQotICAgIAotICAgIHZvaWQgc2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24o
Y29uc3QgRmxvYXRSZWN0JiByKSB7IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gPSByOyB9
Ci0gICAgCi0gICAgRmxvYXRQb2ludCBtYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9h
dFBvaW50KSBjb25zdDsKLSAgICAKLSAgICBUeXBlIGZpbHRlckVmZmVjdENsYXNzVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlOyB9Ci0KLSAgICBGaWx0ZXImIGZp
bHRlcigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0gICAgY29uc3QgRmlsdGVyJiBmaWx0ZXIoKSBj
b25zdCB7IHJldHVybiBtX2ZpbHRlcjsgfQotCi0gICAgYm9vbCBjbGlwc1RvQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gbV9jbGlwc1RvQm91bmRzOyB9Ci0gICAgdm9pZCBzZXRDbGlwc1RvQm91bmRz
KGJvb2wgdmFsdWUpIHsgbV9jbGlwc1RvQm91bmRzID0gdmFsdWU7IH0KLQotICAgIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5nQ29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRpbmdD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX29w
ZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9Ci0gICAgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHRDb2xv
clNwYWNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fcmVzdWx0Q29sb3JTcGFjZSA9IGNv
bG9yU3BhY2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkgeyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOwotICAgIAotICAgIHN0YXRp
YyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFs
dWVzKQotICAgIHsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVl
cy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQo
dmFsdWVzW2ldKTsKLSAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Ci0gICAgfQotCi1w
cm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KEZpbHRlciYsIFR5cGUpOwotICAgIAogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKLQotICAgIEltYWdlQnVm
ZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLQotICAg
IC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5
IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCi0gICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQg
ZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KLSAgICB2aXJ0dWFsIGJvb2wgcmVx
dWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAv
LyBJZiBhIHByZS1tdWx0aXBsaWVkIGltYWdlLCBjaGVjayBldmVyeSBwaXhlbCBmb3IgdmFsaWRp
dHkgYW5kIGNvcnJlY3QgaWYgbmVjZXNzYXJ5LgotICAgIHZvaWQgZm9yY2VWYWxpZFByZU11bHRp
cGxpZWRQaXhlbHMoKTsKLQotICAgIHZvaWQgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci0KLXBy
aXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsKLQot
ICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0g
ICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBl
ZEFycmF5JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVy
VG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIFBpeGVsQnVmZmVyJiwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgSW50UmVjdCYpOwotICAgIGJvb2wgcmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydEltYWdl
QnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEltYWdlQnVm
ZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIHN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBQaXhlbEJ1ZmZlciYpOwogICAgIAorcHJvdGVjdGVk
OgorICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0OwogCi0gICAgRmlsdGVy
JiBtX2ZpbHRlcjsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7Ci0KLSAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIElu
dFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAgICAKLSAgICAvLyBUaGUgbWF4aW11bSBzaXpl
IG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZHIHRoaXMgaXMgdGhlIHByaW1pdGl2ZSBzdWJy
ZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAvLyBUaGUgYWJzb2x1dGUg
cGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmlnZ2VyIHRoYW4gbV9tYXhFZmZlY3RSZWN0Lgot
ICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7Ci0gICAgCi0gICAgLy8gVGhlIHN1YnJlZ2lv
biBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBTVkcgRmlsdGVyIHNwZWNp
ZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8gVGhpcyBpcyBTVkcgc3BlY2lm
aWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUu
Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOwotCi0gICAgLy8geCwg
eSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0dWFsIFNWR0ZFKkVsZW1lbnQuIElzIG5lZWRl
ZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBvZiB0aGUKLSAgICAvLyBmaWx0ZXIgcHJpbWl0
aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9hdFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOwor
ICAgIHZpcnR1YWwgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0ID0g
MDsKICAgICAKLSAgICAvLyBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gbWFwcGVkIHRvIGFic29s
dXRlIGNvb3JkaW5hdGVzIGJlZm9yZSBjbGlwcGluZy4KLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0
ZVVuY2xpcHBlZFN1YnJlZ2lvbjsKLQotICAgIGJvb2wgbV9hbHBoYUltYWdlIHsgZmFsc2UgfTsK
LSAgICBib29sIG1faGFzWCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1kgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9oYXNXaWR0aCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0hlaWdodCB7IGZh
bHNlIH07Ci0KLSAgICAvLyBTaG91bGQgdGhlIGVmZmVjdCBjbGlwIHRvIGl0cyBwcmltaXRpdmUg
cmVnaW9uLCBvciBleHBhbmQgdG8gdXNlIHRoZSBjb21iaW5lZCByZWdpb24gb2YgaXRzIGlucHV0
cy4KLSAgICBib29sIG1fY2xpcHNUb0JvdW5kcyB7IHRydWUgfTsKLQotI2lmIEVOQUJMRShERVNU
SU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJT
UkdCKCkgfTsKLSNlbHNlCi0gICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29s
b3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07CisjaWYgVVNFKENPUkVf
SU1BR0UpCisgICAgdmlydHVhbCBib29sIGFwcGx5Q29yZUltYWdlKGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICNlbmRpZgotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3Bh
Y2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5
cGUgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7CisKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5UGxh
dGZvcm0oRmlsdGVyT3V0cHV0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Q7CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZm
ZWN0Jik7Cit1c2luZyBGaWx0ZXJFZmZlY3RWZWN0b3IgPSBWZWN0b3I8UmVmPEZpbHRlckVmZmVj
dD4+OwordXNpbmcgRmlsdGVyRWZmZWN0c0lucHV0cyA9IEhhc2hNYXA8UmVmPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDlkYTg1NWNkYjk2MzE3YjgyZGUzNTY3ZmMzMWU1YjllOWE5ZWM2MDUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0q
IGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgotCi0jaWYgVVNF
KENPUkVfSU1BR0UpCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJF
ZmZlY3RSZW5kZXJlcj4gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShib29sIGFjY2Vs
ZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCwgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQot
ewotI2lmIFVTRShDT1JFX0lNQUdFKQotICAgIGlmIChhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmlu
Z0VuYWJsZWQpCi0gICAgICAgIHJldHVybiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
dHJ5Q3JlYXRlKGxhc3RFZmZlY3QpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYWNjZWxlcmF0
ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKTsKLSAgICBVTlVTRURfUEFSQU0obGFzdEVmZmVjdCk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotCi19IC8vIG5hbXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNTZiZTI0NzM2MWY1M2IzYzA5ZWNiNTcxMzIyYjc1YTc1NzNlOWNjNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw1MiArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBt
ZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0q
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0q
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNp
bmNsdWRlICJTZXR0aW5ncy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZpbHRl
ckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAKLXB1
YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiB0
cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5RWZm
ZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc1Jlc3VsdCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlc3VsdCgpID0gMDsKLSAgICAKLSAgICB2aXJ0
dWFsIH5GaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLSAgICAKLXByb3RlY3RlZDoK
LSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSA9IDA7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY2ZjFiMzNiYWVkN2Rm
MDhmMDQ1MmM2YzRhYjRhOTdjNWRjYzMwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApAQCAtMCwwICsx
LDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyUmVwcmVzZW50YXRpb24uaCIKKyNpbmNsdWRl
ICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOwor
fQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5OworY2xhc3Mg
RmlsdGVyT3V0cHV0OworCitjbGFzcyBGaWx0ZXJGdW5jdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVk
PEZpbHRlckZ1bmN0aW9uPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24o
KSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsg
cmV0dXJuIHsgfTsgfQorCisgICAgdmlydHVhbCBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91
dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSkgY29uc3QgPSAwOworICAgIAorICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uID0g
RmlsdGVyUmVwcmVzZW50YXRpb246OlRlc3RPdXRwdXQpIGNvbnN0ID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTMyN2Nj
MmY0YjNlZjgxNDE3NjU0MWQ5M2NiNjE2MGNkMzc0ZGY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuY3Bw
CkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyR2VvbWV0cnk6OkZpbHRlckdlb21ldHJ5
KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCkKKyAgICA6IG1fZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKKyAgICAsIG1fc291
cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCkKK3sKK30KKworRmxvYXRSZWN0IEZpbHRlckdl
b21ldHJ5OjptYXhEcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBG
bG9hdFJlY3QmIGRyYXdpbmdSZWN0KSBjb25zdAoreworICAgIHJldHVybiBkcmF3aW5nUmVjdDsK
Ky8vICAgICAgICBhdXRvIG1heERyYXdpbmdSZWN0ID0gZHJhd2luZ1JlY3Q7CisvLyAgICAgICAg
bWF4RHJhd2luZ1JlY3QuaW50ZXJzZWN0KG1heFByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpKTsK
Ky8vICAgICAgICByZXR1cm4gbWF4RHJhd2luZ1JlY3Q7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJH
ZW9tZXRyeTo6cHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzKSBjb25zdAoreworICAgIGlmIChpbnB1dHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZmlsdGVyUmVnaW9uKCk7CisKKyAgICBGbG9hdFJlY3Qgc3VicmVnaW9uOworICAgIGZvciAoYXV0
byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIHN1YnJlZ2lvbi51bml0ZShpbnB1dC0+cHJpbWl0
aXZlU3VicmVnaW9uKCkpOworCisgICAgcmV0dXJuIHN1YnJlZ2lvbjsKK30KKworRmxvYXRSZWN0
IEZpbHRlckdlb21ldHJ5OjptYXhQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiBpbnB1dHMpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHN1YnJlZ2lvbiA9IHByaW1p
dGl2ZVN1YnJlZ2lvbihpbnB1dHMpOworICAgIHN1YnJlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyUmVn
aW9uKCkpOworICAgIHJldHVybiBzdWJyZWdpb247Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVu
Y29kZXI+IHZvaWQgRmlsdGVyR2VvbWV0cnk6OmVuY29kZShFbmNvZGVyJikgY29uc3QKK3sKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxzdGQ6OnVuaXF1ZV9w
dHI8RmlsdGVyR2VvbWV0cnk+PiBGaWx0ZXJHZW9tZXRyeTo6ZGVjb2RlKERlY29kZXImKQorewor
ICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnku
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0
cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yMzMzMzM4OWE2ZmZmZDQzMTZiOGFmODUyNDc0YWJiNmMwNGE3OWY3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJHZW9tZXRyeS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJG
aWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJHZW9t
ZXRyeSB7CitwdWJsaWM6CisgICAgRmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0
ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KTsKKyAgICB2aXJ0dWFs
IH5GaWx0ZXJHZW9tZXRyeSgpID0gZGVmYXVsdDsKKworICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdp
b24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorICAgIEZsb2F0UmVjdCBzb3Vy
Y2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUltYWdlUmVjdDsgfQorCisgICAg
dmlydHVhbCBGbG9hdFJlY3QgcHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYgaW5wdXRzKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCB0cmFuc2Zvcm1Ub0Fi
c29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0IHsgcmV0dXJuIHJlY3Q7IH0K
KworICAgIEZsb2F0UmVjdCBtYXhEcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
LCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0KSBjb25zdDsKKyAgICBGbG9hdFJlY3QgbWF4
UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25z
dDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+PiBkZWNvZGUoRGVjb2RlciYpOwor
Citwcm90ZWN0ZWQ6CisgICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOworICAgIEZsb2F0UmVj
dCBtX3NvdXJjZUltYWdlUmVjdDsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck91dHB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlck91dHB1dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNkNzdlYTVmMDUxZTg0NWE5MzFlYmFjMmJhZmQ5
MWY5YjM2YTZjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5
LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
RmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQoc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5
PiYmIGdlb21ldHJ5LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCisgICAgOiBtX2dlb21l
dHJ5KFdURk1vdmUoZ2VvbWV0cnkpKQorICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01v
ZGUpCit7Cit9CisKK1JlZlB0cjxGaWx0ZXJSZXN1bHQ+IEZpbHRlck91dHB1dDo6Y3JlYXRlRmls
dGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQoreworICAgIHJldHVybiBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZSgqbV9n
ZW9tZXRyeSwgZHJhd2luZ1JlY3QsIG1fcmVuZGVyaW5nTW9kZSwgMSwgY29sb3JTcGFjZSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxZThj
ZmYxNzNiMDRlOTkzOTJhYjI3ZTE0MjJhY2I0YmY1MjM5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5oCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJH
ZW9tZXRyeTsKK2NsYXNzIEZpbHRlclJlc3VsdDsKK2NsYXNzIEZpbHRlckZ1bmN0aW9uOworCitj
bGFzcyBGaWx0ZXJPdXRwdXQgeworcHVibGljOgorICAgIHVzaW5nIFJlc3VsdHMgPSBIYXNoTWFw
PFJlZjxjb25zdCBGaWx0ZXJGdW5jdGlvbj4sIFJlZjxGaWx0ZXJSZXN1bHQ+PjsKKworICAgIEZp
bHRlck91dHB1dChzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYsIFJlbmRlcmluZ01v
ZGUpOworCisgICAgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KCkgeyByZXR1cm4gKm1fZ2VvbWV0
cnk7IH0KKyAgICBSZXN1bHRzJiByZXN1bHRzKCkgeyByZXR1cm4gbV9yZXN1bHRzOyB9CisgICAg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdN
b2RlOyB9CisKKyAgICBSZWZQdHI8RmlsdGVyUmVzdWx0PiBjcmVhdGVGaWx0ZXJSZXN1bHQoY29u
c3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworcHJp
dmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+IG1fZ2VvbWV0cnk7Cisg
ICAgUmVzdWx0cyBtX3Jlc3VsdHM7CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlZmVyZW5jZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZWZlcmVuY2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hMDNhNWFiNzRjMDk0MGVmOGFhZTJmOWNlZTliNzVlMmYxZDA2NWFlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZWZlcmVuY2UuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZpbHRlcjsKKwordXNpbmcgRmlsdGVyUmVmZXJlbmNlID0gUmVmPEZpbHRlcj47CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVzZW50YXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVzZW50YXRpb24uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ZGJmZjdkODA0N2NlZjllZjYzYTM2ZWNjMzVlNWU5YjIwMTFjZWU3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJSZXByZXNlbnRhdGlvbi5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitlbnVtIGNsYXNzIEZpbHRlclJlcHJlc2VudGF0aW9uIDogdWludDhfdCB7CisgICAg
VGVzdE91dHB1dCwKKyAgICBEZWJ1Z2dpbmcKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyUmVzdWx0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWRlMjJlZGI5NzViMGFiMDBmZTlhZDYzMDQ4
N2Q4ZjZkNGUyZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwCkBAIC0wLDAgKzEsMzk3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21l
dHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2UuaCIKKyNlbmRpZgorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2lu
Y2x1ZGUgPGFybV9uZW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUmVmUHRyPEZpbHRlclJlc3VsdD4gRmlsdGVyUmVzdWx0OjpjcmVhdGUoY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRp
b25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKGRyYXdpbmdSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhnZW9tZXRyeS50cmFuc2Zvcm1Ub0Fic29sdXRlUmVjdChkcmF3aW5n
UmVjdCkuc2l6ZSgpKSk7CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01v
ZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZpbHRlclJlc3VsdENvcmVJbWFnZShnZW9tZXRyeSwgZHJhd2luZ1JlY3QsIHJlbmRl
cmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkpOworI2VuZGlmCisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVyUmVzdWx0U29mdHdhcmUoZ2VvbWV0cnksIGRyYXdpbmdS
ZWN0LCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpKTsKK30KKwor
RmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQoY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5
LCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3Bh
Y2UpCisgICAgOiBtX2dlb21ldHJ5KGdlb21ldHJ5KQorICAgICwgbV9kcmF3aW5nUmVjdChkcmF3
aW5nUmVjdCkKKyAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9y
ZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9y
U3BhY2UpCit7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJSZXN1bHQ6OmFic29sdXRlRHJhd2luZ1Jl
Y3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2dlb21ldHJ5LnRyYW5zZm9ybVRvQWJzb2x1dGVS
ZWN0KG1fZHJhd2luZ1JlY3QpOworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxF
UkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAg
ICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsK
KyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9
IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNl
LmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlu
cHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwor
ICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlUHJlbXVsdGlw
bHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAg
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29u
c3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0
KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3Rp
bmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAg
ICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFs
cGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0
PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAq
IGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwor
ICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0Uo
QUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7
CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lk
dGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dC
eXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0
aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdo
dCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlVW5w
cmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNl
bHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsK
KyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFy
ZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50
ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQp
IHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBpZiAo
YWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nh
c3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50
WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0g
PSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAgICAgICAgfQorICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3Rk
OjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0
cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIHJldHVybiBhbHBo
YUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgPyBtX3Vu
cHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyIDogbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9
CisKK1BpeGVsQnVmZmVyKiBGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgYXV0byYgcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1
ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KTsKKyAgICBpZiAocGl4ZWxCdWZmZXIpCisgICAgICAg
IHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZv
cm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fY29sb3JTcGFjZSB9Owor
ICAgIGF1dG8gbG9naWNhbFNpemUgPSBhYnNvbHV0ZURyYXdpbmdSZWN0KCkuc2l6ZSgpOworCisg
ICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAg
ICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IElu
dFBvaW50KCksIEludFNpemUobG9naWNhbFNpemUpIH0pOworICAgICAgICBpZiAoIXBpeGVsQnVm
ZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmcGl4ZWxC
dWZmZXIudmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzY2FsZWRTaXplKGxvZ2lj
YWxTaXplKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2Fs
ZWRTaXplKSk7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAg
ICBwaXhlbEJ1ZmZlciA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBzY2FsZWRTaXpl
KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCkpCisgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZF
eGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCBw
aXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXplKTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZl
cklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAg
ICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCktPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEo
KSwgc2NhbGVkU2l6ZSk7CisKKyAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisK
K1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyUmVzdWx0OjpnZXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBz
dGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJ
bnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKKworICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFy
ZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxv
d2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1dG8gcGl4ZWxCdWZm
ZXIgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJl
YSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBjb3B5UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JT
cGFjZSk7CisgICAgcmV0dXJuIHBpeGVsQnVmZmVyOworfQorCitib29sIEZpbHRlclJlc3VsdDo6
cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVz
dGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKSBjb25zdAoreworI2lmIFVTRShDRykKKyAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9m
IGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0
cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0
aGUgaW5wdXQKKyAgICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBp
eGVscworICAgIHJldHVybiBjb2xvclNwYWNlICYmIG1fY29sb3JTcGFjZSAhPSAqY29sb3JTcGFj
ZTsKKyNlbHNlCisgICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5v
dCBuZWVkZWQgb24gbm9uLUNHCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIEZpbHRlclJlc3VsdDo6Y29weUltYWdlQnl0
ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3Qgc2Nh
bGVkUmVjdChyZWN0KTsKKyAgICBzY2FsZWRSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
KworICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKGFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXpl
KCkpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAg
ICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYg
bm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC54
KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXpl
LmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5h
dGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBu
b3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkg
PD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5o
ZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0
LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAgIGlmICh4T3JpZ2luIDwgMCkgeworICAgICAg
ICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50
IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKKyAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6
ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7CisKKyAg
ICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOworICAgIGludCB5RGVzdCA9IDA7CisgICAg
aWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlEZXN0ID0gLXlPcmlnaW47CisgICAgICAgIHlP
cmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOworICAg
IGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICB5RW5kID0gc2Nh
bGVkUGFpbnRTaXplLmhlaWdodCgpOworCisgICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4p
ICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAq
IDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0
OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAo
KHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWlu
dDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFp
bnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OworCisgICAgd2hpbGUgKHlPcmlnaW4gPCB5
RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6
ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKKyAg
ICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7CisgICAgICAgICsreU9yaWdpbjsK
KyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlclJlc3VsdDo6Z2V0
Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOworICAgIC8vIENyZWF0
ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXpl
IENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCisgICAgYXV0byBjb252ZXJ0ZWRJ
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOworICAgIGlmICghY29udmVydGVkSW1hZ2VCdWZmZXIpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gQ29sb3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5z
IGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVy
CisgICAgY29udmVydGVkSW1hZ2VCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1h
Z2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9y
bWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9yU3BhY2UgfTsKKyAgICByZXR1cm4gY29udmVy
dGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7Cit9CisKK3N0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlclJlc3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZm
ZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhh
Rm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBJ
bnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKKyAgICByZWN0LnNj
YWxlKDEgLyBtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0g
SW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKworICAgIC8vIENyZWF0ZSBh
biBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgorICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIs
IHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIs
IGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6
OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHN0ZDo6
b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIGF1dG8q
IHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkgPyAmcGl4ZWxC
dWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFsdWUoKSA6IG51bGxwdHI7CisKKyAgICBpZiAo
IXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFj
ZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgICAgIC8vIFdlIHByZWZlciBhIGNv
bnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgorICAgICAgICAgICAgaWYgKGF1dG8gaW1h
Z2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgICAgICAgICBJbnRS
ZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKGFic29sdXRlRHJhd2luZ1JlY3Qo
KS5zaXplKCkpIH07CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZm
ZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCBy
ZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNv
bnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBw
aXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVyKGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAg
ICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlm
IChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKnBp
eGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAgY29weUlt
YWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1Jl
Y3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdlQnl0ZXMocGl4ZWxC
dWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworfQorCit2b2lkIEZpbHRlclJl
c3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCit7CisgICAgLy8gTXVzdCBv
cGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhh
dmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhDbGFtcGVkQXJyYXkmIGltYWdlQXJyYXkgPSBt
X3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIHVpbnQ4X3QqIHBpeGVsRGF0
YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VB
cnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhl
bCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0
KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgaWYgKHBpeGVsQXJyYXlM
ZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsg
KHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8v
IEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4NF90IHNp
eHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgc2l4dGVlblBp
eGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVs
cy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChz
aXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAg
c2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4
dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0
ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKKyAgICAgICAgfSB3aGls
ZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKworICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9
IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3Ro
IC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBh
bmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5CisgICAgd2hpbGUgKC0t
bnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEg
cGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKKyAgICAgICAgLy8g
Q2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxv
Y2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgICAg
ICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7Cisg
ICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbmNyZW1lbnQg
Zm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwordm9pZCBGaWx0ZXJS
ZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JT
cGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1
c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyNlbHNl
CisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9jb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3Nhcnkg
SW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKKyAgICAvLyBjb2xvciBzcGFjZSB0cmFu
c2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCisgICAgaWYg
KGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFnZUJ1ZmZlcigpKQorICAgICAgICBpbWFnZUJ1
ZmZlci0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UsIGNvbG9yU3BhY2UpOworCisg
ICAgbV9jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVsdGlwbGllZFBpeGVs
QnVmZmVyID0gc3RkOjpudWxsb3B0OworICAgIG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0g
c3RkOjpudWxsb3B0OworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVz
dWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJl
c3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI1YjlkYTkxNTIzYTY4OGM0MmY2M2QyNWRhN2MzOGM5Y2UwMzMz
M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlc3VsdC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVsQnVmZmVyOworCitjbGFzcyBGaWx0ZXJSZXN1bHQg
OiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJSZXN1bHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmUHRyPEZpbHRlclJlc3VsdD4gY3JlYXRlKGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3Qg
RmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOworCisgICAgdmlydHVhbCB+RmlsdGVyUmVzdWx0
KCkgPSBkZWZhdWx0OworICAgIAorICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZHJhd2luZ1JlY3Q7IH0KKyAgICBGbG9hdFJlY3QgYWJzb2x1dGVEcmF3aW5nUmVj
dCgpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9CisgICAgCisgICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisgICAgCisg
ICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KKyAg
ICB2b2lkIHNldElzQWxwaGFJbWFnZShib29sIGFscGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0g
YWxwaGFJbWFnZTsgfQorCisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1
ZmZlcklmRXhpc3RzKCkgPSAwOworICAgIHZpcnR1YWwgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVy
KCkgPSAwOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZF
eGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0
Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsK
KyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIAorICAgIHZvaWQgY29y
cmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKK3Byb3RlY3RlZDoKKyAgICBGaWx0ZXJS
ZXN1bHQoY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0
LCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSk7CisKKyAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pIGNvbnN0OworICAgIHZvaWQg
Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xv
clNwYWNlKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0
ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgbV9wcmltaXRpdmVTdWJy
ZWdpb247CisgICAgYm9vbCBtX2FscGhhSW1hZ2UgeyBmYWxzZSB9OworICAgIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBtX2dlb21ldHJ5OworCisgICAgRmxvYXRSZWN0IG1fZHJhd2luZ1JlY3Q7Cisg
ICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9u
U2NhbGU7CisgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fY29sb3JTcGFjZTsKKworICAgIHN0
ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cisg
ICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7
Cit9OworCit1c2luZyBGaWx0ZXJSZXN1bHRWZWN0b3IgPSBWZWN0b3I8UmVmPEZpbHRlclJlc3Vs
dD4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApp
bmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2YTc1MDM4NzkxMjhmNTRiNDRiLi40YmM2YmM3MWM4
NWRmYjFhZTM5MWRlYjI0M2RjODE0NTc1ZGIwYzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5j
cHAKQEAgLTM2LDEyICszNiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgUG9p
bnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRl
ckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50
aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKQogewotICAgIG1fYnVm
ZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVm
ZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOwotICAgIC8vIFRvIHNjYWxlIFosIG1hcCBh
IHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9u
IGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJv
bVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFj
ZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7Ci0gICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOworLy8gICAg
bV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNl
VG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBa
LCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRp
cmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1h
cFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBt
X3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAg
ICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngo
KSk7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBQb2ludExpZ2h0U291
cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXgg
NzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkwOTBhZDZjZjNhMy4uMWUwNjlmOTI2YTgwM2Zj
YzJjMTQ2OTZjZmFlNmIyNTUzNTEwODlkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDE5ICsyMSwxNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxTb3VyY2VBbHBoYT4g
U291cmNlQWxwaGE6OmNyZWF0ZShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKK1JlZjxTb3Vy
Y2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U291cmNlQWxwaGEoKSk7CiB9CiAKIGNvbnN0IEF0b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZl
Y3ROYW1lKCkKQEAgLTQxLDM5ICszOSwyMSBAQCBjb25zdCBBdG9tU3RyaW5nJiBTb3VyY2VBbHBo
YTo6ZWZmZWN0TmFtZSgpCiAgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3Vy
Y2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmlsdGVyUmVzdWx0KiBTb3Vy
Y2VBbHBoYTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYg
c3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVm
ZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci19Ci0KLXZvaWQgU291cmNlQWxwaGE6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAg
ICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBp
biA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBp
bnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVy
KQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMo
KS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEZsb2F0UmVj
dCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpibGFjayk7Ci0gICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBJbnRQb2ludCgpLCBD
b21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZv
cm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCi1UZXh0U3RyZWFtJiBTb3VyY2VBbHBo
YTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25U
eXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNlQWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW1NvdXJjZUFscGhhXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVNv
dXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6
IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3QuZmlsdGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQot
ewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQy
ZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4uY2NkMWRiZjRmZWVjNTBlNWRhN2Y5OTUxZThhN2Iz
ZGM2NTNhNmIwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMTcsOCArMTgsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAg
Ki8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0jZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKQEAgLTI2LDIxICsyNiwyMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRl
ckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBj
cmVhdGUoRmlsdGVyRWZmZWN0Jik7CisgICAgc3RhdGljIFJlZjxTb3VyY2VBbHBoYT4gY3JlYXRl
KCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOwogCiBwcml2
YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRl
ckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZp
bHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQorICAgIHVzaW5nIEZpbHRlckVmZmVjdDo6Rmls
dGVyRWZmZWN0OwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJy
aWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZpbHRl
clJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywg
SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgYXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFNvdXJjZUFscGhhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4
IDg4YTM2YTQxMDI2YmQzYTU4NTQ0NzgyMDI3NGMxMTA3ZDc4MzkyZTkuLjRlMTdkZWZlODQyYjBi
ZjlhZDJjODExNTcyNTk1ZDYyZTE4MTVhOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTggKzIxLDE2IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgogCi0jaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0
cHV0LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBo
aWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFw
aGljOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMo
ZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3JhcGhpYygpKTsKIH0K
IAogY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCkBAIC00MCwy
NyArMzksMjAgQEAgY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgp
CiAgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgU291cmNlR3JhcGhpYzo6ZHJhd2lu
Z1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0g
ICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBw
YWludFJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIu
ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgIHJldHVybiBnZW9tZXRyeS5zb3VyY2VJ
bWFnZVJlY3QoKTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQorRmlsdGVyUmVzdWx0KiBTb3VyY2VHcmFwaGljOjphcHBseShGaWx0ZXJPdXRwdXQmIG91
dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25z
dAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisgICAgaWYgKGF1dG8g
cmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJj
ZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpz
b3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0
LCB7IH0sIHNvdXJjZUltYWdlKTsKIH0KIAotVGV4dFN0cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBj
b25zdAorVGV4dFN0cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwg
aW5kZW50IDw8ICJbU291cmNlR3JhcGhpY11cbiI7CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuaAppbmRleCAzMGNkNTRmMjQ1M2JiYThhMzc3NjMyMTMyOGVmMjEwNmI3ZmNhNWJmLi4xMzVj
N2MwNzQyNzdjMWM4YWY2MDU3YTljZjk1Mjk0OWIzNTU1Njk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApA
QCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxw
b3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE4LDQxICsx
OSwzNCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBT
b3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNlR3JhcGhpY19oCisjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdyYXBoaWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRl
KEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKCk7CiAKICAg
ICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAg
IFNvdXJjZUdyYXBoaWMoRmlsdGVyJiBmaWx0ZXIpCi0gICAgICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6U291cmNlR3JhcGhpYykKLSAgICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0Nv
bG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgIH0KKyAgICB1c2lu
ZyBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdDsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291cmNlR3JhcGhpYyI7IH0KIAotICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQotfTsKKyAgICBGaWx0ZXJSZXN1
bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLX0gLy9uYW1lc3BhY2UgV2Vi
Q29yZQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVy
cmlkZTsKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VHcmFw
aGljKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Qm
IGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzsgfQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQorI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGJvb2wgYXBwbHlDb3JlSW1h
Z2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKIAorICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7Cit9OwogCi0jZW5kaWYgLy8gU291cmNl
R3JhcGhpY19oCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAK
aW5kZXggNzE2MDdhYjAwZmY5ZDZhNmQwMTY5MWQ5YmJiODU1M2QxZjM0OGQwMC4uZDFiZWMxMjAy
MDZhNTM2ZTEwYjEwYmYyYzExMzBmNGYzNDJiYmExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNw
cApAQCAtNDEsMzYgKzQxLDM2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGFjY29yZGluZyB0
byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNzaW9uIHRlc3RzCiBzdGF0aWMgY29uc3QgZmxv
YXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjpp
bml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdE
YXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
bV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9p
bnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkg
ei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9z
aXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0
aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAg
cGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3Vz
ZXJTcGFjZVBvc2l0aW9uOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFs
aXplKCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRp
bmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25l
RnVsbExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZs
b2F0IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYg
KGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xl
ID0gLWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5
MC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBh
aW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRp
bmdDb25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWlu
dGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0g
ICAgLy8gT3B0aW1pemF0aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAg
ICBpZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFy
RXhwb25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQot
ICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJ
dCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFy
RXhwb25lbnQgPSAyOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3Qu
bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7
CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFj
ZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBw
ZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2Vy
U3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQ
b3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkg
LSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisvLworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlv
blZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOworLy8g
ICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rvci5ub3JtYWxpemUoKTsKKy8vCisvLyAgICBp
ZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1
dE9mZkxpbWl0ID0gMC4wZjsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9
IC1hbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0gZWxzZSB7CisvLyAgICAgICAgZmxvYXQgbGlt
aXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1p
dGluZ0NvbmVBbmdsZSA8IDAuMGYpCisvLyAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0g
LWxpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA+IDkw
LjBmKQorLy8gICAgICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSA9IDkwLjBmOworLy8gICAgICAg
IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGlt
aXRpbmdDb25lQW5nbGUpKTsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9
IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAg
IH0KKy8vCisvLyAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50
IHZhbHVlcworLy8gICAgaWYgKCFtX3NwZWN1bGFyRXhwb25lbnQpCisvLyAgICAgICAgcGFpbnRp
bmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOworLy8gICAgZWxzZSBpZiAobV9zcGVjdWxhckV4
cG9uZW50ID09IDEuMGYpCisvLyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQg
PSAxOworLy8gICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKKy8vICAgICAg
ICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDI7CiB9CiAKIExpZ2h0U291cmNlOjpD
b21wdXRlZExpZ2h0aW5nRGF0YSBTcG90TGlnaHRTb3VyY2U6OmNvbXB1dGVQaXhlbExpZ2h0aW5n
RGF0YShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9h
dCB6KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjM2NjNlZjFhNGU4YjkyNWQ3ZDEyY2NiZDkwOWJkYzAyOTM2MDZjNjYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZFQmxlbmQuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmQ6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMik7CisgICAgYXV0byYgaW4gPSBp
bnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW4yID0gaW5wdXRzWzFdLmdldCgpOworCisgICAg
YXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgYXV0byBpbWFnZUJ1ZmZl
cjIgPSBpbjIuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1
ZmZlcjIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBy
ZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKy8vICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3Vs
dEltYWdlLT5jb250ZXh0KCk7CisvLyAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOworLy8gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwg
eyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xv
ck1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWI0OTkwMWU3YTMyZWM4ODVhMDQ2YjRk
M2VmMzBjNDgzNmQyMzU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCkBA
IC0wLDAgKzEsMjk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRkVDb2xvck1hdHJpeC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisj
aWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0
b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0g
Z3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisgICAgZmxvYXQgYSA9IGFscGhhOworCisgICAg
cmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJdICog
YiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKKyAgICBncmVlbiAgID0gdmFs
dWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4
XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OworICAgIGJsdWUgICAgPSB2YWx1ZXNbMTBdICogciAr
IHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNdICogYSArIHZhbHVl
c1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsgdmFsdWVzWzE2XSAq
IGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1NTsK
K30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQm
IGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMpCit7CisgICAgZmxv
YXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisK
KyAgICByZWQgICAgID0gciAqIGNvbXBvbmVudHNbMF0gKyBnICogY29tcG9uZW50c1sxXSArIGIg
KiBjb21wb25lbnRzWzJdOworICAgIGdyZWVuICAgPSByICogY29tcG9uZW50c1szXSArIGcgKiBj
b21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVudHNbNV07CisgICAgYmx1ZSAgICA9IHIgKiBjb21w
b25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNbN10gKyBiICogY29tcG9uZW50c1s4XTsKK30KKwor
Ly8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4g
Q29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9h
dCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEpCit7CisgICAgYWxwaGEgPSAwLjIx
MjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAuMDcyMSAqIGJsdWU7CisgICAgcmVkID0gMDsK
KyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9IDA7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkK
K3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgorYm9vbCBlZmZlY3RBcHBseUFj
Y2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8Zmxv
YXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNbOV0sIEludFNpemUgYnVmZmVyU2l6ZSkKK3sK
KyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQp
OworICAgIAorICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgp
IHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQg
bWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0
cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24t
dkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2YWx1ZXNbNF0gfHwgdmFsdWVzWzldIHx8IHZhbHVl
c1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7CisgICAgdWludDhfdCogZGF0YSA9IHBp
eGVsQXJyYXkuZGF0YSgpOworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRo
ID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBidWZmZXJTaXplLmhlaWdo
dCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAgc3Jj
LmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0Lndp
ZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5o
ZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAg
ICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0
cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAorCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2
aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sx
MV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSks
CisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICog
ZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVl
c1sgOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAorICAgICAgICB9OworICAgICAgICB2
SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29y
LCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJp
eFs0ICogNF0gPSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29t
cG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50
c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAor
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1syXSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21w
b25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBk
aXZpc29yLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4
OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdl
Tm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQg
KiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZpc29y
KSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjcxNTQgKiBkaXZpc29yKSks
CisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjA3MjEgKiBkaXZpc29yKSksCisK
KyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAg
ICAgIDAsCisgICAgICAgIH07CisgICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4
KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VO
b0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4K
K3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVj
dG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1ZmZlclNpemUpCit7CisgICAgZmxvYXQgY29t
cG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9T
QVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25l
bnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisgICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBG
RUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQorICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxj
dWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisKKyAgICB1
bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKKworI2lmIFVT
RShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+
KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJl
dHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOworI2VuZGlmCisKKyAg
ICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRS
SVg6CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRl
T2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAg
ICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAg
ICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsg
MSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCArIDIpOworICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgICAgICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZz
ZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAx
LCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAy
LCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMs
IGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFU
RToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVP
ZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAg
ICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAg
ICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAx
KTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zm
c2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwg
Z3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4
ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRl
T2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRl
T2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgorICAgICAgICBmb3IgKHVuc2ln
bmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5n
dGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQg
Ymx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAg
IGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAg
ICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVs
QXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVs
QXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOworICAgICAgICAgICAgcGl4ZWxB
cnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworYm9vbCBGRUNvbG9yTWF0cml4OjphcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3Vs
dCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAg
IGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGlu
LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7Cisg
ICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBGbG9h
dFJlY3QgZHJhd2luZ1JlY3QgPSB7IHsgfSwgaW4uYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUo
KSB9OworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlciwgZHJhd2luZ1JlY3QpOworICAgIAorICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJH
QkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OworICAgIAorICAgIEludFJlY3Qg
aW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBh
dXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1h
Z2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8g
cGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOworCisgICAgVmVjdG9y
PGZsb2F0PiB2YWx1ZXMgPSBtX3ZhbHVlczsKKworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JN
QVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lv
bnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFU
RToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVs
QXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAgIGVmZmVjdFR5cGU8
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFy
cmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9U
WVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVu
c2lvbnMpOworICAgICAgICByZXN1bHQuc2V0SXNBbHBoYUltYWdlKHRydWUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVm
ZmVyLCBpbWFnZVJlY3QpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFu
c2ZlclNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTNmMmRkZGJkNWZlNDkxMDE0MGMwZWM4ODBj
MTQ2NDFiYWQ1YWQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3Bw
CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25z
dAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
Zjg2ZmNjNTZmMzM0MThlY2I1MDMxN2NiYzBlYTM1MGRhNjY2ZGE1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvc2l0ZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRUNvbXBvc2l0ZTo6YXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iNzA5YjMzNGMyYmQ1OGI5YWU0ODg0OTA0NWZhZDc5YmFjZjBjY2M0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVy
Y3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUNvbnZvbHZl
TWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRUNvbnZvbHZlTWF0cml4
OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwg
RmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfTsgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2Vt
ZW50TWFwU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjYjM0MWYwZTU3NmRmM2JkMTM2ZjZhMWM3
N2UzZWEyOTAyMGJhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3Bw
CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVE
cm9wU2hhZG93U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzE2
ZmNmYjlmYjllNTZhNGMwZDRkYTg3OTZhNmQ0ZTNlYWRjYThlNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9w
U2hhZG93U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCisKKyNpbmNsdWRlICJG
RUdhdXNzaWFuQmx1ci5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFRHJvcFNoYWRvdzo6YXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqLCBGaWx0
ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAx
KTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZm
ZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIo
KTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKy8vICAg
IEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisvLworLy8gICAgRmxvYXRTaXplIGJs
dXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fc3RkWCwg
bV9zdGRZIH0pOworLy8gICAgYmx1clJhZGl1cy5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7
CisvLyAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fZHgsIG1fZHkgfSk7CisvLworLy8gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKy8vICAg
IEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKKy8vICAg
IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKKy8vCisvLyAgICBHcmFwaGlj
c0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworLy8gICAg
cmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRvd09wYWNpdHkpOworLy8gICAgcmVzdWx0Q29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNl
dCk7CisvLyAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOworLy8KKy8vICAgIFNoYWRvd0Js
dXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOworLy8K
Ky8vICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07
CisvLyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2lj
YWxTaXplKCkpOworLy8gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhl
bEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOworLy8gICAgaWYgKCFwaXhlbEJ1ZmZlcikKKy8v
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKy8vCisvLyAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5
ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKy8vICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1h
Z2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhl
bEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworLy8KKy8vICAgIHJlc3VsdEltYWdlLT5wdXRQaXhl
bEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOworLy8KKy8vICAgIHJlc3VsdENvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7Cisv
LyAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29s
dXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7CisvLyAgICByZXN1bHRDb250
ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25P
dmVyKTsKKy8vCisvLyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb24pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zYWVjYWJhMDExYTJmYmFlY2M5ZjIyZGJmZjIzZTkwYmUzNDJhYWIy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRmxvb2QuaCIKKworI2lu
Y2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFRmxvb2Q6OmFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0
ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0
LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byBjb2xvciA9IG1fY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkobV9vcGFjaXR5KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVz
dWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkgfTsKKyAgICAKKyAgICByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpLmZpbGxSZWN0KGltYWdlUmVjdCwgY29sb3IpOworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdh
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2Q3MGE2ODBkOGVjMWM1
YzdjOTQ5MjdiNGJiNmQ5YjQzMmYyNjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3
YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgRkVHYXVzc2lhbkJsdXI6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2Fy
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNjMTIwMTA5OWJkOTU5ZGZhY2Ix
MmY5NzEwNmE1YmI1MmJmZWFlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAqIENvcHlyaWdo
dCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdF
RCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VE
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIEZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJn
ZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWY4MjViZGE4ZWMyMzUw
YmJjMTUzMDk0ZTQzMGZhNWMyOGM1N2JiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3Bw
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGRU1lcmdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVN
ZXJnZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1h
Z2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlu
cHV0cy5pc0VtcHR5KCkpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1
ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0
KCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogaW5wdXRzKSB7CisgICAgICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBpbnB1dC0+aW1hZ2VCdWZmZXIoKTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGlucHV0LT5hYnNvbHV0ZURyYXdpbmdSZWN0KCkp
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNjMzhjYTQ0ZTVhYWIxYjcyMjJjZTZhNzc4YWFjNzkwNWY2NmM4YjgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIw
MjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZF
TW9ycGhvbG9neS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNb3JwaG9sb2d5
OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwg
RmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjYxNWNiYjgzNGJiNGU4OTZkOGJkNzhmNjNmM2Q2MGRlOGIzZmIyNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFT2Zm
c2V0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVPZmZzZXQ6OmFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgRmls
dGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0g
MSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVm
ZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVy
KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmVzdWx0LnNldElzQWxwaGFJbWFnZShpbi5pc0FscGhhSW1hZ2UoKSk7CisKKyAgICBhdXRvIGlt
YWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVzdWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5z
aXplKCkgfTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOGFlNTBjZWJiODZlNjg5YzYwYWYzMGMzYTRjMWY4NjNlMTA2YTBmYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVUaWxlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUaWxlLmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgor
I2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citib29sIEZFVGlsZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJ
bWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7CisvLyAgICBBU1NFUlQoaW5wdXRz
LnNpemUoKSA9PSAxKTsKKy8vICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworLy8KKy8v
ICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKy8vICAgIGF1dG8g
aW5CdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOworLy8gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAh
aW5CdWZmZXIpCisvLyAgICAgICAgcmV0dXJuIGZhbHNlOworLy8KKy8vICAgIHJlc3VsdC5zZXRJ
c0FscGhhSW1hZ2UoaW4uaXNBbHBoYUltYWdlKCkpOworLy8KKy8vICAgIC8vIFNvdXJjZSBpbnB1
dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFzIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdp
b24gYnV0IGdpdmVzIHRoZQorLy8gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdl
IGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9u
LgorLy8gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4ubWF4RWZmZWN0UmVjdCgpOworLy8gICAg
RmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24oKTsKKy8v
ICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRp
b24oKTsKKy8vICAgIGlmIChpbi5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlw
ZVNvdXJjZUlucHV0KSB7CisvLyAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIo
KTsKKy8vICAgICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKKy8vICAgICAg
ICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRl
ci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOworLy8gICAgfQorLy8KKy8vICAgIGF1dG8g
dGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJl
Y3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVu
ZGVyaW5nTW9kZSgpKTsKKy8vICAgIGlmICghdGlsZUltYWdlKQorLy8gICAgICAgIHJldHVybiBu
dWxscHRyOworLy8KKy8vICAgIEdyYXBoaWNzQ29udGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRp
bGVJbWFnZS0+Y29udGV4dCgpOworLy8gICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWlu
TWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkpOworLy8gICAg
dGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi5hYnNvbHV0ZVBh
aW50UmVjdCgpLmxvY2F0aW9uKCkpOworLy8KKy8vICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IElt
YWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdlKSk7CisvLyAg
ICBpZiAoIXRpbGVJbWFnZUNvcHkpCisvLyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisvLworLy8g
ICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07CisvLyAgICBwYXR0ZXJuVHJhbnNm
b3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOwor
Ly8KKy8vICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5LnJl
bGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKKy8vCisv
LyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4
dCgpOworLy8gICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4p
KTsKKy8vICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxl
bmNlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiNGFkN2MxMDg4ZjJhNTBkZDYwOWRmNjQ2ODA5
MDUxNmM5ZGVmMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcApAQCAtMCww
ICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEg
SG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fi
b3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIw
MTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRkVUdXJidWxlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRVR1cmJ1
bGVuY2U6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZm
ZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0
U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMWQxNjAwM2M0NmZmODczYWRmNjc5ZTYxZTc3ZTk3
MDY1NTU4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcApAQCAtMCwwICsx
LDUxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFn
ZUJ1ZmZlciogRmlsdGVyUmVzdWx0U29mdHdhcmU6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAo
bV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAg
ICBhdXRvIGxvZ2ljYWxTaXplID0gYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUoKTsKKyAgICBt
X2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4
ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6
ZShsb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5w
dXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0
cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2lt
YWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCByZWN0KTsKKworICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRl
clJlc3VsdFNvZnR3YXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjM4YzQ1Njhm
NTFjMzYyYjlmY2E5NmI0YWZiNDM1YjQzM2U5OTEyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0
U29mdHdhcmUuaApAQCAtMCwwICsxLDQ3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRmlsdGVyUmVzdWx0U29mdHdhcmUgOiBwdWJsaWMgRmlsdGVyUmVzdWx0IHsK
K3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdDsKKyAgICAKK3By
aXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92
ZXJyaWRlIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXI7IH0KKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VC
dWZmZXIoKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZl
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19CRUdJTihXZWJDb3JlOjpGaWx0ZXJSZXN1bHRTb2Z0d2FyZSkKKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyUmVzdWx0JiByZXN1bHQpIHsgcmV0dXJuIHJlc3Vs
dC5yZW5kZXJpbmdNb2RlKCkgPT0gV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3
YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzlhY2E3MGVhNGY1MGNhM2I0
NDhmZjE3ZTAzN2M3NDMzOTVjMWNmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5j
cHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNl
QWxwaGEuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIFNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYgcmVzdWx0KSBjb25zdAoreworICAg
IEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdl
dCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByZXN1bHRJ
bWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9
LCByZXN1bHQuYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUoKSB9OworCisgICAgcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKS5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpibGFjayk7CisgICAgcmVz
dWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBJbnRQb2lu
dCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdh
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3MTY0ZWI1ZDVlOGE0NDY0
OGMzZjMxNTI0MTMxMjY3YWVlMTgyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291
cmNlR3JhcGhpYy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNvdXJjZUdyYXBo
aWM6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
c291cmNlSW1hZ2UpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZl
cigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50
UG9pbnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggNjRlOTgzODRhZjAwNGVm
Njk5YmM2MmU2YTZjOTc3NTZmNTljNjZmZi4uNzVmMzc3NTM1MTQxYzI5ZDIxM2Q1N2U0Y2YzZmQy
YjJmNDBlYjczMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTEs
NiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw0MTEg
KzI4LDMwMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgog
Ci0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1
bWVudFJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUg
IkZFQ29sb3JNYXRyaXguaCIKICNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCiAjaW5j
bHVkZSAiRkVEcm9wU2hhZG93LmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNpbmNs
dWRlICJGRU1lcmdlLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbmNs
dWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmxv
YXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZWZl
cmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgotI2luY2x1ZGUg
IlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNvdXJj
ZUFscGhhLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhp
Yy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgot
Ci0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVJlZjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKCkKK1JlZlB0
cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBhdXRv
IGZpbHRlciA9IGFkb3B0UmVmKG5ldyBDU1NGaWx0ZXIob3BlcmF0aW9ucywgcmVuZGVyaW5nTW9k
ZSkpOworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRnVuY3Rpb25zKHJlbmRlcmVyLCBvcGVyYXRp
b25zKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJuIGZpbHRlcjsK
IH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQotICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEs
IDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKnRoaXMp
KQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9u
cywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQorICAgIDogRmlsdGVyKHJlbmRlcmluZ01v
ZGUsIFR5cGU6OkNTUykKIHsKKyAgICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJh
dGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CisgICAgbV9oYXNGaWx0ZXJUaGF0U2hv
dWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhh
dFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKIH0KIAotQ1NTRmlsdGVyOjp+
Q1NTRmlsdGVyKCkgPSBkZWZhdWx0Oworc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNW
R0ZpbHRlcihGaWx0ZXImIGZpbHRlciwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVm
ZmVjdCAmcHJldmlvdXNFZmZlY3QsIGNvbnN0IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmls
dGVyT3BlcmF0aW9uKQoreworICAgIGF1dG8mIHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5k
ZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCk7CisgICAgYXV0byogZmlsdGVyRWxl
bWVudCA9IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVu
ZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKworICAgIGlmICghZmlsdGVyRWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gU1ZHRmlsdGVyOjpj
cmVhdGUoKmZpbHRlckVsZW1lbnQsIGZpbHRlci5yZW5kZXJpbmdNb2RlKCksICZwcmV2aW91c0Vm
ZmVjdCk7Cit9CiAKLUdyYXBoaWNzQ29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQor
c3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChjb25zdCBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKIHsK
LSAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBu
dWxscHRyOworICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9k
dmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNj
YWxlRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisg
ICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNB
bW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAorICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1v
dW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAwLAor
ICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4g
RkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUo
aW5wdXRQYXJhbWV0ZXJzKSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6
YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVj
dCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0
aW9uKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNlcGlhRWZmZWN0KGNvbnN0
IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQog
ewotICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZH
UmVzb3VyY2VzKCkucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwg
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICBpZiAoIWZpbHRlckVsZW1lbnQpIHsKLSAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAi
IGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFk
ZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOwot
ICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVy
LCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIC8vIEZJWE1F
OiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMTMxMDg1PgotICAgICAgICAvLyBGSVhNRTogVW5jbGVhciBpZiB0aGlzIGRvZXMgYW55dGhp
bmcuCi0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAg
ICAgICAgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVu
ZGluZ1Jlc291cmNlKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpLCAqZWxlbWVudCk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBj
bGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOworCisg
ICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVy
cy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBw
YXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCks
CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVz
QW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAwLAorICAg
ICAgICAwLAorICAgICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVD
b2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5w
dXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0Zp
bHRlckJ1aWxkZXI+KCZwcmV2aW91c0VmZmVjdCk7Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSk7CitzdGF0aWMgUmVm
UHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJhdGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9y
PGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVh
dGUoRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykp
OworfQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFZlY3RvcjxSZWY8
RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1
dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9u
LmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAg
IGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVj
dCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBp
ZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVh
bSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWls
ZWQgdG8gYnVpbGQgZWZmZWN0IGZyb20gIiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICB9CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4g
Y3JlYXRlSW52ZXJ0RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkp
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAqIGFtb3VudDsKKyAgICB0cmFu
c2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3VudDsKKworICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
cmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlv
biwgbnVsbEZ1bmN0aW9uKTsKK30KIAotICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJk
QXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5k
ZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdC
KQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1l
bnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRl
cnMoKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vs
c2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBidWlsZGVy
LT5hZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKLSAgICAgICAgcmVmZXJlbmNl
RWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgfQotICAgIAotICAgIG1fZWZmZWN0cy5hcHBl
bmRWZWN0b3IoV1RGTW92ZShyZWZlcmVuY2VFZmZlY3RzKSk7Ci0gICAgcmV0dXJuIGVmZmVjdDsK
K3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVPcGFjaXR5RWZmZWN0KGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlv
bjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVf
TElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9u
ZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xv
cGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZShudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1
bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKIH0KIAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25z
LCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBj
cmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQogewotICAgIG1faGFzRmlsdGVy
VGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsK
LSAgICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0g
b3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdp
bigpOworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAg
ICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFS
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNv
bXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVu
Y3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7
Cit9CiAKLSAgICBtX2VmZmVjdHMuY2xlYXIoKTsKLSAgICBtX291dHNldHMgPSB7IH07CitzdGF0
aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQ29udHJhc3RFZmZlY3QoY29uc3QgQmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRp
b24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwor
ICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5F
QVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRU
cmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9
IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQg
KyAwLjU7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAg
ICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRy
YW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0
YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0KGNvbnN0IEJsdXJGaWx0
ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24pCit7CisgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKKyAg
ICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlv
biwgLypjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9E
RV9OT05FIDoqLyBFREdFTU9ERV9EVVBMSUNBVEUpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQoreworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFk
b3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7CisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3Jl
YXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlv
bi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7Cit9CisKK2Jvb2wgQ1NTRmls
dGVyOjpidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKK3sKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZl
Y3QgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKTsKKyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAq
ZWZmZWN0IH0pOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBt
X3NvdXJjZUdyYXBoaWMucHRyKCk7CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7
Ci0gICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3
aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24g
PSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVyZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZp
b3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24pOworICAgICAgICBSZWZQdHI8U1ZHRmlsdGVy
PiBmaWx0ZXI7CisKKyAgICAgICAgQVNTRVJUKGVmZmVjdCk7CisgICAgICAgIHN3aXRjaCAob3Bl
cmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5D
RToKKyAgICAgICAgICAgIGZpbHRlciA9IGNyZWF0ZVNWR0ZpbHRlcigqdGhpcywgcmVuZGVyZXIs
ICplZmZlY3QsIGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikp
OworICAgICAgICAgICAgZWZmZWN0ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAg
ICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJs
ZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3Vu
dCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3Jn
L2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFs
ZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAg
ICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUy
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIy
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAg
MCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4y
MTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAg
ICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgICAgIDEsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
ICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICAgICAgICAgIGVm
ZmVjdCA9IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsKLSAgICAgICAgICAgIGF1
dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51
c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAs
IDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYv
cmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKLSAgICAgICAg
ICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0
b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50
KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkg
KiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAw
LAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51c0Ftb3VudCksCi0gICAg
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25lTWludXNBbW91bnQpLAotICAg
ICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1p
bnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMx
ICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAg
ICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAwLAot
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1l
dGVycykpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0VQSUE6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJB
VEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAg
ICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9G
bG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVj
dCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVTYXR1cmF0ZUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAgYXV0byYg
Y29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1
dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9u
LmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRl
KCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1l
dGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAg
ICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSHVlUm90YXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAg
ICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAg
ICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQ
RV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRy
YW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAqIGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5z
ZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OwotCi0gICAgICAgICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJG
dW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgorICAgICAgICAgICAgZWZmZWN0
ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6
CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hU
TkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRlci4KICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogewotICAgICAgICAg
ICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAg
ICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVB
UjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50
ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxs
RnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUoKnRoaXMsIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24pOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgor
ICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlT3BhY2l0eUVmZmVjdChkb3duY2FzdDxCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hU
TkVTUzogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBk
b3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1
bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRU
UkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3Vu
dCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAg
ICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAg
ICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVy
RnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlv
bik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgICAg
ICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDog
ewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9u
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZF
Ul9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVy
RnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAg
ICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5z
ZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5j
dGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgICAg
ICAgICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAg
ICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAg
ICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERldmlh
dGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJv
cGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKKworICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJs
dXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBhdXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0g
ZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93
T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlv
bigpLAotICAgICAgICAgICAgICAgIGRyb3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93
T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xvcigpLCAxKTsKKworICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgICAgICBlZmZlY3Qg
PSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRp
b24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KGVmZmVjdCkgewotICAgICAgICAgICAgLy8gVW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0
ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMgb24gdGhlIGZpbHRlcgotICAgICAgICAgICAgLy8g
cHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUg
c3VicmVnaW9ucy4KLSAgICAgICAgICAgIGVmZmVjdC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1l
ciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOwotICAgICAgICAgICAgZWZmZWN0
LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi50eXBlKCkgIT0g
RmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgICAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OwotICAgICAgICAgICAg
ICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsKKyAgICAgICAgaWYgKGZpbHRlcikg
eworICAgICAgICAgICAgZWZmZWN0ID0gZmlsdGVyLT5sYXN0RWZmZWN0KCk7CisgICAgICAgICAg
ICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFr
ZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVyIHdlIGFyZSBub3QgdmFsaWQuCi0gICAgaWYg
KG1fZWZmZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZWZm
ZWN0cy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBpZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHNldE1heEVmZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lv
bik7Ci0jaWYgVVNFKENPUkVfSU1BR0UpCi0gICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAg
ICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShy
ZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxl
ZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsKLSNlbmRpZgorICAgICAgICBtX2Z1bmN0aW9u
cy5hcHBlbmQoeyAqZWZmZWN0IH0pOworICAgIH0KKyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiBmaWx0ZXJSZWN0KQorSW50T3V0c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMoKSBjb25zdAogewot
ICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyB8fCAhbV9vdXRzZXRzLmlzWmVybygpKQorICAg
ICAgICByZXR1cm4gbV9vdXRzZXRzOwogCi0gICAgaWYgKGZpbHRlclJlY3QgPT0gc291cmNlSW1h
Z2VSZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9u
IDogbV9mdW5jdGlvbnMpCisgICAgICAgIG1fb3V0c2V0cyArPSBmdW5jdGlvbi0+b3V0c2V0cygp
OwogCi0gICAgc2V0U291cmNlSW1hZ2VSZWN0KGZpbHRlclJlY3QpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIENTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25z
dCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCi17Ci0gICAgLy8gQXQgdGhpcyBwb2lu
dCB0aGUgZWZmZWN0IGNoYWluIGhhcyBiZWVuIGJ1aWx0LCBhbmQgdGhlCi0gICAgLy8gc291cmNl
IGltYWdlIHNpemVzIHNldC4gV2UganVzdCBuZWVkIHRvIGF0dGFjaCB0aGUgZ3JhcGhpYwotICAg
IC8vIGJ1ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQgZG9uZSBzby4KLQotICAgIGlmIChtX2dyYXBo
aWNzQnVmZmVyQXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgbG9naWNh
bFNpemUgeyBtX3NvdXJjZURyYXdpbmdSZWdpb24uc2l6ZSgpIH07Ci0gICAgaWYgKCFzb3VyY2VJ
bWFnZSgpIHx8IHNvdXJjZUltYWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpIHsK
LSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpj
cmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRl
clNjYWxlKCksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdS
QTgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKLSAgICAg
ICAgUmVuZGVyaW5nTW9kZSBtb2RlID0gbV9maWx0ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogcmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0jZW5kaWYK
LSAgICB9Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBD
U1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCi17Ci0gICAgYXV0
byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5k
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVn
aW9uID0gbGFzdEVmZmVjdC5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZp
bHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZl
Y3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0g
ICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBz
Y2FsZSkpIHsKLSAgICAgICAgc2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxh
c3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQorICAg
IHJldHVybiBtX291dHNldHM7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0
ZVJlc3VsdHMoKQorRmlsdGVyUmVzdWx0KiBDU1NGaWx0ZXI6OmFwcGx5KEZpbHRlck91dHB1dCYg
b3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UpIGNvbnN0CiB7Ci0gICAgbV9zb3VyY2VHcmFwaGljLT5jbGVhclJlc3VsdCgpOwotICAgIGlm
IChtX3NvdXJjZUFscGhhKQotICAgICAgICBtX3NvdXJjZUFscGhhLT5jbGVhclJlc3VsdCgpOwot
ICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPmNsZWFy
UmVzdWx0KCk7Ci19CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7Cisg
ICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuY3Rpb24tPmFwcGx5KG91dHB1dCwgc3RhY2ssIHNvdXJj
ZUltYWdlKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkKLXsKLSAgICBhdXRvJiBlZmZlY3QgPSBtX2Vm
ZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyKSB7Ci0gICAgICAg
IG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cyhlZmZlY3QpOwotICAgICAgICBpZiAobV9m
aWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGVmZmVjdC50cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBzdGFjay5hcHBlbmQoeyAqcmVzdWx0
IH0pOworICAgICAgICBvdXRwdXQucmVzdWx0cygpLmFkZChmdW5jdGlvbiwgUmVmPEZpbHRlclJl
c3VsdD4oKnJlc3VsdCkpOwogICAgIH0KLSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3Qu
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7
Ci19Ci0KLUxheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGly
dHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCkKLXsKLSAgICAvLyBUaGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhl
IGFyZWEgaW4gdGhlICJmaWx0ZXJCb3hSZWN0IiB0aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZCwg
c28gdGhhdCB3ZSBmdWxseSBjb3ZlciB0aGUgImRpcnR5UmVjdCIuCi0gICAgYXV0byByZWN0Rm9y
UmVwYWludCA9IGRpcnR5UmVjdDsKLSAgICBpZiAoaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkp
Ci0gICAgICAgIHJlY3RGb3JSZXBhaW50ICs9IG91dHNldHMoKTsKLSAgICByZWN0Rm9yUmVwYWlu
dC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7Ci0gICAgcmV0dXJuIHJlY3RGb3JSZXBhaW50Owot
fQotCi1JbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpvdXRwdXQoKSBjb25zdAotewotICAgIGlmICht
X2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKQotICAgICAg
ICByZXR1cm4gbV9maWx0ZXJSZW5kZXJlci0+b3V0cHV0KCk7Ci0gICAgCi0gICAgcmV0dXJuIG1f
ZWZmZWN0cy5sYXN0KCktPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci19Ci0KLXZvaWQgQ1NTRmlsdGVy
OjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCi17
Ci0gICAgbV9zb3VyY2VEcmF3aW5nUmVnaW9uID0gc291cmNlSW1hZ2VSZWN0OwotICAgIHNldE1h
eEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgc2V0RmlsdGVyUmVnaW9uKHNvdXJj
ZUltYWdlUmVjdCk7Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gZmFsc2U7Ci19CiAK
LXZvaWQgQ1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBGbG9hdFJlY3QmIGVmZmVj
dFJlY3QpCi17Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIGVm
ZmVjdC0+c2V0TWF4RWZmZWN0UmVjdChlZmZlY3RSZWN0KTsKKyAgICBBU1NFUlQoc3RhY2suc2l6
ZSgpID09IDEpOworICAgIGF1dG8gcmVzdWx0ID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICByZXN1
bHQtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7
CisgICAgcmV0dXJuICZyZXN1bHQubGVha1JlZigpOwogfQogCi1JbnRSZWN0IENTU0ZpbHRlcjo6
b3V0cHV0UmVjdCgpIGNvbnN0CitUZXh0U3RyZWFtJiBDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0
aW9uKSBjb25zdAogewotICAgIGF1dG8mIGxhc3RFZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdl
dCgpOwotICAgIAotICAgIGlmIChsYXN0RWZmZWN0Lmhhc1Jlc3VsdCgpIHx8IChtX2ZpbHRlclJl
bmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSkKLSAgICAgICAgcmV0dXJu
IGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBt
X2ZpbHRlclJlZ2lvbiB9KTsKLSAgICAKLSAgICByZXR1cm4geyB9OwotfQotCi1JbnRPdXRzZXRz
IENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscykKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmICghbV9vdXRzZXRzLmlz
WmVybygpKQotICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwotCi0gICAgZm9yIChhdXRvJiBlZmZl
Y3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0c2V0cyArPSBlZmZlY3QtPm91dHNldHMoKTsK
LSAgICByZXR1cm4gbV9vdXRzZXRzOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0
aW9ucykKKyAgICAgICAgZnVuY3Rpb24tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJl
c2VudGF0aW9uKTsKKyAgICByZXR1cm4gdHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAppbmRleCAwMGI5MTkxN2I4MDRjOTJkOTQw
OGI3NThlMzc1YzI1MmYyOWRiMGM1Li5iZDNmOGE3ZWM4M2ZlYTlmOWVlZTQzZmVmNTIxNjk4YTJj
ZjcwMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsODYgKzI2
LDU0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIklu
dFJlY3RFeHRlbnQuaCIKLSNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1R5
cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlcjsKLWNs
YXNzIEZpbHRlck9wZXJhdGlvbnM7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgU291cmNl
QWxwaGE7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwotCi1lbnVtIGNsYXNzIEZpbHRlckNvbnN1bWVy
IHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9uIH07CiAKIGNsYXNzIENTU0ZpbHRlciBm
aW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAg
IGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOwotCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29u
c3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0
JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247IH0KIAotICAg
IEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdDsKLQotICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxl
bWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7Ci0gICAgdm9p
ZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB2b2lkIGFwcGx5KCk7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+IGNyZWF0ZShSZW5kZXJFbGVtZW50JiwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkKTsKIAogICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRl
clRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCi0g
ICAgdm9pZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRz
ZXRzIG91dHNldHMoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBDU1NGaWx0ZXIoKTsKLSAgICB2
aXJ0dWFsIH5DU1NGaWx0ZXIoKTsKLQotICAgIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2VEcmF3aW5nUmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJl
Y3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0K
LSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IGZp
bmFsOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVu
ZGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRl
ck9wZXJhdGlvbiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBE
ZWNvZGVyPiBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8Q1NTRmlsdGVy
Pj4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOwotCi0g
ICAgYm9vbCB1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVj
dCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpOworcHJpdmF0ZToKKyAgICBDU1NGaWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYsIFJlbmRlcmluZ01vZGUpOwogCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7Cisg
ICAgYm9vbCBidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYpOwogCi0gICAgTGF5b3V0UmVjdCBjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRp
cnR5UmVjdCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IGZpbmFs
OwogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3Qg
bV9maWx0ZXJSZWdpb247CisgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IGZpbmFsOwogCi0gICAgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVjdHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBoaWM+
IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX3NvdXJjZUFscGhh
OworICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZh
bHNlIH07CiAKKyAgICBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CiAg
ICAgbXV0YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0czsKK307CiAKLSAgICBib29sIG1fZ3JhcGhp
Y3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3Ry
aWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2UgfTsKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29k
ZXI+IHZvaWQgQ1NTRmlsdGVyOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Cit7CiAgICAgCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOwot
fTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxSZWY8Q1NT
RmlsdGVyPj4gQ1NTRmlsdGVyOjpkZWNvZGUoRGVjb2RlciYpCit7CisgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNTU0ZpbHRlcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci5pc0NTU0ZpbHRl
cigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmls
dGVyKSB7IHJldHVybiBmaWx0ZXIudHlwZSgpID09IFdlYkNvcmU6OkZpbHRlcjo6VHlwZTo6Q1NT
OyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCmluZGV4IDE0YjAxZDYwNTJmYTI3Y2IyYzM1NjYxYzAyZWRkN2I4MzlkYWIy
NmQuLjJhNTFkYjgzN2Y5MTVlZmM0MzNlZDNjMmM0ZmViMTkyOGE1NGU4YWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC02Miw3ICs2Miw2IEBAIGNsYXNzIFRleHRT
dHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3Mg
Q2xpcFJlY3RzOwogY2xhc3MgQ2xpcFJlY3RzQ2FjaGU7CiBjbGFzcyBFdmVudFJlZ2lvbkNvbnRl
eHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0
ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3Bw
CmluZGV4IDI1MGE3ZDVjMGJhYTBhYzc0MWE5MGM4MThiNjFhMDVmOTViOTY0YTQuLmEyZWU3ODkw
YzRhN2VkZmRhYTNlYmRiYjdmNDQ1ZGIwNzk2MTcyNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCkBAIC0zMSw5ICszMSwxMCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyRmlsdGVycy5oIgogCi0jaW5j
bHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CkBAIC0xMTYsMzkgKzExNyw1MSBAQCB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6cmVt
b3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpCiAgICAgbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXMu
Y2xlYXIoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBzY2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlKQordm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewot
ICAgIGlmICghbV9maWx0ZXIpIHsKLSAgICAgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0
ZSgpOwotICAgICAgICBtX2ZpbHRlci0+c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAg
ICAgICBtX2ZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9IGVs
c2UgaWYgKG1fZmlsdGVyLT5maWx0ZXJTY2FsZSgpICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAgICAg
IG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVy
LT5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB9CisgICAgbV9maWx0ZXIgPSBDU1NG
aWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVy
aW5nTW9kZSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnB1
dENvbnRleHQoKQoreworICAgIHJldHVybiBtX3NvdXJjZUltYWdlID8gJm1fc291cmNlSW1hZ2Ut
PmNvbnRleHQoKSA6IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0
dGFjaGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSB7
IG1fc291cmNlSW1hZ2VSZWN0LnNpemUoKSB9OworICAgIG1fc291cmNlSW1hZ2UgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtX2ZpbHRlci0+cmVuZGVyaW5nTW9kZSgpLCAxLCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAg
IC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVpbGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXll
ci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCi0gICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHBy
b2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBidXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCi0g
ICAgLy8gRklYTUU6IHRoaXMgcmVidWlsZHMgdGhlIGVudGlyZSBlZmZlY3RzIGNoYWluIGV2ZW4g
aWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hhbmdlLgotICAgIGlmICghbV9maWx0ZXItPmJ1
aWxkKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCBGaWx0ZXJDb25zdW1lcjo6
RmlsdGVyUHJvcGVydHkpKQotICAgICAgICBtX2ZpbHRlciA9IG51bGxwdHI7CisgICAgbV9ncmFw
aGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKIH0KIAotR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJM
YXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRp
b25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRS
ZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCitHcmFw
aGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0
UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQogewog
ICAgIGlmICghbV9maWx0ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byYg
ZmlsdGVyID0gKm1fZmlsdGVyOwotICAgIGF1dG8gZmlsdGVyU291cmNlUmVjdCA9IGZpbHRlci5j
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGZpbHRlckJveFJlY3QsIGRpcnR5UmVj
dCk7CisgICAgCisgICAgYXV0byBmaWx0ZXJTb3VyY2VSZWN0ID0gZGlydHlSZWN0OworICAgIGlm
IChmaWx0ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCisgICAgICAgIGZpbHRlclNvdXJj
ZVJlY3QgKz0gZmlsdGVyLm91dHNldHMoKTsKKyAgICBmaWx0ZXJTb3VyY2VSZWN0LmludGVyc2Vj
dChmaWx0ZXJCb3hSZWN0KTsKKwogICAgIGlmIChmaWx0ZXJTb3VyY2VSZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBib29sIGhhc1VwZGF0ZWRCYWNraW5nU3Rv
cmUgPSBmaWx0ZXIudXBkYXRlQmFja2luZ1N0b3JlUmVjdChmaWx0ZXJTb3VyY2VSZWN0KTsKKyAg
ICAKKyAgICBpZiAoZmlsdGVyU291cmNlUmVjdCAhPSBtX3NvdXJjZUltYWdlUmVjdCkgeworICAg
ICAgICBtX3NvdXJjZUltYWdlUmVjdCA9IGZpbHRlclNvdXJjZVJlY3Q7CisgICAgICAgIG1fZ3Jh
cGhpY3NCdWZmZXJBdHRhY2hlZCA9IGZhbHNlOworICAgIH0KKyAgICAKICAgICBpZiAoIWZpbHRl
ci5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGRp
cnR5UmVjdDsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUp
CisgICAgICAgIGlmICghbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQogICAgICAgICAgICAgbV9y
ZXBhaW50UmVjdCA9IGZpbHRlclNvdXJjZVJlY3Q7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgbV9yZXBhaW50UmVjdCA9IGRpcnR5UmVjdDsKQEAgLTE1OSwxMSArMTcyLDkgQEAgR3JhcGhp
Y3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNz
Q29udGV4dCYgZGVzdGluYXQKICAgICBtX3BhaW50T2Zmc2V0ID0gZmlsdGVyU291cmNlUmVjdC5s
b2NhdGlvbigpOwogICAgIHJlc2V0RGlydHlTb3VyY2VSZWN0KCk7CiAKLSAgICBmaWx0ZXIuZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KLSAgICBmaWx0ZXIuYWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZChkZXN0aW5hdGlvbkNvbnRleHQpOwotICAgIGF1dG8qIHNvdXJj
ZUdyYXBoaWNzQ29udGV4dCA9IGZpbHRlci5pbnB1dENvbnRleHQoKTsKLSAgICBpZiAoIXNvdXJj
ZUdyYXBoaWNzQ29udGV4dCB8fCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuaXNFbXB0eSgpIHx8IElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuc2l6ZSgp
KSkKKyAgICBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCk7CisgICAgYXV0byogc291cmNl
R3JhcGhpY3NDb250ZXh0ID0gaW5wdXRDb250ZXh0KCk7CisgICAgaWYgKCFzb3VyY2VHcmFwaGlj
c0NvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gVHJhbnNsYXRlIHRo
ZSBjb250ZXh0IHNvIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllciBpcyBjYXB0dXJlZCBp
biB0aGUgb2Zmc2NyZWVuIG1lbW9yeSBidWZmZXIuCkBAIC0xNzcsMjUgKzE4OCwyNiBAQCBHcmFw
aGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0aW5hdAogCiB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0
ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpCiB7Ci0gICAgQVNT
RVJUKG1fZmlsdGVyLT5pbnB1dENvbnRleHQoKSk7CisgICAgQVNTRVJUKGlucHV0Q29udGV4dCgp
KTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlxuUmVuZGVyTGF5
ZXJGaWx0ZXJzICIgPDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0Iik7CiAKICAgICBhdXRv
JiBmaWx0ZXIgPSAqbV9maWx0ZXI7Ci0gICAgZmlsdGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3Jl
KCk7Ci0KLSAgICBmaWx0ZXIuYXBwbHkoKTsKLQotICAgIC8vIEdldCB0aGUgZmlsdGVyZWQgb3V0
cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgotICAgIExheW91dFJlY3QgZGVzdFJlY3QgPSBmaWx0
ZXIub3V0cHV0UmVjdCgpOwotICAgIGRlc3RSZWN0Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1f
cGFpbnRPZmZzZXQueSgpKTsKLQotICAgIGlmIChhdXRvKiBvdXRwdXRCdWZmZXIgPSBmaWx0ZXIu
b3V0cHV0KCkpCi0gICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91
dHB1dEJ1ZmZlciwgc25hcFJlY3RUb0RldmljZVBpeGVscyhkZXN0UmVjdCwgbV9sYXllci5yZW5k
ZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkpOwotCi0gICAgZmlsdGVyLmNs
ZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJGaWx0ZXJzICIgPDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVy
RWZmZWN0IGRvbmVcbiIpOworICAgIGlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7CisKKyAgICBh
dXRvIGdlb21ldHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJHZW9tZXRyeT4obV9zb3VyY2VJ
bWFnZVJlY3QsIG1fc291cmNlSW1hZ2VSZWN0KTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJh
d0ZpbHRlckltYWdlQnVmZmVyKGZpbHRlciwgbV9zb3VyY2VJbWFnZS5nZXQoKSwgV1RGTW92ZShn
ZW9tZXRyeSkpOworCisvLworLy8gICAgLy8gR2V0IHRoZSBmaWx0ZXJlZCBvdXRwdXQgYW5kIGRy
YXcgaXQgaW4gcGxhY2UuCisvLyAgICBMYXlvdXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyLm91dHB1
dFJlY3QoKTsKKy8vICAgIGRlc3RSZWN0Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1fcGFpbnRP
ZmZzZXQueSgpKTsKKy8vCisvLyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdl
QnVmZmVyKGZpbHRlciwgbV9zb3VyY2VJbWFnZS5nZXQoKSk7CisvLworLy8gICAgZmlsdGVyLmNs
ZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOworLy8KKy8vICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyRmlsdGVycyAiIDw8IHRoaXMgPDwgIiBhcHBseUZp
bHRlckVmZmVjdCBkb25lXG4iKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1
Yzg4ZjE1NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLjJhZjZmYjQ3ZTE4NGY2OTQwNDdjMGU3
MTUyNzNhYzE0MmFhNWJmYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJzLmgKQEAgLTM3LDggKzM3LDEwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIENhY2hlZFNWR0RvY3VtZW50OworY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKIAogY2xhc3Mg
UmVuZGVyTGF5ZXJGaWx0ZXJzIGZpbmFsIDogcHJpdmF0ZSBDYWNoZWRTVkdEb2N1bWVudENsaWVu
dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02OSwxNCArNzEsMTkgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwg
Y29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikgZmluYWw7CiAgICAgdm9pZCByZXNldERpcnR5U291
cmNlUmVjdCgpIHsgbV9kaXJ0eVNvdXJjZVJlY3QgPSBMYXlvdXRSZWN0KCk7IH0KKyAgICBHcmFw
aGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3Rv
cmVJZk5lZWRlZCgpOwogCiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKICAgICBWZWN0b3I8
UmVmUHRyPEVsZW1lbnQ+PiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlczsKICAgICBWZWN0b3I8Q2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJl
bmNlczsKIAorICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKKyAgICBGbG9h
dFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7CiAgICAgUmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7
CiAgICAgTGF5b3V0UmVjdCBtX2RpcnR5U291cmNlUmVjdDsKKyAgICBib29sIG1fZ3JhcGhpY3NC
dWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAgICAgCiAgICAgLy8gRGF0YSB1c2VkIHBlciBwYWlu
dAogICAgIExheW91dFBvaW50IG1fcGFpbnRPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDQx
NjJiODFmZjNiYWM4Y2MxYzJkOGY0ODkxODE0OTkxZWM3NTU3YTEuLmE1MjgwYTdiZjcwMzA0NzY5
OGUyM2EyYTEyYmNhYjIxODVkMzVjMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC00LDYgKzQsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNSw2ICszNiw4IEBACiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgorI2luY2x1
ZGUgIlNWR0ZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdS
ZW5kZXJpbmdDb250ZXh0LmgiCkBAIC04MCw2MiArODMsMjcgQEAgdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmIGNsaWVudCwg
Ym9vbAogICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxp
ZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24p
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyhTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKLXsKLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOwotICAgIGlm
IChmaWx0ZXJFbGVtZW50KCkuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5n
Qm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7Ci0KLSAgICAvLyBBZGQgZWZmZWN0cyB0
byB0aGUgYnVpbGRlcgotICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVp
bGRlcj4oU291cmNlR3JhcGhpYzo6Y3JlYXRlKGZpbHRlcikpOwotICAgIGJ1aWxkZXItPnNldFBy
aW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpKTsKLSAgICBidWls
ZGVyLT5zZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgCi0gICAg
Zm9yIChhdXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KCkpKSB7Ci0gICAgICAgIGF1dG8gZWZmZWN0
ID0gZWxlbWVudC5idWlsZChidWlsZGVyLmdldCgpLCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVm
ZmVjdCkgewotICAgICAgICAgICAgYnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZl
Y3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwgZWxlbWVudC5yZW5kZXJlcigp
KTsKLSAgICAgICAgZWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsK
LSAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJl
c29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWxl
bWVudCwgZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94
KSk7Ci0gICAgICAgIGlmIChlbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElO
QVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9w
ZXJhdGluZ0NvbG9yU3BhY2UoZWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCku
Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFy
UkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRp
bmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAg
ICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlbGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVm
ZmVjdCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlcjsKLX0KLQogYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVu
ZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQp
OwogICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2VNb2RlLCAhcmVzb3VyY2VNb2RlKTsKIAotICAg
IExPRyhGaWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgJXAgYXBwbHlSZXNvdXJjZSBy
ZW5kZXJlciAlcCIsIHRoaXMsICZyZW5kZXJlcik7Ci0KLSAgICBpZiAobV9yZW5kZXJlckZpbHRl
ckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSkgewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0
ZXJEYXRhID0gbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuZ2V0KCZyZW5kZXJlcik7Ci0gICAgICAg
IGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpQYWludGluZ1NvdXJjZSB8fCBm
aWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpBcHBseWluZykKLSAgICAgICAgICAgIGZp
bHRlckRhdGEtPnN0YXRlID0gRmlsdGVyRGF0YTo6Q3ljbGVEZXRlY3RlZDsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBBbHJlYWR5IGJ1aWx0LCBvciB3ZSdyZSBpbiBhIGN5Y2xlLCBvciB3ZSdy
ZSBtYXJrZWQgZm9yIHJlbW92YWwuIFJlZ2FyZGxlc3MsIGp1c3QgZG8gbm90aGluZyBtb3JlIG5v
dy4KLSAgICB9Ci0KKyAgICAvLyBCdWlsZCB0aGUgU1ZHRmlsdGVyCiAgICAgYXV0byBmaWx0ZXJE
YXRhID0gbWFrZVVuaXF1ZTxGaWx0ZXJEYXRhPigpOwotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3Vu
ZGluZ0JveCA9IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgYXV0byByZW5kZXJp
bmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkg
PyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ7CiAKLSAgICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVz
b2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJF
bGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIGlmIChmaWx0
ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1wdHkoKSkKKyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBT
VkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50KCksIHJlbmRlcmluZ01vZGUpOworICAgIGlm
ICghZmlsdGVyRGF0YS0+ZmlsdGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
RmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3go
KTsKKyAgICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2
ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVt
ZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpOworCisgICAgLy8gQ2FsY3Vs
YXRlIHRoZSBzb3VyY2VJbWFnZVJlY3QKKyAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0g
cmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVn
aW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzKTsKIAotICAgIC8vIERldGVybWlu
ZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggZm9yIGZpbHRlci4gCisgICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBhYnNvbHV0ZVRyYW5zZm9ybQogICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0
ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9u
VG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKICAgICBpZiAoIWFic29sdXRl
VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDMs
NjUgKzExMSwyMiBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIC8vIEVsaW1pbmF0ZSBz
aGVhciBvZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRv
IHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCiAgICAgZmlsdGVyRGF0
YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVU
cmFuc2Zvcm0ueFNjYWxlKCksIDAsIDAsIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAw
KTsKIAotICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIg
YW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4KLSAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0g
cmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsKLSAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVn
aW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzKTsKKyAgICAvLyBDYWxjdWxhdGUg
dGhlIGZpbHRlciByZXNvbHV0aW9uCiAgICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lv
biA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVy
RGF0YS0+ZHJhd2luZ1JlZ2lvbik7CisgICAgZmlsdGVyRGF0YS0+c2NhbGUgPSB7IDEsIDEgfTsK
KyAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVEcmF3aW5nUmVnaW9u
LnNpemUoKSwgZmlsdGVyRGF0YS0+c2NhbGUpOwogCi0gICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0
ZXIgb2JqZWN0LgotICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxl
bWVudCgpLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3Jl
YXRlKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdp
bmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmlt
aXRpdmVCb3VuZGluZ0JveE1vZGUpOwotCi0gICAgLy8gQ3JlYXRlIGFsbCByZWxldmFudCBmaWx0
ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gYnVpbGRQcmltaXRpdmVz
KCpmaWx0ZXJEYXRhLT5maWx0ZXIpOwotICAgIGlmICghZmlsdGVyRGF0YS0+YnVpbGRlcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3Ig
ZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlhdGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBi
ZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4KLSAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJl
Y3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRTaXplIHNjYWxlKDEsIDEpOwot
ICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyh0ZW1wU291cmNlUmVjdC5zaXplKCks
IHNjYWxlKTsKLSAgICB0ZW1wU291cmNlUmVjdC5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5o
ZWlnaHQoKSk7Ci0KLSAgICAvLyBTZXQgdGhlIHNjYWxlIGxldmVsIGluIFNWR0ZpbHRlci4KLSAg
ICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotCi0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAg
RmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVj
dCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZm
ZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZVxuIiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+
bGFzdEVmZmVjdCgpKTsKLQotICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpOwotICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhF
ZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28g
YmlnIGltYWdlIHNpemUsCi0gICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRo
IG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIGZpbHRlckRhdGEtPmZpbHRl
ci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QtPmRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBk
cmF3aW5nUmVnaW9uIGlzIGVtcHR5LCB3ZSBoYXZlIHNvbWV0aGluZyBsaWtlIDxnIGZpbHRlcj0i
Li4iLz4uCi0gICAgLy8gRXZlbiBpZiB0aGUgdGFyZ2V0IG9iamVjdEJvdW5kaW5nQm94KCkgaXMg
ZW1wdHksIHdlIHN0aWxsIGhhdmUgdG8gZHJhdyB0aGUgbGFzdCBlZmZlY3QgcmVzdWx0IGltYWdl
IGluIHBvc3RBcHBseVJlc291cmNlLgotICAgIGlmIChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9u
LmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNv
bnRhaW5zKCZyZW5kZXJlcikpOwotICAgICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBj
b250ZXh0OwotICAgICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBX
VEZNb3ZlKGZpbHRlckRhdGEpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IC8vIENoYW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBm
aWx0ZXJlZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhlIHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4K
KyAgICAvLyBDYWxjdWxhdGUgZWZmZWN0aXZlVHJhbnNmb3JtCiAgICAgQWZmaW5lVHJhbnNmb3Jt
IGVmZmVjdGl2ZVRyYW5zZm9ybTsKLSAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUu
d2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOworICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShm
aWx0ZXJEYXRhLT5zY2FsZSk7CiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRl
ckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgIGF1dG8gcmVuZGVyaW5n
TW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKICAgICBh
dXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKTsKICNl
bHNlCiAgICAgYXV0byBjb2xvclNwYWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7
CiAjZW5kaWYKKwogICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRy
YW5zZm9ybSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFz
b3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAu
Y29udGFpbnMoJnJlbmRlcmVyKSk7CkBAIC0yMTAsMTkgKzEzNSwxNSBAQCBib29sIFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBSZW5kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIC8vIFNl
dCB0aGUgcmVuZGVyaW5nIG1vZGUgZnJvbSB0aGUgcGFnZSdzIHNldHRpbmdzLgotICAgIGZpbHRl
ckRhdGEtPmZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLQorICAgIC8v
IFNldCB0aGUgd29ya2luZyBHcmFwaGljQ29udGV4dCB0byB0aGUgZmlsdGVyIHNvdXJjZUdyYXBo
aWMKICAgICBHcmFwaGljc0NvbnRleHQmIHNvdXJjZUdyYXBoaWNDb250ZXh0ID0gc291cmNlR3Jh
cGhpYy0+Y29udGV4dCgpOwotICAKKyAgICAKICAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGlj
QnVmZmVyID0gV1RGTW92ZShzb3VyY2VHcmFwaGljKTsKICAgICBmaWx0ZXJEYXRhLT5zYXZlZENv
bnRleHQgPSBjb250ZXh0OwotCisgICAgCiAgICAgY29udGV4dCA9ICZzb3VyY2VHcmFwaGljQ29u
dGV4dDsKIAotICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJl
bmRlcmVyKSk7CiAgICAgbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RG
TW92ZShmaWx0ZXJEYXRhKSk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjY3LDM4ICsx
ODgsMTggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2Uo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0
RWZmZWN0KCk7Ci0KLSAgICBpZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVz
LmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBv
YmplY3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUgY2FsbGVkIG9uIHRoZQotICAgICAgICAvLyBpbml0
aWFsIGZpbHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVz
dWx0IG9uIGEKLSAgICAgICAgLy8gc2Vjb25kIGRyYXdpbmcuCi0gICAgICAgIGlmIChmaWx0ZXJE
YXRhLnN0YXRlICE9IEZpbHRlckRhdGE6OkJ1aWx0KQotICAgICAgICAgICAgZmlsdGVyRGF0YS5m
aWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUoZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVm
ZmVyKSk7Ci0KLSAgICAgICAgLy8gQWx3YXlzIHRydWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1
aWx0IChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlm
ICghbGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGZpbHRlckRhdGEuc3Rh
dGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5
KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAgICB9CisgICAgaWYgKCFmaWx0ZXJE
YXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBG
aWx0ZXJEYXRhOjpCdWlsdDsKIAotICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBs
YXN0RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgICAgICBpZiAocmVzdWx0SW1hZ2Up
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFi
c29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwot
Ci0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmls
dGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5m
aWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJ
bWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGxhc3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJl
c29sdXRpb24oKSk7CisgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFy
RnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0o
KSkpOworICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuc2Nh
bGUud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuc2NhbGUuaGVpZ2h0KCkpKTsKIAotICAgICAgICAg
ICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zv
cm0pOwotICAgICAgICB9CisgICAgICAgIGF1dG8gZ2VvbWV0cnkgPSBzdGQ6Om1ha2VfdW5pcXVl
PFNWR0ZpbHRlckdlb21ldHJ5PihmaWx0ZXJEYXRhLmJvdW5kYXJpZXMsIGZpbHRlckRhdGEuZHJh
d2luZ1JlZ2lvbiwgZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgZmlsdGVy
RGF0YS5zY2FsZSk7CisgICAgICAgIGNvbnRleHQtPmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcigqZmls
dGVyRGF0YS5maWx0ZXIsIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlci5nZXQoKSwgV1RG
TW92ZShnZW9tZXRyeSkpOworICAgIAorICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRh
LnNjYWxlKTsKKyAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVl
QWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNC
dWZmZXIgPSBudWxscHRyOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8
PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3Vy
Y2UgZG9uZVxuIik7CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVz
b3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKQEAgLTMwNiwxMCAr
MjA3LDggQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZXNvdXJjZUJvdW5k
aW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWMKICAgICByZXR1cm4gU1ZHTGVuZ3RoQ29u
dGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgp
LCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgb2JqZWN0Lm9iamVjdEJvdW5kaW5nQm94
KCkpOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1
dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGUpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVD
aGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJikKIHsKLSAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGlj
X2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2Rl
KCkpOwotCiAgICAgTE9HKEZpbHRlcnMsICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAlcCBwcmlt
aXRpdmVBdHRyaWJ1dGVDaGFuZ2VkIHJlbmRlcmVyICVwIiwgdGhpcywgb2JqZWN0KTsKIAogICAg
IGZvciAoY29uc3QgYXV0byYgb2JqZWN0RmlsdGVyRGF0YVBhaXIgOiBtX3JlbmRlcmVyRmlsdGVy
RGF0YU1hcCkgewpAQCAtMzE3LDE2ICsyMTYsNiBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwog
ICAgICAgICBpZiAoZmlsdGVyRGF0YS0+c3RhdGUgIT0gRmlsdGVyRGF0YTo6QnVpbHQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTVkdGaWx0ZXJCdWlsZGVyKiBidWlsZGVyID0g
ZmlsdGVyRGF0YS0+YnVpbGRlci5nZXQoKTsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBlZmZlY3Qg
PSBidWlsZGVyLT5lZmZlY3RCeVJlbmRlcmVyKG9iamVjdCk7Ci0gICAgICAgIGlmICghZWZmZWN0
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIFNpbmNlIGFsbCBlZmZlY3RzIHNo
YXJlcyB0aGUgc2FtZSBhdHRyaWJ1dGUgdmFsdWUsIGFsbAotICAgICAgICAvLyBvciBub25lIG9m
IHRoZW0gd2lsbCBiZSBjaGFuZ2VkLgotICAgICAgICBpZiAoIXByaW1pdHZlLT5zZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1dGUpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKLQogICAgICAg
ICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuLgogICAgICAgICBtYXJrQ2xpZW50
Rm9ySW52YWxpZGF0aW9uKCpvYmplY3RGaWx0ZXJEYXRhUGFpci5rZXksIFJlcGFpbnRJbnZhbGlk
YXRpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAppbmRleCA1NjRhYWFkNDhhMjJlM2M0NTA3ZWVmNTBh
ZGM2NDQwMWQ4NzAzZjgzLi4xNDhhYzA4YjM5ZTgxY2YyOTZjNjRmY2JkZWQ4MzE5NmUxYTg5ZDc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oCkBAIC0yMywxMCArMjMsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKLSNpbmNs
dWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgog
I2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAg
LTQyLDggKzQxLDcgQEAgcHVibGljOgogCiAgICAgRmlsdGVyRGF0YSgpID0gZGVmYXVsdDsKIAot
ICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmls
dGVyQnVpbGRlcj4gYnVpbGRlcjsKKyAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXI7CiAgICAgUmVm
UHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljQnVmZmVyOwogICAgIEdyYXBoaWNzQ29udGV4
dCogc2F2ZWRDb250ZXh0IHsgbnVsbHB0ciB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBzaGVhckZy
ZWVBYnNvbHV0ZVRyYW5zZm9ybTsKQEAgLTcxLDggKzY5LDYgQEAgcHVibGljOgogCiAgICAgRmxv
YXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRQcmltaXRpdmVz
KFNWR0ZpbHRlciYpIGNvbnN0OwotCiAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBmaWx0
ZXJVbml0cygpIGNvbnN0IHsgcmV0dXJuIGZpbHRlckVsZW1lbnQoKS5maWx0ZXJVbml0cygpOyB9
CiAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cygpIGNvbnN0IHsg
cmV0dXJuIGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpOyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4
IGI0NzM5NDM4YzVmM2UyYzY5MWVmM2IwMmJiYmVjOWQyOTIwNzAzYjcuLmQyZTU5ZDEzOWQ4Yzlm
NDJjNTdiMDRjYzlhYzczMWY3NGFlYThlMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFs
aXphdGlvbi5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJJ
bWFnZS5oIgpAQCAtNDksNiArNTAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNp
bmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRWxsaXBzZUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94Lmgi
CiAjaW5jbHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5o
IgpAQCAtNDI4LDEzICs0MzAsOSBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJgogICAgICAgICB3
cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwcmltaXRpdmVVbml0cyIsIGZpbHRlci5wcmltaXRpdmVV
bml0cygpKTsKICAgICAgICAgdHMgPDwgIlxuIjsKICAgICAgICAgLy8gQ3JlYXRpbmcgYSBwbGFj
ZWhvbGRlciBmaWx0ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBidWlsZGVyLgotICAgICAgICBG
bG9hdFJlY3QgZHVtbXlSZWN0OwotICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVy
OjpjcmVhdGUoQWZmaW5lVHJhbnNmb3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1teVJl
Y3QsIHRydWUpOwotICAgICAgICBpZiAoYXV0byBidWlsZGVyID0gZmlsdGVyLmJ1aWxkUHJpbWl0
aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxGaWx0ZXI+IGR1
bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyLmZpbHRlckVsZW1lbnQoKSkpIHsK
ICAgICAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLQot
ICAgICAgICAgICAgaWYgKEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RF
ZmZlY3QoKSkKLSAgICAgICAgICAgICAgICBsYXN0RWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzKTsKKyAgICAgICAgICAgIGR1bW15RmlsdGVyLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAocmVzb3VyY2UucmVzb3VyY2VUeXBlKCkg
PT0gQ2xpcHBlclJlc291cmNlVHlwZSkgewogICAgICAgICBjb25zdCBhdXRvJiBjbGlwcGVyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyJj4ocmVzb3VyY2UpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKaW5kZXggN2JjZjA0MTgwMGY3
OTlmMTE3NGNmZTA0YjgyMmQ2ZDA2NDMxZjY4Ni4uMTYwZTAwZGNiZWQ2OTVmYjQwNzFlNjE3MWVj
ZjEyZjJlMTk2NGZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3Bw
CkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJGRUJsZW5kLmgiCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KIApAQCAtMTAwLDIwICsxMDAsMTUgQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUJsZW5kRWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIp
IGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRl
ckVmZmVjdD4+PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNv
bnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4y
KCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBh
dXRvIGlucHV0MiA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjIoKSk7CiAKICAgICBpZiAoIWlucHV0
MSB8fCAhaW5wdXQyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0
ID0gRkVCbGVuZDo6Y3JlYXRlKGZpbHRlciwgbW9kZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZl
Y3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7
Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0
OworICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgRkVCbGVuZDo6Y3JlYXRlKG1v
ZGUoKSksIHsgeyAqaW5wdXQxIH0sIHsgKmlucHV0MiB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAppbmRleCA5MDM3Y2IxMjFmOTM2N2I3ODhkOTIxNmUw
Yjk0MWZjOGIwNmRlYzY2Li4yN2E4MmY1Y2NiNDcwZTYzMDZjNTViNDllYWU4MjY0MzNkZThkMmRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaApAQCAtNjksNyArNjksNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZm
ZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgc2V0Rmls
dGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9y
TWF0cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuY3BwCmluZGV4IDA1MjQ4NTc4YzI3NGM4ZmEyYjNlMWYyNDRlNDM2Nzg2OGY0MmJhOWMu
LjhhYjgwYTI2OGU5ZmMzZDAyMWVkNDIzMzg5YmM0YjgwOTJjOGExMjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcApAQCAtMjMsNyArMjMsNyBA
QAogI2luY2x1ZGUgIlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgiCiAKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZH
RmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgogCkBAIC0xMDAsMTIgKzEwMCwxMSBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JN
YXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRF
ZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxmbG9hdD4gZmlsdGVyVmFsdWVzOwog
ICAgIENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlID0gdHlwZSgpOwpAQCAtMTM1LDE1ICsxMzQs
MTMgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWwKICAgICAgICAgaWYgKChmaWx0ZXJUeXBlID09
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVggJiYgc2l6ZSAhPSAyMCkKICAgICAgICAgICAgIHx8
IChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUgJiYgc2l6ZSAhPSAx
KQogICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFICYmIHNpemUgIT0gMSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgICAgIAogICAgICAgICBmaWx0ZXJWYWx1ZXMgPSB2YWx1ZXMo
KTsKICAgICAgICAgZmlsdGVyVmFsdWVzLnNocmlua1RvRml0KCk7CiAgICAgfQogCi0gICAgYXV0
byBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBXVEZN
b3ZlKGZpbHRlclZhbHVlcykpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0
MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVyVmFsdWVzKSksIHsgaW5wdXQxLnJlbGVhc2VO
b25OdWxsKCkgfSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCmluZGV4IDdhYjRhYTQxODFlN2FiMTk4
YjEyZTc3YmUyMDZiOWM1YzQxMDIzZmQuLmNhN2E3ZDVmNTdkNjVhOGNiN2ViOTFmM2JkZDU0NjIy
OWQzOTRmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5oCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVy
RWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3Ry
aW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCmluZGV4IGU4OTI2N2NlN2QzNDE0NmQyYTY1ZDZm
MDFkY2U1ZGVmNDljODJmNzguLjZiMTUxY2FiMjBhNDg5ODIzNTA5MDdmMzY1YTczY2Y0OGM2M2Q5
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNm
ZXJFbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIlNWR0ZFRnVuY0JFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiU1ZHRkVGdW5jR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGRUZ1
bmNSRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJT
VkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CiAKQEAgLTYyLDEyICs2MiwxMSBAQCB2b2lkIFNWR0ZFQ29tcG9uZW50VHJh
bnNmZXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
bwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1
dGUobmFtZSwgdmFsdWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwg
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBW
ZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICAKKyAgICBhdXRvIGlucHV0MSA9
IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiByZWQ7CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBncmVlbjsKQEAg
LTg1LDkgKzg0LDcgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHQKICAgICAgICAgICAgIGFscGhh
ID0gZG93bmNhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQ+KGNoaWxkKS50cmFuc2ZlckZ1bmN0aW9uKCk7
CiAgICAgfQogICAgIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3Jl
YXRlKGZpbHRlciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIGVmZmVjdC0+aW5wdXRF
ZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsg
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSwgeyB7
ICppbnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKaW5kZXggYmI1ODkzNDdkODgyNmRmYjM2MDllZGFj
NmU4Yjk5M2E0ZGQ1NDg2My4uZjIyZDUxYTJiZDhjMjM3NjVkYTk4YmZjMjVlNmEyOThhOGVmMmVh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmgKQEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRTogc3ZnQXR0
cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFBy
b3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZH
QW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAppbmRleCAz
Y2E5OWI4NzU3MDhiYmQ4YTZiYWY2NTNkYzA2ZmUyMDVhYzk4MjM1Li42MzA2OTY3YzgzY2E2NDVm
MGQ4ZjY1YThhMzE5OThkMjc1ODNkMzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb3NpdGVFbGVtZW50LmNwcApAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgIlNWR0ZFQ29t
cG9zaXRlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAi
U1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNW
R05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtNDAsNyAr
NDAsNyBAQCBpbmxpbmUgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZQogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VG
bGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZH
TmFtZXM6OmluQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9pbjE+KCk7CiAgICAgICAg
IFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluMkF0dHIsICZT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1faW4yPigpOwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIENvbXBvc2l0ZU9wZXJh
dGlvblR5cGUsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9y
QXR0ciwgRkVDb21wb3NpdGVPcGVyYXRvciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9jb21w
b3NpdGVPcGVyYXRvcj4oKTsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9w
ZXJ0eTxTVkdOYW1lczo6azFBdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2sxPigpOwog
ICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjprMkF0
dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fazI+KCk7CiAgICAgICAgIFByb3BlcnR5UmVn
aXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmszQXR0ciwgJlNWR0ZFQ29tcG9zaXRl
RWxlbWVudDo6bV9rMz4oKTsKQEAgLTU2LDkgKzU2LDkgQEAgUmVmPFNWR0ZFQ29tcG9zaXRlRWxl
bWVudD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGEKIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFt
ZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAgIENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlv
blR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgRkVDb21wb3NpdGVPcGVyYXRvciBw
cm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmZy
b21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCi0gICAgICAg
ICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8Q29tcG9zaXRlT3BlcmF0aW9u
VHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAgICAgICBtX2NvbXBvc2l0ZU9wZXJhdG9yLT5z
ZXRCYXNlVmFsSW50ZXJuYWw8RkVDb21wb3NpdGVPcGVyYXRvcj4ocHJvcGVydHlWYWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBTVkdGRUNvbXBv
c2l0ZUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVj
dCwgY29uc3QKIHsKICAgICBGRUNvbXBvc2l0ZSogY29tcG9zaXRlID0gc3RhdGljX2Nhc3Q8RkVD
b21wb3NpdGUqPihlZmZlY3QpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0
b3JBdHRyKQotICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRPcGVyYXRpb24oc3ZnT3BlcmF0
b3IoKSk7CisgICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldENvbXBvc2l0ZU9wZXJhdG9yKGNv
bXBvc2l0ZU9wZXJhdG9yKCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFBdHRy
KQogICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRLMShrMSgpKTsKICAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikKQEAgLTEzMSwyMCArMTMxLDE1IEBAIHZvaWQgU1ZHRkVD
b21wb3NpdGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRl
ciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVp
bGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWls
ZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKLSAgICAKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBmaWx0ZXIubmFtZWRFZmZl
Y3QoaW4yKCkpOworCiAgICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29tcG9zaXRlOjpjcmVhdGUoZmlsdGVy
LCBzdmdPcGVyYXRvcigpLCBrMSgpLCBrMigpLCBrMygpLCBrNCgpKTsKLSAgICBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5w
dXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlu
cHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4g
ZWZmZWN0OworICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgRkVDb21wb3NpdGU6
OmNyZWF0ZShjb21wb3NpdGVPcGVyYXRvcigpLCBrMSgpLCBrMigpLCBrMygpLCBrNCgpKSwgeyB7
ICppbnB1dDEgfSwgeyAqaW5wdXQyIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKaW5kZXggODFhNzhjODY1N2EwZmEzMDQ0ZGY1YjdjNWEw
ODBkNmU3Nzk3MjJmNi4uZGM5NTQ3OWI1NmFkOTU4ZTM2Y2VjZWFhM2JmNGJhNTYxNGI2NmJjYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaApAQCAtMjcsMTUg
KzI3LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlPD4KLWlubGluZSB1bnNp
Z25lZCBTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhw
b3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7
IH0KK2lubGluZSB1bnNpZ25lZCBTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdG9yPjo6
aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUoKSB7IHJldHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
UklUSE1FVElDOyB9CiAKIHRlbXBsYXRlPD4KLXN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxDb21w
b3NpdGVPcGVyYXRpb25UeXBlPiB7CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3Np
dGVPcGVyYXRvcj4gewogICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyBy
ZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfTElHSFRFUjsgfQogCi0gICAgc3RhdGljIFN0cmlu
ZyB0b1N0cmluZyhDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmlu
ZyB0b1N0cmluZyhGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKQogICAgIHsK
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0
b3IpIHsKICAgICAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BF
UkFUT1JfT1ZFUjoKQEAgLTU4LDcgKzU4LDcgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENv
bXBvc2l0ZU9wZXJhdGlvblR5cGU+IHsKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAg
ICAgfQogCi0gICAgc3RhdGljIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgZnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKQorICAgIHN0YXRpYyBGRUNvbXBvc2l0ZU9wZXJhdG9yIGZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAib3Zl
ciIpCiAgICAgICAgICAgICByZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjsKQEAgLTg1
LDcgKzg1LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGluMSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW4xLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIFN0cmluZyBpbjIoKSBjb25zdCB7IHJldHVybiBt
X2luMi0+Y3VycmVudFZhbHVlKCk7IH0KLSAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIHN2Z09w
ZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdmdPcGVyYXRvci0+Y3VycmVudFZhbHVlPENvbXBv
c2l0ZU9wZXJhdGlvblR5cGU+KCk7IH0KKyAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvci0+Y3VycmVudFZh
bHVlPEZFQ29tcG9zaXRlT3BlcmF0b3I+KCk7IH0KICAgICBmbG9hdCBrMSgpIGNvbnN0IHsgcmV0
dXJuIG1fazEtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxvYXQgazIoKSBjb25zdCB7IHJldHVy
biBtX2syLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIGZsb2F0IGszKCkgY29uc3QgeyByZXR1cm4g
bV9rMy0+Y3VycmVudFZhbHVlKCk7IH0KQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogCiAgICAg
U1ZHQW5pbWF0ZWRTdHJpbmcmIGluMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9pbjE7IH0KICAgICBT
VkdBbmltYXRlZFN0cmluZyYgaW4yQW5pbWF0ZWQoKSB7IHJldHVybiBtX2luMjsgfQotICAgIFNW
R0FuaW1hdGVkRW51bWVyYXRpb24mIHN2Z09wZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX3N2
Z09wZXJhdG9yOyB9CisgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgY29tcG9zaXRlT3BlcmF0
b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fY29tcG9zaXRlT3BlcmF0b3I7IH0KICAgICBTVkdBbmlt
YXRlZE51bWJlciYgazFBbmltYXRlZCgpIHsgcmV0dXJuIG1fazE7IH0KICAgICBTVkdBbmltYXRl
ZE51bWJlciYgazJBbmltYXRlZCgpIHsgcmV0dXJuIG1fazI7IH0KICAgICBTVkdBbmltYXRlZE51
bWJlciYgazNBbmltYXRlZCgpIHsgcmV0dXJuIG1fazM7IH0KQEAgLTEwOSwxMiArMTA5LDEyIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRl
ckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0
ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9w
ZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0Fu
aW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4yIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNy
ZWF0ZSh0aGlzKSB9OwotICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3N2Z09wZXJh
dG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFQ09NUE9TSVRFX09Q
RVJBVE9SX09WRVIpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fY29tcG9z
aXRlT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfT1ZFUikgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazEg
eyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVk
TnVtYmVyPiBtX2syIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJl
ZjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMyB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhp
cykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1l
bnQuaWRsIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKaW5k
ZXggNzhlNDAyMDdmNWIwMmY2NzBmMDQwYjI5Mzc1ZWFkN2MyYjQ1MmRlMC4uZmM2NzBjOWVjNTZj
NDFjMTA5Mjg1NDg0MjdjNWY2YThlMTg1YjFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKQEAgLTM4LDcgKzM4LDcgQEAKIAogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMTsKICAgICByZWFkb25seSBhdHRy
aWJ1dGUgU1ZHQW5pbWF0ZWRTdHJpbmcgICAgICBpbjI7Ci0gICAgW0ltcGxlbWVudGVkQXM9c3Zn
T3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJh
dG9yOworICAgIFtJbXBsZW1lbnRlZEFzPWNvbXBvc2l0ZU9wZXJhdG9yXSByZWFkb25seSBhdHRy
aWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKICAgICByZWFkb25seSBhdHRy
aWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBrMTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
U1ZHQW5pbWF0ZWROdW1iZXIgICAgICBrMjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5p
bWF0ZWROdW1iZXIgICAgICBrMzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCmluZGV4IGY3NTA1ODE1ZGVjYWJiNGVhMzRiNDM1YjQ3ZWE1
YTgwYzZhMjZkZjEuLjA4YTkxNDYwNDU3YWY1MWJiNGQwY2U5NzE4ZjNiOTA5MTIwOGY3MDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNw
cApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJJ
bnRQb2ludC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWls
ZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgpAQCAtMTkxLDEyICsxOTEsMTEgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmEKICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVy
LT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVk
RWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpbnQgb3JkZXJYVmFsdWUgPSBvcmRlclgoKTsK
ICAgICBpbnQgb3JkZXJZVmFsdWUgPSBvcmRlclkoKTsKQEAgLTIwNiwyMiArMjA1LDIyIEBAIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgfQogICAgIC8vIFNwZWMgc2F5cyBvcmRlciBtdXN0
IGJlID4gMC4gQmFpbCBpZiBpdCBpcyBub3QuCiAgICAgaWYgKG9yZGVyWFZhbHVlIDwgMSB8fCBv
cmRlcllWYWx1ZSA8IDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
eyB9OwogICAgIGF1dG8mIGtlcm5lbE1hdHJpeCA9IHRoaXMtPmtlcm5lbE1hdHJpeCgpOwogICAg
IGludCBrZXJuZWxNYXRyaXhTaXplID0ga2VybmVsTWF0cml4Lml0ZW1zKCkuc2l6ZSgpOwogICAg
IC8vIFRoZSBzcGVjIHNheXMgdGhpcyBpcyBhIHJlcXVpcmVtZW50LCBhbmQgc2hvdWxkIGJhaWwg
b3V0IGlmIGZhaWxzCiAgICAgaWYgKG9yZGVyWFZhbHVlICogb3JkZXJZVmFsdWUgIT0ga2VybmVs
TWF0cml4U2l6ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07
CiAKICAgICBpbnQgdGFyZ2V0WFZhbHVlID0gdGFyZ2V0WCgpOwogICAgIGludCB0YXJnZXRZVmFs
dWUgPSB0YXJnZXRZKCk7CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WEF0
dHIpICYmICh0YXJnZXRYVmFsdWUgPCAwIHx8IHRhcmdldFhWYWx1ZSA+PSBvcmRlclhWYWx1ZSkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIC8vIFRo
ZSBzcGVjIHNheXMgdGhlIGRlZmF1bHQgdmFsdWUgaXM6IHRhcmdldFggPSBmbG9vciAoIG9yZGVy
WCAvIDIgKSkKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WEF0dHIpKQog
ICAgICAgICB0YXJnZXRYVmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihvcmRlclhWYWx1
ZSAvIDIpKTsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJnZXRZQXR0cikgJiYg
KHRhcmdldFlWYWx1ZSA8IDAgfHwgdGFyZ2V0WVZhbHVlID49IG9yZGVyWVZhbHVlKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgLy8gVGhlIHNwZWMg
c2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpczogdGFyZ2V0WSA9IGZsb29yICggb3JkZXJZIC8gMiAp
KQogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJnZXRZQXR0cikpCiAgICAgICAg
IHRhcmdldFlWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9yZGVyWVZhbHVlIC8gMikp
OwpAQCAtMjM0LDExICsyMzMsMTEgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICAgICAg
a2VybmVsVW5pdExlbmd0aFlWYWx1ZSA9IDE7CiAgICAgfQogICAgIGlmIChrZXJuZWxVbml0TGVu
Z3RoWFZhbHVlIDw9IDAgfHwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSA8PSAwKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGZsb2F0IGRpdmlzb3JW
YWx1ZSA9IGRpdmlzb3IoKTsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjpkaXZpc29y
QXR0cikgJiYgIWRpdmlzb3JWYWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiB7IH07CiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmRpdmlzb3JBdHRy
KSkgewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGtlcm5lbE1hdHJpeFNpemU7ICsraSkK
ICAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSArPSBrZXJuZWxNYXRyaXguaXRlbXMoKVtpXS0+dmFs
dWUoKTsKQEAgLTI0Niw5ICsyNDUsMTggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICAg
ICAgICAgIGRpdmlzb3JWYWx1ZSA9IDE7CiAgICAgfQogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNv
bnZvbHZlTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllW
YWx1ZSksIGRpdmlzb3JWYWx1ZSwgYmlhcygpLCBJbnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdl
dFlWYWx1ZSksIGVkZ2VNb2RlKCksIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSwg
a2VybmVsVW5pdExlbmd0aFlWYWx1ZSksIHByZXNlcnZlQWxwaGEoKSwga2VybmVsTWF0cml4KTsK
LSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZm
ZWN0OworICAgIHJldHVybiB7CisgICAgICAgIEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZSgKKyAg
ICAgICAgICAgIEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVlKSwKKyAgICAgICAgICAg
IGRpdmlzb3JWYWx1ZSwKKyAgICAgICAgICAgIGJpYXMoKSwKKyAgICAgICAgICAgIEludFBvaW50
KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwKKyAgICAgICAgICAgIGVkZ2VNb2RlKCksCisg
ICAgICAgICAgICBGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUsIGtlcm5lbFVuaXRM
ZW5ndGhZVmFsdWUpLAorICAgICAgICAgICAgcHJlc2VydmVBbHBoYSgpLAorICAgICAgICAgICAg
a2VybmVsTWF0cml4KSwKKyAgICAgICAgeyB7ICppbnB1dDEgfSB9CisgICAgfTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuaAppbmRleCA4NWMwMDI2OThjNjI3N2UwNDM3MGQzNTk4MmE5NWI4ZDkw
NDliMzM5Li44NDI1OTAyMGE4Njk5Njg5MDkwZDIzNWE2OTAyZTRhMzMxYzk3ZmZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaApAQCAtMTAz
LDcgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAg
ICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVh
dGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudC5jcHAKaW5kZXggMTUyYzk4NWZkOGU5NWFlOTk1N2U2ZTIxZDZiZjJhMTBjNDU0
YmRkNS4uNzFkOGM3ZjM5MGRiYmY1MTkyM2VmMDQxMzhjOTQ1Yjc2NjVmOTk1YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKQEAg
LTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
RmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05h
bWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lz
b01hbGxvY0lubGluZXMuaD4KQEAgLTg5LDE0ICs4OSwxNCBAQCBib29sIFNWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZm
ZWN0LAogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsK
ICAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKICAgICAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJl
ci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5z
dmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0gICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRp
bmctPnNldExpZ2h0aW5nQ29sb3IoY29sb3IpOworICAgICAgICByZXR1cm4gZGlmZnVzZUxpZ2h0
aW5nLT5zZXRDb2xvcihjb2xvcik7CiAgICAgfQogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6c3VyZmFjZVNjYWxlQXR0cikKICAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0
U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCiAgICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmct
PnNldERpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29uc3RhbnQoKSk7CiAKLSAgICBhdXRvJiBsaWdo
dFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihkaWZmdXNlTGlnaHRpbmctPmxpZ2h0
U291cmNlKCkpOworICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJj
ZSY+KGRpZmZ1c2VMaWdodGluZy0+c291cmNlKCkpOwogICAgIGNvbnN0IFNWR0ZFTGlnaHRFbGVt
ZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0
aGlzKTsKICAgICBBU1NFUlQobGlnaHRFbGVtZW50KTsKIApAQCAtMTUxLDI4ICsxNTEsMjUgQEAg
dm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgU1ZHRkVMaWdodEUKICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0
dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZp
bHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8
RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZm
ZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZWZQdHIgbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdo
dEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7CiAgICAgaWYgKCFsaWdodEVsZW1lbnQp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIAotICAg
IGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKCpmaWx0ZXJCdWls
ZGVyKTsKKyAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZShm
aWx0ZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7
CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiB7IH07CiAKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlB
cHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdD
b2xvcigpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShm
aWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVu
aXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsK
LSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZm
ZWN0OworICAgIHJldHVybiB7IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZh
Y2VTY2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVs
VW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpLCB7IHsgKmlucHV0MSB9IH0gfTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudC5oCmluZGV4IDY4OTk5NjA5ZjRiNmI1NmE3NmM4OGVhNTY5NWYxZTBlOWUyMDU1ODAuLjdk
OTk0MzFlMTVlY2I2YjNiZjQwYmUyYWUyMjFmNjhkNTYwNmY2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFBy
b3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZH
QW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
LmNwcAppbmRleCAwYzVlODI1YmM4MjU2MGYzNmEyNjllYTZkNzIyZGZkMDUxNzNkOGMyLi45Mjdi
MzRmMzdhZDU2MjQxZTkwNzc2MjcyOTgxMWE4NWFjYjUxYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcApAQCAtMjIsNyArMjIs
NyBAQAogI2luY2x1ZGUgIlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIgogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1
ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lz
b01hbGxvY0lubGluZXMuaD4KIApAQCAtMTE1LDIwICsxMTUsMTUgQEAgdm9pZCBTVkdGRURpc3Bs
YWNlbWVudE1hcEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck4KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9
IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0g
ZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBm
aWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyLm5hbWVk
RWZmZWN0KGluMigpKTsKICAgICAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6
OmNyZWF0ZShmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBz
Y2FsZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAg
ICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChp
bnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9OworCisg
ICAgcmV0dXJuIHsgRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSh4Q2hhbm5lbFNlbGVjdG9yKCks
IHlDaGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSksIHsgeyAqaW5wdXQxIH0sIHsgKmlucHV0MiB9
IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudC5oCmluZGV4IGFhOTFkZjM4YjM2Mjk4ZjEyMWExNDExYzRkMGFlNWVjZDU4NjY1
ZDMuLjEyMzc4MDkwODVhZWQyMjc1YjViMDEwZjQ5OGNmZjZjYjViZTZkZDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKQEAgLTkxLDcg
KzkxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1
dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRl
OwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlz
dGFudExpZ2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50LmNwcAppbmRleCBhNjg2YmI4ZmEzOGQ5ZGRmYTI4ZTAyYWVkOTVlNDFiMDhhMzZm
MmY3Li40YzE1M2JlYTE4ZDc3ZWNiNmMwZjIyZDdhMWIxZTAxMDQxYmI5NTVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcApAQCAtMzYsNyAr
MzYsNyBAQCBSZWY8U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50PiBTVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8
TGlnaHRTb3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmls
dGVyQnVpbGRlciYpIGNvbnN0CitSZWY8TGlnaHRTb3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyJikgY29uc3QKIHsKICAgICByZXR1cm4g
RGlzdGFudExpZ2h0U291cmNlOjpjcmVhdGUoYXppbXV0aCgpLCBlbGV2YXRpb24oKSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgKaW5kZXggZmJk
ZjcxYzBlY2JkOWY5OTdkNjllYTY1NGI5ZjViYTAzMTdkNzFjYy4uNDE2ZmU2MGJlN2IxNmQ5MTgx
NWNiMzllZjUyM2E5ZjRlNGVhMWViMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURp
c3RhbnRMaWdodEVsZW1lbnQuaApAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQmKTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRl
ciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29u
c3QgU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2Yo
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KSA9PSBzaXplb2YoU1ZHRkVMaWdodEVsZW1lbnQpKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4
IDIyYmNlMWQzMzMxN2M5NTcxZmU1ZDc5ZjRiMzI2YTg5YmZjNWI2ODEuLjc5NTRlYzI3MDFiM2E4
NjhkOGQ2MGRlOWM1ZTQzNDM4Yzk1YmY0NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5jcHAKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlICJTVkdG
RURyb3BTaGFkb3dFbGVtZW50LmgiCiAKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1
ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRl
ICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUg
IlNWR1JlbmRlclN0eWxlLmgiCkBAIC05NywyNyArOTcsMjUgQEAgdm9pZCBTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJv
cFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZp
bHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8
fCBzdGREZXZpYXRpb25ZKCkgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHJlbmRl
cmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJl
ci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9y
KCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsKIAotICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQx
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1
dG8gZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmlsdGVyLCBzdGREZXZpYXRpb25YKCks
IHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpOwotICAgIGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAg
cmV0dXJuIHsgRkVEcm9wU2hhZG93OjpjcmVhdGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRp
b25ZKCksIGR4KCksIGR5KCksIGNvbG9yLCBvcGFjaXR5KSwgeyAqaW5wdXQxIH0gfTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKaW5kZXggOWI2
MmQyNGI0NTRiYjdkMjc1OGU3MTJiNjIxYjhjYmU0MmY3NDUxZC4uNTI3NWIxZmNhMDBlYmY1NTFl
YTBkZGFiYjQwYjU1ZGJkMjAyMTBjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9w
U2hhZG93RWxlbWVudC5oCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJz
ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJy
aWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikg
b3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8Rmls
dGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3Ry
eSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1h
dGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVs
ZW1lbnQuY3BwCmluZGV4IGMyMjhlMjJkNTY1ZDBlMTYzZmY4N2QwYjRiY2FiZDIyNDQ3NThmYzIu
LmU2YjhhMjMxOGVjZjU0MmRkYzQ4YWQwZjI5Y2NkMzQ3Zjc3MjZhODIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcApAQCAtNTAsMjYgKzUwLDI2IEBAIGJvb2wgU1ZH
RkVGbG9vZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVm
ZmVjdCwgY29uc3QgUXVhCiAgICAgRkVGbG9vZCogZmxvb2QgPSBzdGF0aWNfY2FzdDxGRUZsb29k
Kj4oZWZmZWN0KTsKIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Zmxvb2RfY29sb3JB
dHRyKQotICAgICAgICByZXR1cm4gZmxvb2QtPnNldEZsb29kQ29sb3Ioc3R5bGUuc3ZnU3R5bGUo
KS5mbG9vZENvbG9yKCkpOworICAgICAgICByZXR1cm4gZmxvb2QtPnNldENvbG9yKHN0eWxlLnN2
Z1N0eWxlKCkuZmxvb2RDb2xvcigpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZs
b29kX29wYWNpdHlBdHRyKQotICAgICAgICByZXR1cm4gZmxvb2QtPnNldEZsb29kT3BhY2l0eShz
dHlsZS5zdmdTdHlsZSgpLmZsb29kT3BhY2l0eSgpKTsKKyAgICAgICAgcmV0dXJuIGZsb29kLT5z
ZXRPcGFjaXR5KHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RPcGFjaXR5KCkpOwogCiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYg
ZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYpIGNv
bnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCisgICAgICAg
IHJldHVybiB7IH07CisKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSByZW5k
ZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpOwogCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+
c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkp
OwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsKIAotICAgIHJl
dHVybiBGRUZsb29kOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgb3BhY2l0eSk7CisgICAgcmV0dXJu
IHsgRkVGbG9vZDo6Y3JlYXRlKGNvbG9yLCBvcGFjaXR5KSwgeyB9IH07CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKaW5kZXggYjk2YTQzYWEzMTNlNzVlNGEzMTY3
MjQ4YTFiNmY1Y2Y1MWZlZTkxMS4uNDgwNWUyM2ExYzczMGEyY2IxYWNmN2NjMzdlZDkzZmE4YTVj
YjEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKQEAgLTM2LDcgKzM2
LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJl
Z2lzdHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKICAg
ICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0
ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKaW5kZXggN2E5OTgyMjRjOTIxOTU1NTI0
NGE4NjljYTc4YTgzMGQ1NjNjNTk5ZC4uOWI2ZWUwNTI5MjM5OGM1NTFkYjc2Njg5NDczYTRlYjJk
OGQyZTMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudC5jcHAKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuaCIKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRl
ckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CkBAIC05NSwxOCArOTUsMTYgQEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUK
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZm
ZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8fCBzdGRE
ZXZpYXRpb25ZKCkgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmaWx0ZXIs
IHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBlZGdlTW9kZSgpKTsKLSAgICBlZmZl
Y3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAg
IHJldHVybiB7IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZp
YXRpb25ZKCksIGVkZ2VNb2RlKCkpLCB7ICppbnB1dDEgfSB9OwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKaW5kZXggZDg5ZTFhNzQ4ZmIy
YzUwOWUyMTRmZTk0YWU0MTAwMWNlNDhlZTBiMi4uZWZkYmYwMDk1MDViMzBmODE5ZWQwYTJiNDIy
YjgzYzJhNWQ1MDU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuaApAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0
cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVJbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50
LmNwcAppbmRleCBlMTQ2ODhhNWViMTc2ZjAyYTE2YzA1NTBmMDgxMTk1ZDNjMjdlYzRmLi42Mzgz
NjEyMDFhNWM0Nzc0MjA2MDlkNGM1YTA3MjVkNGQwMjg0ZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKQEAgLTE3NCwxNiArMTc0LDE3IEBAIHZvaWQgU1ZHRkVJ
bWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29y
a0xvYWRNZXRyaWNzCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJl
bnRSZXNvdXJjZUludmFsaWRhdGlvbigqcGFyZW50UmVuZGVyZXIpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ciYpIGNvbnN0CiB7CiAgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybiBGRUlt
YWdlOjpjcmVhdGVXaXRoSW1hZ2UoZmlsdGVyLCBtX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRl
cmVyKHJlbmRlcmVyKCkpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgICAgICByZXR1cm4g
eyBGRUltYWdlOjpjcmVhdGUoeyAqbV9jYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5k
ZXJlcigpKSB9LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpLCB7IH0gfTsKIAogICAgIGF1dG8gdGFy
Z2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCks
IHRyZWVTY29wZSgpKTsKICAgICBpZiAoaXNEZXNjZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50T2Yo
dGFyZ2V0LmVsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCks
IGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAKKyAgICByZXR1cm4geyB9OworLy8gICAgcmV0dXJuIHsgRkVJbWFnZTo6Y3JlYXRlV2l0aElS
SVJlZmVyZW5jZShmaWx0ZXIsIHRyZWVTY29wZSgpLCBocmVmKCksIHByZXNlcnZlQXNwZWN0UmF0
aW8oKSksIHsgfSB9OwogfQogCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjphZGRTdWJyZXNvdXJj
ZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYgdXJscykgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKaW5kZXggZDkzZTBkMGRiOGI4ODY2NTQ4MGYyMTAxNWEy
NTZiYWRhMTU0YzVjNy4uZWUxMzk5YTYwN2MzNTFmNWVhZTkxYWI1NzA4ZTk4NjRkYWRjZTA5MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKQEAgLTU1LDcgKzU1LDcgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwog
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgdm9pZCBjbGVhclJlc291cmNlUmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVx
dWVzdEltYWdlUmVzb3VyY2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUxpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgK
aW5kZXggY2QwYmZiOWVkY2ZkN2I0ZTFhZjM5YjU1ZWRiYmJkNzg0YWFlYTg5ZC4uM2ZmZTQ4ZjQ0
MDk3NGVlN2E5MWRmZGZlYTEyNDRmYTc0NmZkNTMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TGlnaHRFbGVtZW50LmgKQEAgLTI3LDEyICsyNywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CitjbGFzcyBTVkdGaWx0ZXI7CiAKIGNsYXNzIFNW
R0ZFTGlnaHRFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQgewogICAgIFdURl9NQUtFX0lTT19B
TExPQ0FURUQoU1ZHRkVMaWdodEVsZW1lbnQpOwogcHVibGljOgotICAgIHZpcnR1YWwgUmVmPExp
Z2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBj
b25zdCA9IDA7CiAgICAgc3RhdGljIFNWR0ZFTGlnaHRFbGVtZW50KiBmaW5kTGlnaHRFbGVtZW50
KGNvbnN0IFNWR0VsZW1lbnQqKTsKIAogICAgIGZsb2F0IGF6aW11dGgoKSBjb25zdCB7IHJldHVy
biBtX2F6aW11dGgtPmN1cnJlbnRWYWx1ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVy
Z2VFbGVtZW50LmNwcAppbmRleCBhNTcyYWQ1M2Q5ZjFkNjVkYTNkZWY0ZDUxMTNkNTBhNDI1MjE4
ODhhLi5kNGEyOTY0NjhjMjA2MmY0ZmRkY2UyYjcwYTdiYmIyMWM3OGI1YmFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNs
dWRlICJGRU1lcmdlLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiU1ZH
RkVNZXJnZU5vZGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApA
QCAtNDQsMjQgKzQzLDIyIEBAIFJlZjxTVkdGRU1lcmdlRWxlbWVudD4gU1ZHRkVNZXJnZUVsZW1l
bnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBECiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU1ZHRkVNZXJnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAot
UmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxS
ZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNZXJn
ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gZWZm
ZWN0ID0gRkVNZXJnZTo6Y3JlYXRlKGZpbHRlcik7Ci0gICAgYXV0byYgbWVyZ2VJbnB1dHMgPSBl
ZmZlY3QtPmlucHV0RWZmZWN0cygpOworICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gbWVy
Z2VJbnB1dHM7CiAKICAgICBmb3IgKGF1dG8mIG1lcmdlTm9kZSA6IGNoaWxkcmVuT2ZUeXBlPFNW
R0ZFTWVyZ2VOb2RlRWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgIGF1dG8gbWVyZ2VFZmZlY3Qg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKG1lcmdlTm9kZS5pbjEoKSk7CisgICAgICAg
IGF1dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXIubmFtZWRFZmZlY3QobWVyZ2VOb2RlLmluMSgpKTsK
ICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQoV1RGTW92ZShtZXJnZUVmZmVjdCkpOworICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgbWVyZ2VJbnB1dHMuYXBwZW5kKG1lcmdlRWZmZWN0
LnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAogICAgIG1lcmdlSW5wdXRzLnNocmlua1RvRml0
KCk7Ci0KICAgICBpZiAobWVyZ2VJbnB1dHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0
dXJuIHsgRkVNZXJnZTo6Y3JlYXRlKG1lcmdlSW5wdXRzLnNpemUoKSksIFdURk1vdmUobWVyZ2VJ
bnB1dHMpIH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1l
cmdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKaW5k
ZXggNzQ1MDg2ODE2ZjY5NzZjNjY5N2RjNTEwNzU4MDJkMjgzY2Y0ZTNjMi4uZjRkNTA4OGEzMjJh
ZmRjOTNlNDU2YzEwYzM1YTZiOTQ0Yjc0MDBmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVy
Z2VFbGVtZW50LmgKQEAgLTM1LDcgKzM1LDcgQEAgcHJpdmF0ZToKICAgICB1c2luZyBQcm9wZXJ0
eVJlZ2lzdHJ5ID0gU1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5PFNWR0ZFTWVyZ2VFbGVtZW50LCBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+OwogICAgIGNvbnN0IFNWR1Byb3Bl
cnR5UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3By
b3BlcnR5UmVnaXN0cnk7IH0KIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0
eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudC5jcHAKaW5kZXggZDZmYjk1YzhlMzc3NmU2ZDIwOTNiZWFjZTM1ZTJlZDE3
OTVkMzIxYi4uNmE5NGE1ZGUxNjRkNDdlZTYxMmU1ZmI5ZTc3MjE3Mjg4ODFiMTRmNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcApAQCAtMjIsNyAr
MjIsNyBAQAogI2luY2x1ZGUgIlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCIKIAogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRl
ICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNl
clV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zOSw3
ICszOSw3IEBAIGlubGluZSBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpTVkdGRU1vcnBob2xvZ3lF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hCiAgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2VGbGFnOwogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAgICAgICAg
IFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluQXR0ciwgJlNW
R0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1faW4xPigpOwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3N2Z09wZXJhdG9yPigpOworICAg
ICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRv
ckF0dHIsIE1vcnBob2xvZ3lPcGVyYXRvciwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fbW9y
cGhvbG9neU9wZXJhdG9yPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclBy
b3BlcnR5PFNWR05hbWVzOjpyYWRpdXNBdHRyLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9y
YWRpdXNYLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9yYWRpdXNZPigpOwogICAgIH0pOwog
fQpAQCAtNTksOSArNTksOSBAQCB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnNldFJhZGl1
cyhmbG9hdCB4LCBmbG9hdCB5KQogdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1
ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAg
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRz
PE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgTW9y
cGhvbG9neU9wZXJhdG9yIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9s
b2d5T3BlcmF0b3I+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFs
dWUgPiAwKQotICAgICAgICAgICAgbV9zdmdPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1v
cnBob2xvZ3lPcGVyYXRvclR5cGU+KHByb3BlcnR5VmFsdWUpOworICAgICAgICAgICAgbV9tb3Jw
aG9sb2d5T3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxNb3JwaG9sb2d5T3BlcmF0b3I+KHBy
b3BlcnR5VmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NSw3ICs4NSw3IEBA
IGJvb2wgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZp
bHRlckVmZmVjdCogZWZmZWN0LCBjb25zCiB7CiAgICAgRkVNb3JwaG9sb2d5KiBtb3JwaG9sb2d5
ID0gc3RhdGljX2Nhc3Q8RkVNb3JwaG9sb2d5Kj4oZWZmZWN0KTsKICAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKLSAgICAgICAgcmV0dXJuIG1vcnBob2xvZ3ktPnNl
dE1vcnBob2xvZ3lPcGVyYXRvcihzdmdPcGVyYXRvcigpKTsKKyAgICAgICAgcmV0dXJuIG1vcnBo
b2xvZ3ktPnNldE1vcnBob2xvZ3lPcGVyYXRvcihtb3JwaG9sb2d5T3BlcmF0b3IoKSk7CiAgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7CiAgICAgICAgIC8vIEJvdGgg
c2V0UmFkaXVzIGZ1bmN0aW9ucyBzaG91bGQgYmUgZXZhbHVhdGVkIHNlcGFyYXRlbHkuCiAgICAg
ICAgIGJvb2wgaXNSYWRpdXNYQ2hhbmdlZCA9IG1vcnBob2xvZ3ktPnNldFJhZGl1c1gocmFkaXVz
WCgpKTsKQEAgLTExNCwyMSArMTE0LDE4IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1vcnBob2xvZ3lFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRl
cikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmls
dGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0
QnlJZChpbjEoKSk7CiAgICAgZmxvYXQgeFJhZGl1cyA9IHJhZGl1c1goKTsKICAgICBmbG9hdCB5
UmFkaXVzID0gcmFkaXVzWSgpOworICAgIGlmICh4UmFkaXVzIDwgMCB8fCB5UmFkaXVzIDwgMCkK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZm
ZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBpZiAoeFJhZGl1cyA8IDAgfHwgeVJhZGl1cyA8IDApCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRU1vcnBob2xv
Z3k6OmNyZWF0ZShmaWx0ZXIsIHN2Z09wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRpdXMpOwotICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7
CisgICAgcmV0dXJuIHsgRkVNb3JwaG9sb2d5OjpjcmVhdGUobW9ycGhvbG9neU9wZXJhdG9yKCks
IHhSYWRpdXMsIHlSYWRpdXMpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgK
aW5kZXggMWE5MDg4Yjc1Y2Y4ZDg1YWUzOGYyOTNlMTExOThhNjZmNjZhYTY2OS4uY2JmOTViOTNk
YjNiYThlYTVjY2MxNWRlZmQzNTVhZDYyNDE0ODhhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCkBAIC0yNiwxMiArMjYsMTIgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdGVtcGxhdGU8Pgotc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xv
Z3lPcGVyYXRvclR5cGU+IHsKK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3Bl
cmF0b3I+IHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1WYWx1ZSgpIHsgcmV0dXJu
IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU7IH0KIAotICAgIHN0YXRpYyBTdHJpbmcgdG9T
dHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQorICAgIHN0YXRpYyBTdHJpbmcgdG9T
dHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcikKICAgICB7Ci0gICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBzd2l0Y2ggKG1vcnBob2xvZ3lPcGVyYXRvcikg
ewogICAgICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJB
VE9SX0VST0RFOgpAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9y
cGhvbG9neU9wZXJhdG9yVHlwZT4gewogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBmcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIE1vcnBob2xvZ3lPcGVyYXRvciBmcm9tU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUgPT0gImVyb2Rl
IikKICAgICAgICAgICAgIHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU7CkBAIC02
MiwxMiArNjIsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmFkaXVzKGZsb2F0IHJhZGl1c1gs
IGZsb2F0IHJhZGl1c1kpOwogCiAgICAgU3RyaW5nIGluMSgpIGNvbnN0IHsgcmV0dXJuIG1faW4x
LT5jdXJyZW50VmFsdWUoKTsgfQotICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgc3ZnT3BlcmF0
b3IoKSBjb25zdCB7IHJldHVybiBtX3N2Z09wZXJhdG9yLT5jdXJyZW50VmFsdWU8TW9ycGhvbG9n
eU9wZXJhdG9yVHlwZT4oKTsgfQorICAgIE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3Bl
cmF0b3IoKSBjb25zdCB7IHJldHVybiBtX21vcnBob2xvZ3lPcGVyYXRvci0+Y3VycmVudFZhbHVl
PE1vcnBob2xvZ3lPcGVyYXRvcj4oKTsgfQogICAgIGZsb2F0IHJhZGl1c1goKSBjb25zdCB7IHJl
dHVybiBtX3JhZGl1c1gtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxvYXQgcmFkaXVzWSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmFkaXVzWS0+Y3VycmVudFZhbHVlKCk7IH0KIAogICAgIFNWR0FuaW1h
dGVkU3RyaW5nJiBpbjFBbmltYXRlZCgpIHsgcmV0dXJuIG1faW4xOyB9Ci0gICAgU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fc3ZnT3BlcmF0
b3I7IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBtb3JwaG9sb2d5T3BlcmF0b3JBbmlt
YXRlZCgpIHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9CiAgICAgU1ZHQW5pbWF0ZWRO
dW1iZXImIHJhZGl1c1hBbmltYXRlZCgpIHsgcmV0dXJuIG1fcmFkaXVzWDsgfQogICAgIFNWR0Fu
aW1hdGVkTnVtYmVyJiByYWRpdXNZQW5pbWF0ZWQoKSB7IHJldHVybiBtX3JhZGl1c1k7IH0KIApA
QCAtODEsMTEgKzgxLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZm
ZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmls
dGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlz
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5n
OjpjcmVhdGUodGhpcykgfTsKLSAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdP
cGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRVJPREUpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1f
bW9ycGhvbG9neU9wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1i
ZXI+IG1fcmFkaXVzWCB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBS
ZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVzWSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVh
dGUodGhpcykgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudC5pZGwKaW5kZXggYTJjMTgxZjJlNjM3Y2QzOTA5OGViZTY5ZTYwOThhYmUzYzM4NWNkMS4u
MmQyMWYyYTFkODg4ZDAyZWMxNzlkZjEwZTJkZTQzZmM2NTI5N2Q1NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbApAQCAtMzMsNyArMzMsNyBAQAog
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNWR19NT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAg
ID0gMjsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGlu
MTsKLSAgICBbSW1wbGVtZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNW
R0FuaW1hdGVkRW51bWVyYXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxlbWVudGVkQXM9bW9ycGhv
bG9neU9wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBv
cGVyYXRvcjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBy
YWRpdXNYOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIHJh
ZGl1c1k7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKaW5kZXgg
MDM4MjY4Yjg5YjJmMTlmOWJlNTY4NzM5ZDEyMzAzNTQxMDBhNWVlNy4uZGM2OTJkYWJiYWZjNGQ2
YjZhZjNlNDQyZWNjODVjMTU4Y2QwMTI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zm
c2V0RWxlbWVudC5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkZFT2Zmc2V0Lmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5o
IgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtODEsMTYgKzgxLDEzIEBAIHZvaWQgU1ZH
RkVPZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwg
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBW
ZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVm
ZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRU9mZnNldDo6Y3JlYXRl
KGZpbHRlciwgZHgoKSwgZHkoKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5w
dXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRU9mZnNldDo6Y3JlYXRl
KGR4KCksIGR5KCkpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFT2Zmc2V0RWxlbWVudC5oCmluZGV4IDU3NDczZGNjNzJkYjY3YjEyNWVhMmVkNDY1ZTM1
YjU3MzcwNDliZWUuLjNlZTg4Y2VmZGQyNTJlNzIwYmNjNDA2Y2E2NTExNzQxZDA2ZWQxNjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBj
b25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVj
dD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVn
aXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRT
dHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCmluZGV4IDlmZjg0NzMz
OGExYjZhNTVmY2RiODIxYTA5ZjBhY2MzYzIwN2VhODEuLmRiOTM3Y2ExNTBiODQ0MWI5NDViNGIw
NWU3MjBhZmJkNzdhYTU5MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBv
aW50TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExp
Z2h0RWxlbWVudC5jcHAKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUgIkdlb21ldHJ5VXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiUG9pbnRMaWdodFNvdXJjZS5oIgotI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAKQEAgLTM5LDE5ICszOCwxOSBAQCBSZWY8U1ZHRkVQb2ludExpZ2h0RWxlbWVu
dD4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVQb2ludExpZ2h0RWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6
OmxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitSZWY8TGlnaHRT
b3VyY2U+IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRl
ciYpIGNvbnN0CiB7CiAgICAgRmxvYXRQb2ludDNEIHBvc2l0aW9uOwotICAgIGlmIChidWlsZGVy
LnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJP
VU5ESU5HQk9YKSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3ggPSBidWlsZGVyLnRh
cmdldEJvdW5kaW5nQm94KCk7Ci0gICAgICAgIAotICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVy
ZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7Ci0gICAgICAgIHBvc2l0
aW9uLnNldFkocmVmZXJlbmNlQm94LnkoKSArIHkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7
Ci0KLSAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQ
b2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMu
aHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAgIHBvc2l0aW9uLnNldFooeigp
ICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVy
ZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2UK
LSAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7CisvLyAgICBp
ZiAoZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YKSB7CisvLyAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9
IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgpOworLy8KKy8vICAgICAgICBwb3NpdGlvbi5zZXRY
KHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAg
ICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94Lmhl
aWdodCgpKTsKKy8vCisvLyAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0
ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RS
L1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCisvLyAgICAgICAgcG9z
aXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllD
b3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQp
OworLy8gICAgfSBlbHNlCisvLyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5
KCksIHooKSk7CiAgICAgCiAgICAgcmV0dXJuIFBvaW50TGlnaHRTb3VyY2U6OmNyZWF0ZShwb3Np
dGlvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaApp
bmRleCAzM2E1YmQ3NDkyMDgyOGM5OTg2NDViNzIyZjcyYTc0NWU0OGRhNzllLi5jZGViZTQ3NjE4
NDczMTViMmI5Yjg2NmMyMDE0YzBkMzgyOWVjMWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRVBvaW50TGlnaHRFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBTVkdGRVBvaW50TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWls
ZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShj
b25zdCBTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihTVkdGRVBvaW50TGlnaHRFbGVtZW50KSA9PSBzaXplb2YoU1ZHRkVMaWdodEVsZW1lbnQpKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQuY3BwCmluZGV4IDliN2NlNDBhYjk3MTZhZTRmMzM1ZjU0YjI0Y2RhNDU5YTg0MjlhNTkuLmMx
MTY0MWIwZTIwYjZiNjUwYzliZDY3YjlkZDQ2ODI4YjlkNmRkNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKQEAgLTI2LDcg
KzI2LDcgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVy
QnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KQEAgLTk2LDcgKzk2LDcgQEAgYm9vbCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QKICAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgICAg
IEFTU0VSVChyZW5kZXJlcik7CiAgICAgICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxl
KCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUo
KS5saWdodGluZ0NvbG9yKCkpOwotICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0
TGlnaHRpbmdDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5z
ZXRDb2xvcihjb2xvcik7CiAgICAgfQogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3Vy
ZmFjZVNjYWxlQXR0cikKICAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNldFN1cmZh
Y2VTY2FsZShzdXJmYWNlU2NhbGUoKSk7CkBAIC0xMDUsNyArMTA1LDcgQEAgYm9vbCBTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZm
ZWN0KiBlZmZlY3QKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25l
bnRBdHRyKQogICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0U3BlY3VsYXJFeHBv
bmVudChzcGVjdWxhckV4cG9uZW50KCkpOwogCi0gICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25z
dF9jYXN0PExpZ2h0U291cmNlJj4oc3BlY3VsYXJMaWdodGluZy0+bGlnaHRTb3VyY2UoKSk7Cisg
ICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25zdF9jYXN0PExpZ2h0U291cmNlJj4oc3BlY3VsYXJM
aWdodGluZy0+c291cmNlKCkpOwogICAgIGNvbnN0IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVs
ZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKICAgICBB
U1NFUlQobGlnaHRFbGVtZW50KTsKIApAQCAtMTYwLDI4ICsxNjAsMzEgQEAgdm9pZCBTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpsaWdodEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFNWR0ZFTGlnaHQKICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0K
IAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVj
dD4+PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRl
cikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5
SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkp
OwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0
ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlz
KTsKLSAgICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
Ci0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRl
ckJ1aWxkZXIpOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgCi0gICAgQ29sb3IgY29sb3Ig
PSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+
c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0KLSAgICBhdXRvIGVmZmVjdCA9
IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgp
LCBzcGVjdWxhckNvbnN0YW50KCksIHNwZWN1bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0
aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwotICAgIGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7Cisg
ICAgUmVmUHRyIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVt
ZW50KHRoaXMpOworICAgIGlmICghbGlnaHRFbGVtZW50KQorICAgICAgICByZXR1cm4geyB9Owor
ICAgIAorICAgIHJldHVybiB7CisgICAgICAgIEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKAor
ICAgICAgICAgICAgcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIo
cmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpLAorICAgICAgICAg
ICAgc3VyZmFjZVNjYWxlKCksCisgICAgICAgICAgICBzcGVjdWxhckNvbnN0YW50KCksCisgICAg
ICAgICAgICBzcGVjdWxhckV4cG9uZW50KCksCisgICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3Ro
WCgpLAorICAgICAgICAgICAga2VybmVsVW5pdExlbmd0aFkoKSwKKyAgICAgICAgICAgIGxpZ2h0
RWxlbWVudC0+bGlnaHRTb3VyY2UoZmlsdGVyKSksCisgICAgICAgIHsgeyAqaW5wdXQxIH0gfQor
ICAgIH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5oCmluZGV4IDg5N2I4ZGUxNTZkMWM3OWExZDNmZDhiMzExOGUyYWI2M2I0
N2IxNDYuLjUyZDAxMzI1NzIxOGEyZDA1OWQzNTg5NTU0YjJhNzJmYTUzZTVlOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaApAQCAt
NTgsNyArNTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGln
aHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQu
Y3BwCmluZGV4IGQ2ZGEzMTA2NGNiMWIzN2U4Y2M5Mzg3NGVhNGFhOWNmMmRmYmZmZWUuLjkwNGM4
YWJhMTQ0ZGQ0YWUzYTg2YzAwYTdkOTQ4ZGQxOTRiYTU5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVk
ZSAiU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgiCiAKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGll
cy5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgogI2luY2x1ZGUgIlNwb3RMaWdodFNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CkBAIC0zOSwyNyArMzgsMjcgQEAgUmVmPFNWR0ZFU3BvdExpZ2h0RWxlbWVudD4gU1ZHRkVT
cG90TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGEKICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTVkdGRVNwb3RMaWdodEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQp
KTsKIH0KIAotUmVmPExpZ2h0U291cmNlPiBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291
cmNlKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitSZWY8TGlnaHRTb3VyY2U+IFNW
R0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyJikgY29uc3QK
IHsKICAgICBGbG9hdFBvaW50M0QgcG9zaXRpb247CiAgICAgRmxvYXRQb2ludDNEIHBvaW50c0F0
OwotCi0gICAgaWYgKGJ1aWxkZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNW
R19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVy
ZW5jZUJveCA9IGJ1aWxkZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKLSAgICAgICAgCi0gICAgICAg
IHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0
aCgpKTsKLSAgICAgICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVm
ZXJlbmNlQm94LmhlaWdodCgpKTsKLSAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NW
Ry9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMu
b3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAg
IHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhN
aW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zs
b2F0KTsKLQotICAgICAgICBwb2ludHNBdC5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyBwb2ludHNB
dFgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKLSAgICAgICAgcG9pbnRzQXQuc2V0WShyZWZl
cmVuY2VCb3gueSgpICsgcG9pbnRzQXRZKCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotICAg
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGln
aHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1Vu
aXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9pbnRzQXQuc2V0Wihwb2ludHNBdFoo
KSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZl
cmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7Ci0gICAg
ICAgIHBvaW50c0F0ID0gRmxvYXRQb2ludDNEKHBvaW50c0F0WCgpLCBwb2ludHNBdFkoKSwgcG9p
bnRzQXRaKCkpOwotICAgIH0KKy8vCisvLyAgICBpZiAoZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkg
PT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7CisvLyAg
ICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgp
OworLy8KKy8vICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiBy
ZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAgICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VC
b3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKKy8vICAgICAgICAvLyBodHRw
czovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRl
IGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0
X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb3NpdGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3Rh
bmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlD
b3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7CisvLworLy8gICAgICAgIHBvaW50c0F0LnNldFgo
cmVmZXJlbmNlQm94LngoKSArIHBvaW50c0F0WCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwor
Ly8gICAgICAgIHBvaW50c0F0LnNldFkocmVmZXJlbmNlQm94LnkoKSArIHBvaW50c0F0WSgpICog
cmVmZXJlbmNlQm94LmhlaWdodCgpKTsKKy8vICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcv
VFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3
dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8v
ICAgICAgICBwb2ludHNBdC5zZXRaKHBvaW50c0F0WigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVm
ZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigp
KSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vICAgIH0gZWxzZSB7CisvLyAgICAgICAgcG9zaXRpb24g
PSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7CisvLyAgICAgICAgcG9pbnRzQXQgPSBGbG9h
dFBvaW50M0QocG9pbnRzQXRYKCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFooKSk7CisvLyAgICB9
CiAKICAgICByZXR1cm4gU3BvdExpZ2h0U291cmNlOjpjcmVhdGUocG9zaXRpb24sIHBvaW50c0F0
LCBzcGVjdWxhckV4cG9uZW50KCksIGxpbWl0aW5nQ29uZUFuZ2xlKCkpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oCmluZGV4IDNmNzcxN2MxMjY1YzRmMzFm
NTMwODg2OGQ0N2M5Nzg3OTdhNzMyMTEuLmJlOThmYmVkODY2YzViY2UyZjk5NzU3M2Y3NTliYTQy
MzMyNWM3NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgK
QEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRVNwb3RMaWdodEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRT
b3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlciYpIGNvbnN0IG92
ZXJyaWRlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFNWR0ZFU3BvdExpZ2h0RWxlbWVudCkg
PT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRp
bGVFbGVtZW50LmNwcAppbmRleCAzOWJkY2M3NzM1OTY2NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3
MzcwLi43ZGYyNTJkYWE2NjNkMGIwYWVjMTViODE0YWUyMzBlMzYxNzQxYWRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNs
dWRlICJGRVRpbGUuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdG
aWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CkBAIC03MCwxNiArNzAsMTMgQEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25z
dAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZl
Y3Q+Pj4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7
Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsK
LQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAo
IWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICBhdXRvIGVmZmVjdCA9IEZFVGlsZTo6Y3JlYXRlKGZpbHRlcik7Ci0gICAgZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1
cm4geyBGRVRpbGU6OmNyZWF0ZSgpLCB7ICppbnB1dDEgfSB9OwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAppbmRleCA0NWIzMjcxODUxZDdmYzBkYzJkM2JjYzg3OWEy
MmRjNDJhMzNhOTFmLi43MWE5NzQ2ODM3NjBhZGMwMTZjYzZkZWJlZTM1YTE5MTM1MmVkYzdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBz
dGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+
PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0
cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJp
bmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCmluZGV4IDExNTYxMTE5ZDgz
ZTNmYzc4OGE0MmIxNDg2N2M2NTY0MTIzMzRhNGQuLmNmZDRhZDIxNmZhNGE5ZDRkM2JiZDAyMDc3
OWRhYTY4ZTg1YzdmZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1
bGVuY2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNl
RWxlbWVudC5jcHAKQEAgLTExNywxMSArMTE3LDExIEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVj
dD4+PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImKSBjb25zdAogewog
ICAgIGlmIChiYXNlRnJlcXVlbmN5WCgpIDwgMCB8fCBiYXNlRnJlcXVlbmN5WSgpIDwgMCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKGZp
bHRlciwgdHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3Rh
dmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiB7IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKHR5
cGUoKSwgYmFzZUZyZXF1ZW5jeVgoKSwgYmFzZUZyZXF1ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBz
ZWVkKCksIHN0aXRjaFRpbGVzKCkgPT0gU1ZHX1NUSVRDSFRZUEVfU1RJVENIKSwgeyB9IH07CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCmluZGV4
IGJmOWRhMjJhZDQyZTQxMGExMDQzNWUwYTQwZTM0MjY3NzY5ZTE5OGEuLmI5MTRkZjM4Y2JhMDBm
ZDc4YjM4ZjQyYzNiMGZiMDAyZTgyMmE1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQuaApAQCAtMTE5LDcgKzExOSw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAog
ICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lz
dHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVt
YmVyPiBtX2Jhc2VGcmVxdWVuY3lYIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCmluZGV4IDgxM2JjYmQwODIw
Y2FjNjc3YTc5N2YyN2JjY2U4Y2UxMDkxMmJjNDcuLmRmNjA0YmEyYTZjZDc2ODYyYzkzMzIyZDZj
N2RjODkzZGI3ZTllZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAK
QEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCiAKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIK
ICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmNwcAppbmRleCBmZjUyMjMwOTQ2NmIwNDBiZWYwODlkMTU3YjM4NmRm
ZmJiMDVjNjE5Li43NzFhNDE2ZWYwZWYwNTU4MmQ3Mjk4MWEzMGNjOWQ2MmU2NTI5ZjQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmNwcApAQCAtMjUsOSArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIK
LSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC05MywyMiArOTEsNiBAQCB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaAogICAg
IGludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnNldFN0YW5kYXJkQXR0cmlidXRlcyhGaWx0ZXJFZmZlY3QqIGZpbHRlckVmZmVjdCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoZmlsdGVyRWZmZWN0KTsKLSAgICBpZiAoIWZpbHRlckVmZmVj
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eEF0
dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1godHJ1ZSk7Ci0gICAgaWYgKGhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1ko
dHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkKLSAgICAg
ICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNXaWR0aCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRl
KFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNIZWln
aHQodHJ1ZSk7Ci19Ci0KIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYm
IHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQogewogICAgIHJldHVybiBjcmVhdGVS
ZW5kZXJlcjxSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZT4oKnRoaXMsIFdURk1vdmUo
c3R5bGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRleCBjOThiMTNlZDk2Mjc2YWY5ZTE0ZjY0Mjgx
MWE2ZmQ3NDY3NzJhY2E3Li5lYzI2OWYwM2M0MzYxNzI4NWMyY2UwNjc4NTIxNGFkN2FhZjA1Zjc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oCkBAIC0zMSwxNyArMzEsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGaWx0ZXI7CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFzcyBTVkdGaWx0
ZXJCdWlsZGVyOworY2xhc3MgU1ZHRmlsdGVyOwogCiBjbGFzcyBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMgOiBwdWJsaWMgU1ZHRWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMpOwogcHVibGlj
OgotICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRlckVmZmVjdCopIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiwgRmlsdGVyJikgY29uc3QgPSAwOwotICAgIC8vIFJldHVybnMgdHJ1ZSwgaWYgdGhlIG5ldyB2
YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG9uZS4KLSAgICB2aXJ0dWFsIGJvb2wgc2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKLQogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0
cnk8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLCBTVkdFbGVtZW50PjsKIAog
ICAgIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB4KCkgY29uc3QgeyByZXR1cm4gbV94LT5jdXJyZW50
VmFsdWUoKTsgfQpAQCAtNTYsNiArNTAsMTAgQEAgcHVibGljOgogICAgIFNWR0FuaW1hdGVkTGVu
Z3RoJiBoZWlnaHRBbmltYXRlZCgpIHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAgICAgU1ZHQW5pbWF0
ZWRTdHJpbmcmIHJlc3VsdEFuaW1hdGVkKCkgeyByZXR1cm4gbV9yZXN1bHQ7IH0KIAorICAgIHZp
cnR1YWwgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJF
ZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3QgPSAwOworICAgIC8vIFJldHVybnMgdHJ1
ZSwgaWYgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG9uZS4KKyAgICB2
aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKKwogcHJvdGVjdGVkOgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcyhjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApp
bmRleCAzODVhZjI5MDg0OGEzZDBiODNmMTJhYzk2MTllNmJmOTZjOWYyMzk2Li5iZGM1YmU1YjBj
ZTc5ZDhiYzcxMGNhZmM0NTM3NTZlZWMwYTk3MGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtMyw2ICszLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjMsMTMwICsyNCw3MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlNWR0ZFSW1hZ2UuaCIKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJU
cmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1JlbmRl
cmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVJbWFnZTo6
RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwg
bV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCitSZWY8RkVJbWFnZT4g
RkVJbWFnZTo6Y3JlYXRlKFJlZjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRUltYWdlKFdURk1vdmUoaW1hZ2UpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAK
LUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBj
b25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJl
c2VydmVBc3BlY3RSYXRpbykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdl
KQotICAgICwgbV90cmVlU2NvcGUoJnRyZWVTY29wZSkKLSAgICAsIG1faHJlZihocmVmKQorRkVJ
bWFnZTo6RkVJbWFnZShSZWY8SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCisgICAgOiBtX2ltYWdlKFdURk1vdmUoaW1h
Z2UpKQogICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7
CiB9CiAKLVJlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiBmaWx0
ZXIsIFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKK0Zsb2F0UmVjdCBGRUltYWdlOjpkcmF3aW5nUmVjdChj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIGltYWdlLCBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKSk7CisgICAgcmV0dXJuIHsgfTsKKy8vICAgIEZsb2F0UmVjdCBwYWludFJl
Y3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKCkpOworLy8KKy8vICAgIEZsb2F0UmVjdCBzcmNSZWN0ID0geyB7IH0sIG1faW1h
Z2UtPnNpemUoKSB9OworLy8gICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3Qo
cGFpbnRSZWN0LCBzcmNSZWN0KTsKKy8vCisvLyAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQorLy8g
ICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKKy8vICAgIGVsc2UK
Ky8vICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKKy8vCisvLyAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpOwogfQogCi1SZWY8RkVJbWFnZT4gRkVJ
bWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0
cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorYm9vbCBGRUltYWdlOjphcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0Jikg
Y29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKGZpbHRlciwgdHJlZVNj
b3BlLCBocmVmLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7Ci19Ci0KLXZvaWQgRkVJbWFnZTo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBm
aWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCkpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0OwotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAg
ICAgIHNyY1JlY3Quc2V0U2l6ZShtX2ltYWdlLT5zaXplKCkpOwotICAgICAgICBtX3ByZXNlcnZl
QXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChwYWludFJlY3QsIHNyY1JlY3QpOwotICAgIH0gZWxz
ZSBpZiAoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAg
ICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5k
ZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0KLSAgICBpZiAoY2xpcHNU
b0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7
Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAg
ICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOworLy8g
ICAgQVNTRVJUKHNvdXJjZUltYWdlKTsKKy8vCisvLyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVz
dWx0LmltYWdlQnVmZmVyKCk7CisvLyAgICBpZiAoIXJlc3VsdEltYWdlKQorLy8gICAgICAgIHJl
dHVybiBmYWxzZTsKKy8vCisvLyAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIoKS5hYnNv
bHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOworLy8g
ICAgRmxvYXRSZWN0IHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5z
aXplKCkpOworLy8gICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoZGVzdFJl
Y3QsIHNyY1JlY3QpOworLy8KKy8vICAgIEludFBvaW50IHBhaW50TG9jYXRpb24gPSBhYnNvbHV0
ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CisvLyAgICBkZXN0UmVjdC5tb3ZlKC1wYWludExvY2F0
aW9uLngoKSwgLXBhaW50TG9jYXRpb24ueSgpKTsKKy8vCisvLyAgICByZXN1bHRJbWFnZS5jb250
ZXh0KCkuZHJhd0ltYWdlKCptX2ltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKLVJlbmRlckVsZW1lbnQqIEZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJlcigp
IGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFSW1hZ2U6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X3RyZWVTY29wZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byB0YXJnZXQgPSBT
VkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKG1faHJlZiwgKm1fdHJl
ZVNjb3BlKTsKLSAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+KHRhcmdldC5lbGVtZW50KSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHRhcmdldC5lbGVtZW50LT5yZW5kZXJlcigp
OwotfQotCi12b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKTsKLSAgICBpZiAoIW1f
aW1hZ2UgJiYgIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGRUltYWdlIHJl
c3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQotICAgIHNl
dFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotCi0gICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAg
ICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgZGVz
dFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCkpOwotCi0gICAgRmxvYXRSZWN0IHNyY1JlY3Q7Ci0gICAgaWYgKHJlbmRl
cmVyKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBS
ZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgc3JjUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNp
emUoKSk7Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRlc3RS
ZWN0LCBzcmNSZWN0KTsKLSAgICB9Ci0KLSAgICBJbnRQb2ludCBwYWludExvY2F0aW9uID0gYWJz
b2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgIGRlc3RSZWN0Lm1vdmUoLXBhaW50TG9j
YXRpb24ueCgpLCAtcGFpbnRMb2NhdGlvbi55KCkpOwotCi0gICAgYXV0byYgY29udGV4dCA9IHJl
c3VsdEltYWdlLT5jb250ZXh0KCk7Ci0KLSAgICBpZiAocmVuZGVyZXIpIHsKLSAgICAgICAgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSA9IGZpbHRlcigpLmFic29sdXRl
VHJhbnNmb3JtKCk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKGFic29sdXRlVHJhbnNmb3Jt
KTsKLQotICAgICAgICBSZWZQdHIgY29udGV4dE5vZGUgPSBkb3duY2FzdDxTVkdFbGVtZW50Pihy
ZW5kZXJlci0+ZWxlbWVudCgpKTsKLSAgICAgICAgaWYgKGNvbnRleHROb2RlLT5oYXNSZWxhdGl2
ZUxlbmd0aHMoKSkgewotICAgICAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0
KGNvbnRleHROb2RlLmdldCgpKTsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemU7
Ci0KLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIHJlZmVyZW5jaW5nIGFuIGVsZW1lbnQgd2l0aCBw
ZXJjZW50YWdlIHVuaXRzLCBlZy4gPHJlY3Qgd2l0aD0iMzAlIj4gdGhvc2UgdmFsdWVzIHdlcmUg
cmVzb2x2ZWQgYWdhaW5zdCB0aGUgdmlld3BvcnQuCi0gICAgICAgICAgICAvLyBCdWlsZCB1cCBh
IHRyYW5zZm9ybWF0aW9uIHRoYXQgbWFwcyBmcm9tIHRoZSB2aWV3cG9ydCBzcGFjZSB0byB0aGUg
ZmlsdGVyIHByaW1pdGl2ZSBzdWJyZWdpb24uCi0gICAgICAgICAgICBpZiAobGVuZ3RoQ29udGV4
dC5kZXRlcm1pbmVWaWV3cG9ydCh2aWV3cG9ydFNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRl
eHQuY29uY2F0Q1RNKG1ha2VNYXBCZXR3ZWVuUmVjdHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
dmlld3BvcnRTaXplKSwgZGVzdFJlY3QpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFmZmluZVRy
YW5zZm9ybSBjb250ZW50VHJhbnNmb3JtYXRpb247Ci0gICAgICAgIFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OnJlbmRlclN1YnRyZWVUb0NvbnRleHQoY29udGV4dCwgKnJlbmRlcmVyLCBjb250ZW50VHJh
bnNmb3JtYXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChhdXRvIHJlc3Vs
dCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CiAKLSAgICBjb250ZXh0LmRyYXdJbWFnZSgqbV9pbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3Qp
OworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyB9LCBudWxscHRyKTsKIH0KIAot
VGV4dFN0cmVhbSYgRkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYg
RkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVw
cmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgRmxvYXRTaXplIGltYWdlU2l6ZTsKLSAgICBpZiAo
bV9pbWFnZSkKLSAgICAgICAgaW1hZ2VTaXplID0gbV9pbWFnZS0+c2l6ZSgpOwotICAgIGVsc2Ug
aWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAgICAg
ICAgaW1hZ2VTaXplID0gZW5jbG9zaW5nSW50UmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSkuc2l6ZSgpOworICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBtX2lt
YWdlLT5zaXplKCk7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVJbWFnZSI7Ci0gICAgRmlsdGVy
RWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAg
dHMgPDwgIiBpbWFnZS1zaXplPVwiIiA8PCBpbWFnZVNpemUud2lkdGgoKSA8PCAieCIgPDwgaW1h
Z2VTaXplLmhlaWdodCgpIDw8ICJcIl1cbiI7CiAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGR1
bXAgYWxzbyBvYmplY3QgcmV0dXJuZWQgYnkgU1ZHRkVJbWFnZTo6aW1hZ2UoKSA/CiAgICAgcmV0
dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJ
bWFnZS5oCmluZGV4IGFjMTYwZWRjZTdjMGUwYTA2N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLmE4
MTQ0Zjc2N2NiZDg3NGNlZjQ1MDY5NWFjMGJhZjUwZDJjZDFjNjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTMsNiArMyw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI3LDM2ICsyOCwyNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIERvY3VtZW50OwogY2xhc3MgSW1hZ2U7Ci1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3Mg
VHJlZVNjb3BlOwogCiBjbGFzcyBGRUltYWdlIGZpbmFsIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoRmlsdGVy
JiwgUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0g
ICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYsIFRy
ZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZSYpOworICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlKFJlZjxJbWFnZT4sIGNvbnN0IFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgfkZF
SW1hZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBj
b25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBGRUltYWdlKEZpbHRlciYs
IFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZSYpOworICAgIEZFSW1hZ2UoUmVmPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlJik7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIkZFSW1hZ2UiOyB9CiAKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVj
dFR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2U7IH0KKyAg
ICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZW5kZXJFbGVt
ZW50KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdDsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5
KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpIGZpbmFsOwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBmaW5h
bDsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8
SW1hZ2U+IG1faW1hZ2U7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBmaW5hbDsK
IAotICAgIC8vIG1fdHJlZVNjb3BlIHdpbGwgbmV2ZXIgYmUgYSBkYW5nbGluZyByZWZlcmVuY2Uu
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkyNDMKLSAgICBU
cmVlU2NvcGUqIG1fdHJlZVNjb3BlIHsgbnVsbHB0ciB9OwotICAgIFN0cmluZyBtX2hyZWY7Cisg
ICAgUmVmPEltYWdlPiBtX2ltYWdlOwogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBt
X3ByZXNlcnZlQXNwZWN0UmF0aW87CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAppbmRleCA5YTk0YTQ2MDM1ODc5MDhhMzg0ZDE3
NDI3YjM3MTkzNTkyYjdiY2U3Li41NzMyMDlhZTg5ZTRlOWZkODgxNGI0ZDY4YTJjZTE2ZTQwOGFk
ZmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlci5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMiwyOSArMjMsMTU4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmls
dGVyLmgiCiAKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBo
YS5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1TVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJS
ZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCi0gICAgOiBGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zv
cm0pCi0gICAgLCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihhYnNvbHV0ZVNvdXJjZURy
YXdpbmdSZWdpb24pCi0gICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94
KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQotICAgICwgbV9lZmZlY3RCQm94
TW9kZShlZmZlY3RCQm94TW9kZSkKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRl
KFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOworICAgIGlmIChmaWx0ZXJFbGVtZW50
LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYobmV3IFNWR0ZpbHRlcihyZW5k
ZXJpbmdNb2RlKSk7CisgICAgCisgICAgZmlsdGVyLT5zZXR1cEJ1aWx0aW5FZmZlY3RzKHByZXZp
b3VzRWZmZWN0KTsKKyAgICAKKyAgICBGaWx0ZXJFZmZlY3RzSW5wdXRzIGVmZmVjdHNJbnB1dHM7
CisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRWZmZWN0cyhmaWx0ZXJFbGVtZW50LCBlZmZlY3RzSW5w
dXRzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIWZpbHRlci0+YnVpbGRF
eHByZXNzaW9uKGVmZmVjdHNJbnB1dHMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBmaWx0ZXI7Cit9CisKK1NWR0ZpbHRlcjo6U1ZHRmlsdGVyKFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSkKKyAgICA6IEZpbHRlcihyZW5kZXJpbmdNb2RlLCBUeXBlOjpTVkcpCit7
Cit9CisKK3ZvaWQgU1ZHRmlsdGVyOjphZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBu
YW1lLCBSZWY8RmlsdGVyRWZmZWN0PiBlZmZlY3QpCit7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgp
KSB7CisgICAgICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVjdC5wdHIoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKG5hbWUpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2xhc3RFZmZlY3QgPSBlZmZlY3QucHRyKCk7CisgICAgbV9u
YW1lZEVmZmVjdHMuc2V0KG5hbWUsIFdURk1vdmUoZWZmZWN0KSk7Cit9CisKK1JlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZpbHRlcjo6bmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSkg
Y29uc3QKK3sKKyAgICBpZiAobmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fbGFzdEVm
ZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBtX2xhc3RFZmZlY3Q7CisKKyAgICAgICAgcmV0dXJu
IG1fYnVpbHRpbkVmZmVjdHMuZ2V0KFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSk7CisgICAg
fQorCisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMobmFtZSkpCisgICAgICAgIHJl
dHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChuYW1lKTsKKworICAgIHJldHVybiBtX25hbWVkRWZm
ZWN0cy5nZXQobmFtZSk7Cit9CisKK3ZvaWQgU1ZHRmlsdGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3Rz
KEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpCiB7Ci0gICAgbV9hYnNvbHV0ZUZpbHRlclJl
Z2lvbiA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyUmVnaW9uKTsKKyAgICBpZiAo
cHJldmlvdXNFZmZlY3QpIHsKKyAgICAgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSgpLCBSZWY8RmlsdGVyRWZmZWN0PiB7ICpwcmV2aW91c0VmZmVjdCB9
KTsKKyAgICAgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUo
KSwgU291cmNlQWxwaGE6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGF1dG8gc291cmNlR3JhcGhpYyA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOworICAgIG1fYnVp
bHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwgc291cmNlR3JhcGhp
Yyk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwg
U291cmNlQWxwaGE6OmNyZWF0ZSgpKTsKIH0KIAotRmxvYXRTaXplIFNWR0ZpbHRlcjo6c2NhbGVk
QnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSBzaXplKSBjb25zdAorYm9vbCBTVkdGaWx0ZXI6
OmJ1aWxkRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBGaWx0ZXJFZmZl
Y3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzKQogewotICAgIGlmIChtX2VmZmVjdEJCb3hNb2RlKQot
ICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpOworICAgIGF1
dG8gc291cmNlR3JhcGhpYyA9IG5hbWVkRWZmZWN0KFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUo
KSk7CisgICAgYXV0byBzb3VyY2VBbHBoYSA9IG5hbWVkRWZmZWN0KFNvdXJjZUFscGhhOjplZmZl
Y3ROYW1lKCkpOworICAgIGVmZmVjdHNJbnB1dHMuc2V0KHNvdXJjZUFscGhhLnJlbGVhc2VOb25O
dWxsKCksIEZpbHRlckVmZmVjdFZlY3RvciB7IHNvdXJjZUdyYXBoaWMucmVsZWFzZU5vbk51bGwo
KSB9KTsKKworICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCkpIHsKKyAg
ICAgICAgYXV0byBbZWZmZWN0LCBpbnB1dHNdID0gZWZmZWN0RWxlbWVudC5idWlsZCgqdGhpcyk7
CisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGVmZmVjdHNJbnB1dHMuc2V0KHsgKmVmZmVjdCB9LCBXVEZNb3ZlKGlucHV0cykpOworICAg
ICAgICBhZGROYW1lZEVmZmVjdChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCBlZmZlY3QucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHRmls
dGVyOjpidWlsZEV4cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVjdD4mIGVmZmVjdCwgY29u
c3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0c0lucHV0cywgRmlsdGVyRWZmZWN0VmVjdG9y
JiBzdGFjaykKK3sKKyAgICBpZiAoc3RhY2suY29udGFpbnMoZWZmZWN0KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIG1fZXhwcmVzc2lvbi5pbnNlcnQoMCwgeyBlZmZlY3QgfSk7
CisKKyAgICBzdGFjay5hcHBlbmQoZWZmZWN0KTsKKworICAgIGZvciAoYXV0byYgaW5wdXRFZmZl
Y3QgOiBlZmZlY3RzSW5wdXRzLmdldChlZmZlY3QpKSB7CisgICAgICAgIGlmICghYnVpbGRFeHBy
ZXNzaW9uKGlucHV0RWZmZWN0LCBlZmZlY3RzSW5wdXRzLCBzdGFjaykpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAg
IEFTU0VSVChzdGFjay5sYXN0KCkucHRyKCkgPT0gZWZmZWN0LnB0cigpKTsKKworICAgIHN0YWNr
LnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdGaWx0ZXI6OmJ1
aWxkRXhwcmVzc2lvbihjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzKQor
eworICAgIGlmICghbV9sYXN0RWZmZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgRmlsdGVyRWZmZWN0VmVjdG9yIHN0YWNrOworICAgIHJldHVybiBidWlsZEV4cHJlc3Npb24o
eyAqbV9sYXN0RWZmZWN0IH0sIGVmZmVjdHNJbnB1dHMsIHN0YWNrKTsKK30KKworRmlsdGVyUmVz
dWx0KiBTVkdGaWx0ZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2xhc3RFZmZlY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFzdGFj
ay5pc0VtcHR5KCkpCisgICAgICAgIHNvdXJjZUltYWdlID0gc3RhY2sudGFrZUxhc3QoKS0+aW1h
Z2VCdWZmZXIoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0
KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZXhwcmVzc2lvbikgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGVmZmVjdC0+YXBw
bHkob3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2UpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHN0YWNrLmFwcGVuZCh7ICpyZXN1
bHQgfSk7CisgICAgICAgIG91dHB1dC5yZXN1bHRzKCkuYWRkKGVmZmVjdCwgUmVmPEZpbHRlclJl
c3VsdD4oKnJlc3VsdCkpOworICAgIH0KIAotICAgIHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbihzaXplKSAqIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb24uc2l6ZSgpIC8gbV9m
aWx0ZXJSZWdpb24uc2l6ZSgpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPT0gMSk7CisgICAg
YXV0byByZXN1bHQgPSBzdGFjay50YWtlTGFzdCgpOworICAgIHJlc3VsdC0+dHJhbnNmb3JtVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICByZXR1cm4gJnJl
c3VsdC5sZWFrUmVmKCk7CiB9CiAKLVJlZjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYg
YWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5k
aW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9k
ZSkKK1RleHRTdHJlYW0mIFNWR0ZpbHRlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRmlsdGVyKGFic29sdXRlVHJhbnNmb3JtLCBhYnNv
bHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJSZWdpb24s
IGVmZmVjdEJCb3hNb2RlKSk7CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2V4cHJlc3Npb24p
CisgICAgICAgIGVmZmVjdC0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOworICAgIHJldHVybiB0czsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCA4MDkz
MTQ2ZDY0YWY4ODg1YmMzZGE0OTMwMmY1YWVhMGZiMTcwMGNmLi5kMjliZWI1NzlkM2VmZWFiY2E4
NDNkOGFlNjIxMDNkNWJjODNjZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMCw0MSArMjEsNTYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3Qu
aCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVk
ZSA8d3RmL1R5cGVDYXN0cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0Zp
bHRlckVsZW1lbnQ7CisKIGNsYXNzIFNWR0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxT
VkdGaWx0ZXI+IGNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBib29sKTsKKyAgICBzdGF0aWMg
UmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBSZW5kZXJpbmdNb2Rl
ID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0Vm
ZmVjdCA9IG51bGxwdHIpOwogCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3Qg
ZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZUZpbHRlclJlZ2lv
bjsgfQorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJp
bmcmIG5hbWUpIGNvbnN0OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSBj
b25zdCB7IHJldHVybiBtX2xhc3RFZmZlY3Q7IH0KIAotICAgIEZsb2F0U2l6ZSBzY2FsZWRCeUZp
bHRlclJlc29sdXRpb24oRmxvYXRTaXplKSBjb25zdCBmaW5hbDsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPFNWR0ZpbHRlcj4+IGRl
Y29kZShEZWNvZGVyJik7CiAKLSAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247IH0KLSAgICBGbG9h
dFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5n
Qm94OyB9Citwcml2YXRlOgorICAgIFNWR0ZpbHRlcihSZW5kZXJpbmdNb2RlKTsKIAotICAgIGJv
b2wgaXNTVkdGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBh
ZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBSZWY8RmlsdGVyRWZmZWN0Pik7
CiAKLXByaXZhdGU6Ci0gICAgU1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9u
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZp
bHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSk7CisgICAgdm9pZCBzZXR1cEJ1aWx0aW5F
ZmZlY3RzKEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpOworICAgIGJvb2wgYnVpbGRFZmZl
Y3RzKFNWR0ZpbHRlckVsZW1lbnQmLCBGaWx0ZXJFZmZlY3RzSW5wdXRzJik7CisgICAgYm9vbCBi
dWlsZEV4cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVjdD4mLCBjb25zdCBGaWx0ZXJFZmZl
Y3RzSW5wdXRzJiwgRmlsdGVyRWZmZWN0VmVjdG9yJiBzdGFjayk7CisgICAgYm9vbCBidWlsZEV4
cHJlc3Npb24oY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYpOwogCi0gICAgRmxvYXRSZWN0IG1f
YWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5k
aW5nQm94OwotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOwotICAgIEZsb2F0
UmVjdCBtX2ZpbHRlclJlZ2lvbjsKLSAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7CisgICAgRmls
dGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IGZpbmFsOworCisgICAgVGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0IGZpbmFsOworCisgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWY8RmlsdGVyRWZm
ZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKKyAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0
ZXJFZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsKKyAgICBWZWN0b3I8UmVmPGNvbnN0IEZpbHRlckVm
ZmVjdD4+IG1fZXhwcmVzc2lvbjsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZl
Y3Q7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIFNWR0ZpbHRlcjo6ZW5j
b2RlKEVuY29kZXImKSBjb25zdAoreworICAgIAorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNv
ZGVyPiBzdGQ6Om9wdGlvbmFsPFJlZjxTVkdGaWx0ZXI+PiBTVkdGaWx0ZXI6OmRlY29kZShEZWNv
ZGVyJikKK3sKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmlsdGVy
KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikg
eyByZXR1cm4gZmlsdGVyLmlzU1ZHRmlsdGVyKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci50eXBlKCkgPT0g
V2ViQ29yZTo6RmlsdGVyOjpUeXBlOjpTVkc7IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5E
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyQnVpbGRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZjNhODA1
MDQyOTU1NTgxMDM0ZDk4YTRmZGFjNGVhZjMwODdiOTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKLQotI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCi0jaW5jbHVk
ZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
TnVtYmVycy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNWR0ZpbHRlckJ1aWxkZXI6OlNW
R0ZpbHRlckJ1aWxkZXIoUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYykKLXsKLSAg
ICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJj
ZUdyYXBoaWMpOwotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3RO
YW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKnNvdXJjZUdyYXBoaWMpKTsKLSAgICBhZGRCdWls
dGluRWZmZWN0cygpOwotfQotCi12b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9t
U3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0KQotewotICAgIGlmIChpZC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgbV9sYXN0RWZmZWN0ID0gZWZmZWN0OwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMoaWQpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3RFZmZlY3QgPSBlZmZlY3Q7Ci0gICAgbV9uYW1lZEVm
ZmVjdHMuc2V0KGlkLCBtX2xhc3RFZmZlY3QpOwotfQotCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkKGNvbnN0IEF0b21TdHJpbmcmIGlkKSBjb25z
dAotewotICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG1fbGFzdEVmZmVjdCkK
LSAgICAgICAgICAgIHJldHVybiBtX2xhc3RFZmZlY3Q7Ci0KLSAgICAgICAgcmV0dXJuIG1fYnVp
bHRpbkVmZmVjdHMuZ2V0KFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSk7Ci0gICAgfQotCi0g
ICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMoaWQpKQotICAgICAgICByZXR1cm4gbV9i
dWlsdGluRWZmZWN0cy5nZXQoaWQpOwotCi0gICAgcmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChp
ZCk7Ci19Ci0KLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZl
cmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYgZWZmZWN0LCBSZW5kZXJPYmplY3QqIG9iamVj
dCkKLXsKLSAgICAvLyBUaGUgZWZmZWN0IG11c3QgYmUgYSBuZXdseSBjcmVhdGVkIGZpbHRlciBl
ZmZlY3QuCi0gICAgQVNTRVJUKCFtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7
Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgIW1fZWZmZWN0UmVuZGVyZXIuY29udGFpbnMob2JqZWN0
KSk7Ci0gICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChlZmZlY3QsIEZpbHRlckVmZmVjdFNldCgp
KTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKS5zaXplKCk7Ci0KLSAgICAvLyBJdCBpcyBub3QgcG9zc2libGUgdG8gYWRkIHRoZSBz
YW1lIHZhbHVlIHRvIGEgc2V0IHR3aWNlLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZklucHV0RWZmZWN0czsgKytpKQotICAgICAgICBlZmZlY3RSZWZlcmVuY2VzKGVmZmVj
dC0+aW5wdXRFZmZlY3QoaSkpLmFkZChlZmZlY3QuZ2V0KCkpOwotCi0gICAgLy8gSWYgb2JqZWN0
IGlzIG51bGwsIHRoYXQgbWVhbnMgdGhlIGVsZW1lbnQgaXNuJ3QgYXR0YWNoZWQgZm9yIHNvbWUK
LSAgICAvLyByZWFzb24sIHdoaWNoIGluIHR1cm4gbWVhbiB0aGF0IGNlcnRhaW4gdHlwZXMgb2Yg
aW52YWxpZGF0aW9uIHdpbGwgbm90Ci0gICAgLy8gd29yayAodGhlIExheW91dE9iamVjdCAtPiBG
aWx0ZXJFZmZlY3QgbWFwcGluZyB3aWxsIG5vdCBiZSBkZWZpbmVkKS4KLSAgICBpZiAob2JqZWN0
KQotICAgICAgICBtX2VmZmVjdFJlbmRlcmVyLmFkZChvYmplY3QsIGVmZmVjdC5nZXQoKSk7Ci19
Ci0KLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJFZmZlY3RzKCkKLXsKLSAgICBtX2xhc3RF
ZmZlY3QgPSBudWxscHRyOwotICAgIG1fbmFtZWRFZmZlY3RzLmNsZWFyKCk7Ci0gICAgbV9lZmZl
Y3RSZWZlcmVuY2VzLmNsZWFyKCk7Ci0gICAgbV9lZmZlY3RSZW5kZXJlci5jbGVhcigpOwotICAg
IGFkZEJ1aWx0aW5FZmZlY3RzKCk7Ci19Ci0KLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJS
ZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQotewotICAgIGlmICghZWZmZWN0
LT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWZmZWN0LT5jbGVhclJlc3Vs
dCgpOwotCi0gICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBlZmZlY3RSZWZlcmVuY2VzKGVmZmVj
dCkpCi0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShyZWZlcmVuY2UpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGM3N2FlMDhiYWM2NWMzYzJjZmM4OTc0ZmEzM2U3NjQ2MGNlOTdmYTcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3Nl
ZHBlbmd1aW5ib2JAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgotI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5n
SGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7Ci0K
LWNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIHR5cGVkZWYgSGFzaFNldDxGaWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RT
ZXQ7Ci0KLSAgICBTVkdGaWx0ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdy
YXBoaWMpOwotCi0gICAgdm9pZCBzZXRUYXJnZXRCb3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3Qm
IHIpIHsgbV90YXJnZXRCb3VuZGluZ0JveCA9IHI7IH0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91
bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9Ci0gICAgCi0g
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpbWl0aXZlVW5pdHM7IH0KLSAgICB2b2lkIHNldFByaW1pdGl2ZVVuaXRzKFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGUgdW5pdHMpIHsgbV9wcmltaXRpdmVVbml0cyA9IHVuaXRzOyB9
Ci0KLSAgICB2b2lkIGFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVj
dD4pOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZ2V0RWZmZWN0QnlJZChjb25zdCBBdG9t
U3RyaW5nJikgY29uc3Q7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0RWZmZWN0LmdldCgpOyB9Ci0KLSAgICB2b2lkIGFwcGVuZEVmZmVjdFRvRWZm
ZWN0UmVmZXJlbmNlcyhSZWZQdHI8RmlsdGVyRWZmZWN0PiYmLCBSZW5kZXJPYmplY3QqKTsKLQot
ICAgIGlubGluZSBGaWx0ZXJFZmZlY3RTZXQmIGVmZmVjdFJlZmVyZW5jZXMoRmlsdGVyRWZmZWN0
KiBlZmZlY3QpCi0gICAgewotICAgICAgICAvLyBPbmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVs
b25ncyB0byB0aGlzIGJ1aWxkZXIuCi0gICAgICAgIEFTU0VSVChtX2VmZmVjdFJlZmVyZW5jZXMu
Y29udGFpbnMoZWZmZWN0KSk7Ci0gICAgICAgIHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmlu
ZChlZmZlY3QpLT52YWx1ZTsKLSAgICB9Ci0KLSAgICAvLyBSZXF1aXJlZCB0byBjaGFuZ2UgdGhl
IGF0dHJpYnV0ZXMgb2YgYSBmaWx0ZXIgZHVyaW5nIGFuIHN2Z0F0dHJpYnV0ZUNoYW5nZWQuCi0g
ICAgaW5saW5lIEZpbHRlckVmZmVjdCogZWZmZWN0QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9i
amVjdCkgeyByZXR1cm4gbV9lZmZlY3RSZW5kZXJlci5nZXQob2JqZWN0KTsgfQotCi0gICAgdm9p
ZCBjbGVhckVmZmVjdHMoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJF
ZmZlY3QqKTsKLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygp
Ci0gICAgewotICAgICAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fYnVpbHRpbkVmZmVjdHMudmFs
dWVzKCkpCi0gICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGVmZmVjdCwgRmlsdGVy
RWZmZWN0U2V0KCkpOwotICAgIH0KLQotICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPEZp
bHRlckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBS
ZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9uYW1lZEVmZmVjdHM7Ci0gICAgLy8gVGhlIHZhbHVlIGlz
IGEgbGlzdCwgd2hpY2ggY29udGFpbnMgdGhvc2UgZmlsdGVyIGVmZmVjdHMsCi0gICAgLy8gd2hp
Y2ggZGVwZW5kcyBvbiB0aGUga2V5IGZpbHRlciBlZmZlY3QuCi0gICAgSGFzaE1hcDxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgRmlsdGVyRWZmZWN0U2V0PiBtX2VmZmVjdFJlZmVyZW5jZXM7Ci0gICAg
SGFzaE1hcDxSZW5kZXJPYmplY3QqLCBGaWx0ZXJFZmZlY3QqPiBtX2VmZmVjdFJlbmRlcmVyOwot
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9sYXN0RWZmZWN0OwotICAgIEZsb2F0UmVjdCBt
X3RhcmdldEJvdW5kaW5nQm94OwotICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbV9wcmlt
aXRpdmVVbml0cyB7IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSB9
OwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjVmN2ViZGMxYjFlMTkxZDIyMGQ2NTJiYzgwNzUxZGVmNTJjMTUxZGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9t
ZXRyeS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0ZpbHRlckdlb21ldHJ5IDogcHVi
bGljIEZpbHRlckdlb21ldHJ5IHsKK3B1YmxpYzoKKyAgICBTVkdGaWx0ZXJHZW9tZXRyeShjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRTaXplJiBy
ZXNvbHV0aW9uKQorICAgICAgICA6IEZpbHRlckdlb21ldHJ5KGZpbHRlclJlZ2lvbiwgc291cmNl
SW1hZ2VSZWN0KQorICAgICAgICAsIG1fYWJzb2x1dGVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zv
cm0pCisgICAgICAgICwgbV9yZXNvbHV0aW9uKHJlc29sdXRpb24pCisgICAgeworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgdHJhbnNmb3JtVG9BYnNvbHV0ZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byByZWN0SW5V
c2VyU3BhY2UgPSBtX2Fic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7CisgICAgICAgIHJl
Y3RJblVzZXJTcGFjZS5zY2FsZShtX3Jlc29sdXRpb24pOworICAgICAgICByZXR1cm4gcmVjdElu
VXNlclNwYWNlOworICAgIH0KKworICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb24oY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICByZXR1cm4gRmlsdGVyR2VvbWV0cnk6OnByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpOwor
ICAgICAgICAKKy8vICAgICAgICByZXR1cm4gRmxvYXRSZWN0IHsKKy8vICAgICAgICAgICAgcHJp
bWl0aXZlQm91bmRyaWVzLngudmFsdWVfb3Ioc3VicmVnaW9uLngoKSksCisvLyAgICAgICAgICAg
IHByaW1pdGl2ZUJvdW5kcmllcy55LnZhbHVlX29yKHN1YnJlZ2lvbi55KCkpLAorLy8gICAgICAg
ICAgICBwcmltaXRpdmVCb3VuZHJpZXMud2lkdGgudmFsdWVfb3Ioc3VicmVnaW9uLndpZHRoKCkp
LAorLy8gICAgICAgICAgICBwcmltaXRpdmVCb3VuZHJpZXMuaGVpZ2h0LnZhbHVlX29yKHN1YnJl
Z2lvbi5oZWlnaHQoKSkKKy8vICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBBZmZpbmVUcmFu
c2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKKyAgICBGbG9hdFNpemUgbV9yZXNvbHV0aW9uOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
eG1sL1hQYXRoR3JhbW1hci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNw
cAppbmRleCAwODc1YTVlY2ZmYTljNjdlNjBjMWFmNjZjOTBjNzA5NWZlN2JkMTA0Li44ZmIwZjQw
MjZjYmUzOTkwNDAzMjFmM2UyYTgyOWM2ODUyZDQ4Yjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhH
cmFtbWFyLmNwcApAQCAtMTk4Niw3ICsxOTg2LDcgQEAgeXlyZWR1Y2U6CiAjbGluZSA0MTkgIldl
YkNvcmUveG1sL1hQYXRoR3JhbW1hci55IgogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+PiBwcmVkaWNhdGVMaXN0KCh5eXZz
cFsoMikgLSAoMildLmV4cHJlc3Npb25WZWN0b3IpKTsKLSAgICAgICAgKHl5dmFsLmV4cHJlc3Np
b24pID0gbmV3IEZpbHRlcihzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4oKHl5dnNwWygxKSAt
ICgyKV0uZXhwcmVzc2lvbikpLCBXVEZNb3ZlKCpwcmVkaWNhdGVMaXN0KSk7CisgICAgICAgICh5
eXZhbC5leHByZXNzaW9uKSA9IG5ldyBYUGF0aDo6RmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHBy
ZXNzaW9uPigoeXl2c3BbKDEpIC0gKDIpXS5leHByZXNzaW9uKSksIFdURk1vdmUoKnByZWRpY2F0
ZUxpc3QpKTsKICAgICA7fQogICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFBhdGhHcmFtbWFyLnkgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkK
aW5kZXggYjc1MWE2MWJhM2Y0MjIyNDBlN2MwYmUwZTRmNWQ2MTNlMmY3YTU1Yi4uMzUzMDk4MGFi
MmE5NGU3NjZiZGNjYjkyMGJkN2E5ZTRjZGEyYzUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoR3JhbW1hci55CisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1t
YXIueQpAQCAtNDE4LDcgKzQxOCw3IEBAIEZpbHRlckV4cHI6CiAgICAgUHJpbWFyeUV4cHIgUHJl
ZGljYXRlTGlzdAogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8RXhwcmVzc2lvbj4+PiBwcmVkaWNhdGVMaXN0KCQyKTsKLSAgICAgICAgJCQgPSBu
ZXcgRmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigkMSksIFdURk1vdmUoKnByZWRp
Y2F0ZUxpc3QpKTsKKyAgICAgICAgJCQgPSBuZXcgWFBhdGg6OkZpbHRlcihzdGQ6OnVuaXF1ZV9w
dHI8RXhwcmVzc2lvbj4oJDEpLCBXVEZNb3ZlKCpwcmVkaWNhdGVMaXN0KSk7CiAgICAgfQogICAg
IDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCmluZGV4IGFhOTQ1NjQxNDlkMDhlNDg5NjM0N2Q5
NGYwMzk0NjE1NDcyOWJmNzMuLjExZWZhYzkxZDQ0YzQ2ZWM4NTNjNzhjNjhlYzU0MGNhZGE1ZWNj
MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJEaXNwbGF5TGlzdFJlYWRlckhhbmRsZS5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVm
ZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyLmgiCkBA
IC00NzgsNiArNDgwLDM1IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0U2hhcmVh
YmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nCiAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShoYW5kbGUpKTsKIH0KIAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIElQQzo6RmlsdGVyUmVmZXJlbmNlJiYgZmlsdGVyUmVmZXJlbmNl
LCBJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlJiYgZ2VvbWV0cnlSZWZlcmVuY2UsCisgICAg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGF1dG8gZmlsdGVyID0gZmlsdGVyUmVmZXJlbmNlLnRha2VGaWx0ZXIoKTsKKyAgICBhdXRvIGdl
b21ldHJ5ID0gZ2VvbWV0cnlSZWZlcmVuY2UudGFrZUdlb21ldHJ5KCk7CisgICAgCisgICAgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIFsmXSgpIHsKKyAgICAgICAgYXV0byBp
bWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihpZGVu
dGlmaWVyKTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgYXV0byBpbWFnZSA9IGltYWdlQnVmZmVyLT5maWx0ZXJlZEltYWdlKGZpbHRlciwg
V1RGTW92ZShnZW9tZXRyeSkpOworICAgICAgICBpZiAoIWltYWdlKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBhdXRvIGltYWdlU2l6ZSA9IGltYWdlLT5zaXplKCk7CisgICAgICAgIGF1
dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShpbWFn
ZVNpemUpLCB7IGltYWdlQnVmZmVyLT5jb2xvclNwYWNlKCkgfSk7CisgICAgICAgIGlmICghYml0
bWFwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAt
PmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgICAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZSgqaW1hZ2UsIEZsb2F0UG9p
bnQoKSk7CisgICAgICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisgICAgfSgpOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxlKSk7Cit9CisKIHZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbmF0aXZlSW1hZ2VS
ZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuaAppbmRleCA3ZDgwYjcyNTg2Mzk0ZTU1ZWNjY2M5YmY3M2Y5NWVmYjBj
Yzk0MDUwLi4xOTE2MjcyNDA3N2NhMjY3NWU5MDE0NGRjZGY2ZTM1NDZmNGY3Mzc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgKQEAgLTU5LDYgKzU5LDExIEBAIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9k
ZSA6IGJvb2w7CiAKIH0KIAorbmFtZXNwYWNlIElQQyB7CitjbGFzcyBGaWx0ZXJSZWZlcmVuY2U7
CitjbGFzcyBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlOwpAQCAtMTQyLDYgKzE0Nyw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZl
UmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJik7CiAgICAgdm9pZCBnZXREYXRhRm9ySW1hZ2VC
dWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0U2hhcmVhYmxlQml0
bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBX
ZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmJik+JiYpOworICAgIHZvaWQgZ2V0RmlsdGVyZWRJbWFnZUZvcklt
YWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgSVBDOjpGaWx0
ZXJSZWZlcmVuY2UmJiwgSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZSYmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmKTsKICAgICB2b2lkIGNh
Y2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJD
b3JlOjpGb250PiYmKTsKICAgICB2b2lkIGRlbGV0ZUFsbEZvbnRzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IDFlZjU2ZGNjOTc2Mjc0ZTM1NmFiMjJiNGVh
NGU3MWJjZmFjMGIwZGYuLjI0YmUzNmY2MTZiYTdmM2U4MjE4MTFiNjI0M2E4NTJjMTI2Zjg2YmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0zMiw2ICszMiw3
IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgewogICAgIEdldERhdGFVUkxG
b3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxTdHJpbmcpIFN5bmNocm9ub3VzCiAgICAg
R2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25v
dXMKICAgICBHZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGVudW06dWludDhfdCBXZWJDb3JlOjpQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSAtPiAoV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCisgICAgR2V0RmlsdGVyZWRJbWFn
ZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUJ1ZmZlciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyLCBJUEM6OkZpbHRlckdlb21ldHJ5
UmVmZXJlbmNlIGdlb21ldHJ5KSAtPiAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBo
YW5kbGUpIFN5bmNocm9ub3VzCiAgICAgQ2FjaGVOYXRpdmVJbWFnZShXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKICAgICBDYWNoZUZvbnQoSVBDOjpGb250
UmVmZXJlbmNlIGZvbnQpCiAgICAgRGVsZXRlQWxsRm9udHMoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWY5YmVhZGUxYmEwNzkwY2NkZDY5ZmNiZjAzOGI4Y2M0Nzc3YTJiNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
RGVjb2Rlci5oIgorI2luY2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRl
ckdlb21ldHJ5Lmg+CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeVJl
ZmVyZW5jZSB7CitwdWJsaWM6CisgICAgRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2Uoc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5KQorICAgICAgICA6IG1f
Z2VvbWV0cnkoV1RGTW92ZShnZW9tZXRyeSkpCisgICAgeworICAgIH0KKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeT4gdGFrZUdlb21ldHJ5KCkgeyByZXR1cm4g
V1RGTW92ZShtX2dlb21ldHJ5KTsgfQorCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsdGVy
R2VvbWV0cnlSZWZlcmVuY2U+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OkZpbHRlckdlb21ldHJ5PiBtX2dlb21ldHJ5OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVu
Y2UuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ0NDdkMjY5NTQ2NDU1MzBiMzM0MjZkZDY5YzE2ZGVlNTMxNDk5ZTUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaApA
QCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJE
ZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ1NTRmls
dGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TVkdGaWx0ZXIuaD4KKworbmFtZXNwYWNlIElQQyB7
CisKK2NsYXNzIEZpbHRlclJlZmVyZW5jZSB7CitwdWJsaWM6CisgICAgRmlsdGVyUmVmZXJlbmNl
KFJlZjxXZWJDb3JlOjpGaWx0ZXI+JiYgZmlsdGVyKQorICAgICAgICA6IG1fZmlsdGVyKFdURk1v
dmUoZmlsdGVyKSkKKyAgICB7CisgICAgfQorCisgICAgUmVmPFdlYkNvcmU6OkZpbHRlcj4gdGFr
ZUZpbHRlcigpIHsgcmV0dXJuIFdURk1vdmUobV9maWx0ZXIpOyB9CisKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCBtX2Zp
bHRlci0+dHlwZSgpOworCisgICAgICAgIGlmIChpczxXZWJDb3JlOjpDU1NGaWx0ZXI+KG1fZmls
dGVyLmdldCgpKSkKKyAgICAgICAgICAgIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxXZWJDb3JlOjpD
U1NGaWx0ZXI+KG1fZmlsdGVyKS0+ZW5jb2RlKGVuY29kZXIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8V2ViQ29yZTo6U1ZHRmlsdGVyPihtX2ZpbHRl
ciktPmVuY29kZShlbmNvZGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxG
aWx0ZXJSZWZlcmVuY2U+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXI6OlR5cGU+IHR5cGU7CisgICAgICAgIGRlY29k
ZXIgPj4gdHlwZTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgICAgICBpZiAoKnR5cGUgPT0gV2ViQ29yZTo6RmlsdGVyOjpUeXBlOjpD
U1MpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGZpbHRlciA9IFdlYkNvcmU6OkNTU0ZpbHRlcjo6
ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IEZpbHRlclJlZmVyZW5j
ZShXVEZNb3ZlKCpmaWx0ZXIpKSB9OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRvIGZpbHRlciA9IFdlYkNvcmU6OlNWR0ZpbHRl
cjo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0dXJuIHsgRmlsdGVyUmVmZXJlbmNl
KFdURk1vdmUoKmZpbHRlcikpIH07CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCitwcml2YXRlOgorICAgIFJlZjxXZWJDb3JlOjpGaWx0ZXI+IG1fZmlsdGVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5w
eQppbmRleCAzZmRlZGE4YmZjOTQ5YWJhMWQwOWFlMWVjMWU5NmY3OTU4ZDA1YjhmLi44N2M5ODRh
ZmZlNzYwOTY5NmE0OTJlYzE0MTQ2MzA0MTkyZjdjMjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI4MSw2ICsyODEsNyBAQCBkZWYgdHlwZXNfdGhhdF9j
YW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRP
cldvcmtlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9uRmxh
Z3MnLAogICAgICAgICAnV2ViQ29yZTo6RmV0Y2hJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYkNv
cmU6OkZpbHRlclJlZmVyZW5jZScsCiAgICAgICAgICdXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIn
LAogICAgICAgICAnV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJywKICAgICAg
ICAgJ1dlYkNvcmU6OkltYWdlRGVjb2RlcklkZW50aWZpZXInLApAQCAtMjg4LDcgKzI4OSw2IEBA
IGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdX
ZWJDb3JlOjpNZWRpYUtleVN5c3RlbVJlcXVlc3RJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNv
cmU6Ok1lZGlhUGxheWVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpNZWRpYVNlc3Np
b25JZGVudGlmaWVyJywKLSAgICAgICAgJ1dlYkNvcmU6Ok5hdGl2ZUltYWdlUmVmZXJlbmNlJywK
ICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBs
YXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6
UGx1Z2luTG9hZENsaWVudFBvbGljeScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzN2QwZGQyNDcxZWQ0MzhmOWNkNmM3NTllNDMwOGY3
YjZkMjIyMmQ1Li45MTdmMDY3MjlmY2Q3MzZmMWQ1ZTg1ZGI4YzE4ZTU5MDIyMWI5MWZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMs
NyArMyw3IEBACiAJYXJjaGl2ZVZlcnNpb24gPSAxOwogCWNsYXNzZXMgPSB7CiAJfTsKLQlvYmpl
Y3RWZXJzaW9uID0gNTI7CisJb2JqZWN0VmVyc2lvbiA9IDU0OwogCW9iamVjdHMgPSB7CiAKIC8q
IEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCkBAIC00Njc4LDYgKzQ2NzgsOCBA
QAogCQk3MUJBQTczMTI1RkZDQ0JBMDBEN0NENUQgLyogV0tNb2RlbFZpZXcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tNb2RlbFZpZXcuaDsgcGF0aCA9IGlvcy9XS01vZGVs
Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUJBQTczMjI1RkZDQ0JBMDBE
N0NENUQgLyogV0tNb2RlbFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBXS01vZGVsVmlldy5tbTsgcGF0aCA9IGlvcy9XS01vZGVsVmlldy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNp
dGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjY5MjcwQzUyRUEwMDUxNUMy
NCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVmZXJlbmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjZBMjcwQzU3QTcwMDUxNUMyNCAv
KiBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJHZW9tZXRy
eVJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjAzNDQ5QTI2QTZD
NDRDMDAwQTVGNTQgLyogTW9ub3RvbmljT2JqZWN0SWRlbnRpZmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNb25vdG9uaWNPYmplY3RJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyMDM0NDlCMjZBNkM0NzYwMDBBNUY1NCAvKiBSZW5kZXJpbmdVcGRhdGVJRC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJpbmdVcGRhdGVJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjI3ODAwQjI0MDhCRDdEMDA3RDM3NkIgLyogUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzMxNCw2ICs3MzE2LDggQEAKIAkJCQlC
QzAzMkQ5RTEwRjQzN0QxMDA1OEMxNUEgLyogRGVjb2Rlci5oICovLAogCQkJCUJDMDMyRDlGMTBG
NDM3RDEwMDU4QzE1QSAvKiBFbmNvZGVyLmNwcCAqLywKIAkJCQlCQzAzMkRBMDEwRjQzN0QxMDA1
OEMxNUEgLyogRW5jb2Rlci5oICovLAorCQkJCTcyMDBDRjZBMjcwQzU3QTcwMDUxNUMyNCAvKiBG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oICovLAorCQkJCTcyMDBDRjY5MjcwQzUyRUEwMDUxNUMy
NCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLywKIAkJCQk5QkQ4QUI0OTI1ODIwRTUyMDA1Mzg2Rjgg
LyogRm9udFJlZmVyZW5jZS5oICovLAogCQkJCTQxNTFFNUMzMUZCQjkwQTkwMEU0N0UyRCAvKiBG
b3JtRGF0YVJlZmVyZW5jZS5oICovLAogCQkJCUMwQ0U3MkFDMTI0N0U3OEQwMEJDMEVDNCAvKiBI
YW5kbGVNZXNzYWdlLmggKi8sCkBAIC0xMzY0OCw3ICsxMzY1Miw2IEBACiAJCTA4NjdENjkwRkU4
NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2pl
Y3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JXb3Jr
c3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDEzMDA7CiAJCQkJ
TGFzdFVwZ3JhZGVDaGVjayA9IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggMjdiY2QwMDU0NTA5NThlODAyMTIzMzBjMWU4OTZl
M2M4OTE3MzRmYi4uYzg2OTNhZTI5ZDhiYTdkZDJkNDFjY2I0MjFjMDY5YTdkZWEwNGFmNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTIwMyw2ICsyMDMsMTQgQEAgcHJvdGVjdGVk
OgogICAgICAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFnZSgpOwogICAgIH0KIAorICAgIFJl
ZlB0cjxXZWJDb3JlOjpJbWFnZT4gZmlsdGVyZWRJbWFnZShjb25zdCBXZWJDb3JlOjpGaWx0ZXIm
IGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiYmIGdlb21l
dHJ5KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBmbHVz
aERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS0+Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKG1fcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBmaWx0ZXIsIFdURk1vdmUoZ2VvbWV0cnkpKTsKKyAgICB9CisKICAgICBz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBX
ZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgZGVzdGluYXRpb25Gb3JtYXQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBpZiAoVU5M
SUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCBlYzc5MzQxMDZiMTFiMzY2Yzc4OGM1M2JkOWIy
NDA5Nzk2OWJkOWQ5Li43NjBjNTQzYjMxZjhmNDMxNzM1MWY5ZjY3NWYzZDRjNTNmOTA5NTc2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RXcml0
ZXJIYW5kbGUuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgpAQCAtMjM3LDYgKzIzOCwyNCBAQCBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldFNo
YXJlYWJsZUJpdG1hcChSZW5kZXJpbgogICAgIHJldHVybiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZShoYW5kbGUpOwogfQogCitSZWZQdHI8SW1hZ2U+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBpbWFnZUJ1ZmZlciwgY29uc3QgRmlsdGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxG
aWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkKK3sKKyAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNz
YWdlSWZOZWVkZWQoKTsKKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6R2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBJUEM6OkZp
bHRlclJlZmVyZW5jZSB7IFJlZjxGaWx0ZXI+IHsgY29uc3RfY2FzdDxGaWx0ZXImPihmaWx0ZXIp
IH0gfSwgSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZShXVEZNb3ZlKGdlb21ldHJ5KSkpLCBN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RmlsdGVyZWRJbWFnZUZvckltYWdl
QnVmZmVyOjpSZXBseShoYW5kbGUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCAxX3Mp
OworICAgIEFTU0VSVF9VTlVTRUQoc2VuZFJlc3VsdCwgc2VuZFJlc3VsdCk7CisKKyAgICBpZiAo
aGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIGF1dG8gYml0
bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICBpZiAoIWJpdG1hcCkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFn
ZSgpOworfQorCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y2FjaGVOYXRpdmVJ
bWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNhY2hlTmF0aXZlSW1hZ2UoaGFuZGxl
LCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5
bmNSZXBseSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCA4N2Fl
NTIyY2JiYjI4MWZjNGE4ODA3NjViOTlmNGM5MDI1NmE5ZDI1Li40ZDdkZTRmNjU1ZjExY2MxYTI5
MDJmMmVjZGQ3MzNlY2Q5OGQ2OTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJl
bmNlLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJHUFVQ
cm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIklQQ1NlbWFwaG9yZS5o
IgpAQCAtMTAyLDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0RGF0
YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50aWZpZXIgZmx1c2hEaXNwbGF5TGlzdEFu
ZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGdldFNoYXJlYWJsZUJpdG1hcChXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgUmVmUHRyPFdlYkNvcmU6Oklt
YWdlPiBnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+JiYpOwogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShj
b25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwog
ICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440290</attachid>
            <date>2021-10-05 16:34:27 -0700</date>
            <delta_ts>2021-10-05 17:18:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211005163426.patch</filename>
            <type>text/plain</type>
            <size>669160</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODc5OGU4MWE0MTUwYWZm
MzUzNjA2ZTc5M2M1NDA2N2VlMjJmODRlYS4uNDAzNWM0YTY0ZTdjMTc3NTc3ODEwMjQxMjk5ZjY4
OGJjZjEzYTdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxOSBAQAorMjAyMS0xMC0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXSVAuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbTog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFn
ZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2U6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVC
bGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1
ZVJvdGF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6
CisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldENvbXBvc2l0ZU9wZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvc2l0ZTo6c2V0SzIpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLNCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZTo6Y29tcG9zaXRlT3BlcmF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6Om9wZXJhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBSR0JBVmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVy
aW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmdldFBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlm
ZnVzZUNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdo
dGluZzo6ZGlmZnVzZUNvbnN0YW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2Vt
ZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp4
Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
Ojp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0Y0NvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6b3BhY2l0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BT
aGFkb3c6OnNldFNoYWRvd0NvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6c2hhZG93T3BhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRURyb3BTaGFkb3c6OnNldFNoYWRvd09wYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6RkVGbG9vZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFRmxvb2Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6
Om9wYWNpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoZ2F1c3NpYW5LZXJuZWxG
YWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsUG9zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlh
dGlvblkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldEVk
Z2VNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9ubHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
dGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3Rk
RGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXREaWZm
dXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3BlY3VsYXJD
b25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhY
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9y
bWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJp
b3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVy
aWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmNv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c291cmNlIGNvbnN0KToKKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpsaWdodGlu
Z0NvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6Omxp
Z2h0U291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93Ojp0b3BMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0b3AgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OmNlbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0
UmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OnNldEJvdHRvbVJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1l
cmdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TWVyZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0b3IgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVj
dWxhckxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0
aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNwZWN1bGFy
Q29uc3RhbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpzcGVjdWxhckV4cG9uZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRp
bGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmRyYXdpbmdSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6RkVUaWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lYKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlOjpzZXROdW1PY3RhdmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5j
ZTo6c2V0U2VlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRp
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZHJhd2luZ1JlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZp
bGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YXBwbHlQbGF0Zm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVj
dEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0b3Rh
bE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUlt
YWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRp
cGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
bnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5wdXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVz
dWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNB
bHBoYUltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhh
c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRI
YXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNX
aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdo
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhh
c0hlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVk
QWJzb2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9wZXJhdGluZ0NvbG9yU3BhY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNw
YWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29s
b3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6bm9ybWFsaXplZEZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1
bmN0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpvdXRzZXRzIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6RmlsdGVyR2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heERyYXdpbmdSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpwcmltaXRpdmVTdWJy
ZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heFByaW1p
dGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRs
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZpbHRlclJlZ2lvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291cmNlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Ojp0cmFuc2Zvcm1Ub0Fic29sdXRl
UmVjdCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
dXRwdXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGwuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OkZpbHRlck91dHB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OmNyZWF0ZUZpbHRlclJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0cHV0OjpnZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJPdXRwdXQ6OnJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0
cHV0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlZmVyZW5jZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6YWJzb2x1dGVE
cmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29weVBpeGVsQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRv
Q29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZXN1bHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cHJpbWl0aXZlU3Vi
cmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmlzQWxwaGFJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnNldElzQWxwaGFJbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKTogRGVsZXRlZC4K
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmVmZmVjdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHlT
b2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5U29mdHdh
cmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVM
aWdodGluZ1NvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6YXBw
bHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAo
V2ViQ29yZTo6RkVNZXJnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjphcHBseVNvZnR3YXJlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZz
ZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNv
ZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
UmVzdWx0U29mdHdhcmU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmguCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpD
U1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTZXBpYUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNp
dHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9z
b3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5w
dXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRS
ZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpi
dWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0
UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmRlY29kZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdp
bkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFw
cGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBy
aW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBv
c2VkRW51bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29t
cG9zaXRlT3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0
eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhw
b3NlZEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25U
eXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlU
cmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9w
U2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZCBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZF
TWVyZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9s
b2d5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xv
Z3lFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9s
b2d5T3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6ZnJvbVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsOgorICAg
ICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0
KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdGRVNwb3RMaWdodEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRpbGVFbGVtZW50OjpidWlsZCBjb25zdCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmli
dXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHlTb2Z0
d2FyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJl
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjph
ZGROYW1lZEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6Om5hbWVkRWZmZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2V0dXBCdWlsdGluRWZmZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmRlY29k
ZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckdlb21ldHJ5OjpTVkdGaWx0ZXJHZW9tZXRyeSk6CisgICAgICAgICogeG1sL1hQYXRo
R3JhbW1hci5jcHA6CisgICAgICAgICogeG1sL1hQYXRoR3JhbW1hci55OgorCiAyMDIxLTEwLTA1
ICBQYXRyaWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBTaG93IGNvbG9yIHNwYWNlIGZvciBjYW52YXNlcyBpbiB0aGUgR3JhcGhpY3MgdGFiIG9u
IHRoZSBvdmVydmlldyBjYXJkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1OTk1ZWNlZTVjNmIyYWY1MDZhYmU5YWU3
MjI2OGQ1Y2ZkMzViZDNkLi43ZTFhYjA3NGZhNjcxZWRhMzMyYThlNDdmZjM4NTk3Njc3ZmM5YzFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIxLTEwLTA1ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gRW5hYmxlIGZpbHRl
cnMgaW4gR1BVIFByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMTI1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zp
bHRlckdlb21ldHJ5UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZTo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjpG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTo6dGFrZUdlb21ldHJ5KToKKyAgICAgICAgKElQQzo6Rmls
dGVyR2VvbWV0cnlSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRl
ckdlb21ldHJ5UmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0
ZXJSZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6Rmls
dGVyUmVmZXJlbmNlKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjp0YWtlRmlsdGVy
KToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXQvbWVzc2FnZXMucHk6CisgICAgICAgICh0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2Rl
Y2xhcmVkKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorCiAyMDIxLTEwLTA1
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQXV0aG9yaXphdGlv
biBoZWFkZXIgbG9zdCBvbiAzMHggcmVkaXJlY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDFlZmY2YWVi
MzliYTAyYTczNWYyMTRjMzRmZDcwYzEwMzNlOTNmMTAuLjEzNmRiYTRiYTgyNTE5ODZkM2Q2MDM3
NmI4MTRkMDQ4NTUyNTY1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDQ3LDE0ICsyMDQ3LDM1IEBA
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2Vv
bWV0cnkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJSZXN1bHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGln
aHRTb3VyY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCitwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hh
ZG93U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxv
b2RTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVMaWdodGluZ1NvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRU1lcmdlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pc28vSVNPQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT09yaWdpbmFsRm9ybWF0
Qm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94
LmNwcApAQCAtMjYzNiw3ICsyNjU3LDYgQEAgc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
CiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcAogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAot
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKIHN2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwCiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRp
dGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmNwcAogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlQW5p
bWF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBmMzBmZGFiYTA0YzI2MDY3ZjE2
NDhmMjc0MjcyZDVlMmFlMWQzZDRkLi5mZTk1NzhiMmQ4MmQzZjEyOGQyNWU4MzBkMWIxOTk4MTg0
YTNlNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTM5OCw3ICszOTgsOCBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1h
Z2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJD
b25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENv
cmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3Jl
SW1hZ2UubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVEZXZpY2VNZXRhbC5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MTRjM2Q3MGMyY2IxM2RmYzFjMjBjYjI2
MDg1MjY3MGY0ZWQ3ZTVhLi5mZGRhMGJiNDdlOTUxNTE2OWMzZjA1NjU4NWZlMDFkMWY1MTkyZGVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0yMzUsNyArMjM1LDYgQEAKIAkJMDgxNjY4RDQxMjU2MDNCRjAwNkYyNURFIC8qIFNW
R1RleHRDaHVua0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4MTY2OEQyMTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVy
LmggKi87IH07CiAJCTA4MTY2OERBMTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5n
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2
NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oICovOyB9OwogCQkw
ODFBQThEQTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODFBQThEOTExMTEyMzdFMDAy
QUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi87IH07Ci0JCTA4MUVCRjNCMEZEMzRGNDEw
MERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVy
QnVpbGRlci5oICovOyB9OwogCQkwODNEQUVBNzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4M0RBRUEzMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5oICovOyB9OwogCQkwODNEQUVBOTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODNEQUVBNTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmggKi87IH07CiAJCTA4NDU2ODA4MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0
cmljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0
NTY4MDcxMkI5MERBNjAwOTYwQTlGIC8qIEZvbnRNZXRyaWNzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc3Niw4ICs3NzUsNiBAQAogCQkyQUVG
NkZERDI2RTdFQ0NGMDAzMjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBRUY2RkNFMjZFNzFGMkQwMDMyNkQwMiAv
KiBDU1NOdW1lcmljVHlwZS5oICovOyB9OwogCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0IgLyog
UmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAq
LzsgfTsKIAkJMkJFOEUyQzcxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkJFOEUy
QzYxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oICovOyB9OwotCQky
Qzg1NjUzNDI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDODU2NTMzMjRDMEY3M0Mw
MEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovOyB9OwotCQkyQ0FBNEEzQTI0QkUx
OEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDQUE0QTM5MjRCRTE4QjcwMDlE
RUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovOyB9OwogCQkyRDA2MjE0
NDFEQTYzOUI2MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDIxREE2Mzk4
ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQw
NjIxNDUxREE2MzlCQTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0MzFEQTYz
OTg4MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJMkQw
NjIxNEQxREE2M0E4QjAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0OTFEQTYzQTc5MDBBN0ZC
MjYgLyogV2ViS2l0TWVkaWFLZXlzLmNwcCAqLzsgfTsKQEAgLTIyODIsNiArMjI3OSwxNSBAQAog
CQk3MUVBRENEODIyMDg3RTcyMDA2NUE0NUYgLyogUG9pbnRlcklELmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVBRENENjIyMDg3RTZEMDA2NUE0NUYg
LyogUG9pbnRlcklELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJC
Mzg4RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAvKiBD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NzIwMENGNTkyNzA5QUJGQjAwNTE1QzI0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZp
bHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTcyMDBDRjVBMjcwOUFDMTEwMDUxNUMyNCAvKiBGaWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjYyNzAzRDY2RDAwM0M1
QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzIwMENGNUIyNzA5QUNCNjAwNTE1QzI0IC8qIEZpbHRlclJlc3Vs
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDOTBB
M0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBDRjVDMjcwOUFEM0EwMDUxNUMyNCAv
KiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzIxQ0E4RjUyNzAzOTQ1NjAwQzBERDY1IC8qIEZpbHRlclJlcHJlc2Vu
dGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzIwMENGNUQyNzA5QURDRTAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5NzhENDMyNkZFOURFNzAwRkQy
QzU2IC8qIEZpbHRlck91dHB1dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyMDBDRjY1MjcwQzA2MTcwMDUxNUMyNCAvKiBGaWx0ZXJHZW9tZXRy
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNE
ODMyNzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIwMENGNjgyNzBDNDc4NzAwNTE1QzI0
IC8qIEZpbHRlclJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIwMENGNjcyNzBDNDcxNDAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBD
RjZCMjcwQ0Q2MDkwMDUxNUMyNCAvKiBDU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NG
aWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjAwQ0Y2QzI3MENENjE5MDA1MTVDMjQgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUg
LyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0IyQTI0
MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVy
dHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjFCNDk3NDI1MTJCQTNC
MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VC
aXRtYXBCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTI3MDIsOCArMjcwOCw2IEBACiAJCTg0MjI0MTk0MTA3RTc4QTcwMDc2NkE4NyAv
KiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5oICovOyB9OwogCQk4NDMwMEJENjEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0
aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuaCAq
LzsgfTsKIAkJODQzMDBCRDgxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MzAwQkQ3MTIwQzlB
RDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi87IH07Ci0JCTg0NUU3MkY4MEZEMjYxRUUw
MEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLzsgfTsKLQkJ
ODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8q
IFNWR0ZpbHRlci5oICovOyB9OwogCQk4NDY1MEU3RTIzODdBRDdEMDA2MjY2RTIgLyogTWVkaWFR
dWVyeUxpc3RFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ2NTBFN0MyMzg3QUQ3QzAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaCAq
LzsgfTsKIAkJODQ3MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUEx
MjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovOyB9OwogCQk4NDczMEQ3
OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUMxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFQ29udm9sdmVNYXRyaXguaCAqLzsgfTsKQEAgLTYwNzIsOCArNjA3Niw2IEBACiAJCTA4MTY2
OEQ3MTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RleHRMYXlvdXRFbmdpbmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODE2NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZH
VGV4dExheW91dEVuZ2luZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdU
ZXh0TGF5b3V0RW5naW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MUFBOEQ5
MTExMTIzN0UwMDJBQjA2RSAvKiBTVkdFbGVtZW50UmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHRWxlbWVudFJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlckJ1aWxk
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODFFQkYzOTBGRDM0RjQxMDBE
QTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTVkdGaWx0ZXJCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4
M0RBRUEyMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUEzMEYwMUE3
RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBNDBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02MjIwLDggKzYyMjIsNiBAQAogCQkwRjQ5NjZBODFEQjQwQzQzMDBBMjc0
QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNDk2NkE5MURCNDBDNDMwMEEyNzRCQiAvKiBKU0RPTVBvaW50UmVhZE9ubHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Qb2ludFJlYWRPbmx5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNENERUFBMjNEOTFBOEEwMDI1MUIwMiAvKiBT
Y3JvbGxUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxUeXBlcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgxMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NG
aWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY1M0ZCODMyMTNCMUJCODAwQzQw
RDM0IC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NG
aWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODMyMTNCNzg2NDAw
QzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRl
ckxheWVyRmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllckZpbHRlcnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjksMTAgKzczMjksNiBAQAogCQkyQjQyMzVB
MDE1MjUwRjYwMDBEQkJDRDggLyogUmVuZGVyU1ZHRWxsaXBzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdFbGxpcHNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJz
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTE1ldGFDaGFyc2V0UGFy
c2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJCRThFMkM4MTJBNThBMDEwMEZB
RDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJl
bmRlcmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDQUE0QTM3MjRCRTE4QTEwMDlE
RUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkyQ0FBNEEzOTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQwNjIxNDIxREE2Mzk4ODAw
QTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQwNjIxNDMxREE2Mzk4ODAwQTdGQjI2IC8qIFdl
YktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEMDYyMTQ3MURBNjNBNzkwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU5lZWRlZEV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdE1lZGlh
S2V5TmVlZGVkRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA0NzYs
MTAgKzEwNDcyLDIwIEBACiAJCTcxRjZFRTQxMjU1RURGOUMwMEZDNEM1QiAvKiBHcmlkVHJhY2tT
aXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyaWRUcmFja1Np
emUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUY5MzZGNzFERDRGOTlCMDA5
MjJDQzcgLyogdHJhY2tzLXN1cHBvcnQuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3Jp
cHQ7IHBhdGggPSAidHJhY2tzLXN1cHBvcnQuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNTcyNzA3OEM0MjAwNTE1QzI0IC8q
IFNWR0ZpbHRlckdlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckdlb21ldHJ5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjVFMjcwQUQxMzcwMDUxNUMyNCAv
KiBGaWx0ZXJPdXRwdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyT3V0cHV0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNUYyNzBCQjAxOTAwNTE1QzI0IC8q
IFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjAwQ0Y2MTI3MEJCREE4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0Q29yZUlt
YWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3VsdENvcmVJbWFnZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjAwQ0Y2MjI3MEJCREZCMDA1MTVDMjQgLyogRmlsdGVyUmVz
dWx0Q29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjAwQ0Y2MzI3MEJDMkM4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjAwQ0Y2NDI3MEJDMkM4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0U29m
dHdhcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVzdWx0U29mdHdhcmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjYyNzBDMzIxRDAwNTE1QzI0IC8qIEZpbHRlckdl
b21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckdlb21ldHJ5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjcyNzBDNDcxNDAwNTE1QzI0IC8qIEZpbHRl
clJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZWZlcmVuY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1h
dGVkVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVy
dHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAwRjEy
RkY3IC8qIFNWR1ZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9wZXJ0
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjFCNDk2RjI1MTJBQzA0MDBGRTlE
M0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQml0
bWFwQmFja2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMUI0OTcwMjUx
MkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCaXRtYXBCYWNraW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUNBOEY1
MjcwMzk0NTYwMEMwREQ2NSAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjQyQUM5NTI1NzU4RkUwMDA1QTlDRjEgLyogRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RGbHVzaElkZW50
aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAw
RjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEwNTA0LDkgKzEwNTEwLDM1IEBACiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBF
WFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQy
RTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdC
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJF
OCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZp
bHRlck91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJPdXRwdXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVs
dGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyog
UmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDY2MjcwM0Q2
NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJGdW5j
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2OTI3MDNEOEU1MDAz
QzVBQUUgLyogRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVB
QUUgLyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZCMjcw
M0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZD
MjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJBODNENkUyNzAzREZEODAwM0M1QUFFIC8qIEZpbHRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3
MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZz
ZXRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8q
IEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9ycGhvbG9n
eVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzQyNzA1
ODM3RDAwM0M1QUFFIC8qIEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
RU1lcmdlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3
NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9v
ZFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFRmxvb2RTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBG
RUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb21w
b25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBODNEN0IyNzA1QjJDOTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdDMjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZl
TWF0cml4U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb252b2x2ZU1hdHJpeFNv
ZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0QyNzA1QzdF
RjAwM0M1QUFFIC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDdFMjcwNjMzNkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2Fy
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRp
bGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVRpbGVTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBG
RVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1bGVuY2VT
b2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgxMjcwNjQ2
RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RkVMaWdodGluZ1NvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJB
ODNEODIyNzA2NTExQjAwM0M1QUFFIC8qIEZFQmxlbmRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRUJsZW5kU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmlsdGVyR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJC
QUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIz
RTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMDUxOCw2ICsxMDU1MCw4IEBACiAJCTcyQkFDM0FDMjNFMUU1NDUwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyQkFDM0FEMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2
ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWlu
dGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJDOTBBMzkyNjM2
NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0
ZXJSZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkM5MEEzQTI2MzY0
QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3Vs
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2
MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEy
RThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRUEwOUY3
MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTExNDUxLDkgKzExNDg1LDYgQEAKIAkJODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNW
R1BhdGhTdHJpbmdTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
UGF0aFN0cmluZ1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJE
NzEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0aFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdQYXRoU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg0MzAwQkQ5MTIwQzlBRUQwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGNzBGRDI2MUVFMDBBODdE
NzkgLyogRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkg
LyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0NUU3MkZBMEZEMjYy
MzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdDMjM4
N0FEN0MwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQ2NTBFN0YyMzg3QUQ4QTAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFRdWVyeUxp
c3RFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTgwMjM4N0FE
OEIwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE5NDI2LDggKzE5NDU3LDkgQEAKIAkJMkNFMTE4OTgyNEMyNDAyQzAwMzc3MEU5IC8qIGNv
cmVpbWFnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
LmggKi8sCi0JCQkJMkNBQTRBMzcyNEJFMThBMTAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLm1tICovLAorCQkJCTcyMDBDRjYxMjcwQkJEQTgwMDUxNUMyNCAvKiBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2UuaCAqLywKKwkJCQk3MjAwQ0Y2MjI3MEJCREZCMDA1MTVDMjQgLyog
RmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tICovLAorCQkJCTcyMDBDRjVGMjcwQkIwMTkwMDUxNUMy
NCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBjb3Jl
aW1hZ2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjMwMzAsNiArMjMwNjIsMzIg
QEAKIAkJCXBhdGggPSAibW9kZWwtZWxlbWVudCI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OworCQk3MkE4M0Q2RjI3MDU3NEQwMDAzQzVBQUUgLyogc29mdHdhcmUgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyQTgzRDgyMjcwNjUxMUIw
MDNDNUFBRSAvKiBGRUJsZW5kU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc1MjcwNTg1Qjgw
MDNDNUFBRSAvKiBGRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdBMjcw
NUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQTgzRDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLywK
KwkJCQk3MkE4M0Q3QzI3MDVCRDg2MDAzQzVBQUUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJl
LmNwcCAqLywKKwkJCQk3MkE4M0Q3RDI3MDVDN0VGMDAzQzVBQUUgLyogRkVEaXNwbGFjZW1lbnRN
YXBTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0UyNzA2MzM2QjAwM0M1QUFFIC8qIEZFRHJv
cFNoYWRvd1NvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyog
RkVGbG9vZFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3QjI3MDVCMkM5MDAzQzVBQUUgLyog
RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEODEyNzA2NDZFMjAwM0M1
QUFFIC8qIEZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzQyNzA1ODM3RDAw
M0M1QUFFIC8qIEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzMyNzA1N0NCRTAw
M0M1QUFFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MjI3MDU3
OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0YyNzA2
M0Y0QzAwM0M1QUFFIC8qIEZFVGlsZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q4MDI3MDY0
MUI2MDAzQzVBQUUgLyogRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwICovLAorCQkJCTcyMDBDRjYz
MjcwQkMyQzgwMDUxNUMyNCAvKiBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzIw
MENGNjQyNzBCQzJDODAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmggKi8sCisJCQkJ
NzJBODNENzEyNzA1Nzg1MjAwM0M1QUFFIC8qIFNvdXJjZUFscGhhU29mdHdhcmUuY3BwICovLAor
CQkJCTcyQTgzRDcwMjcwNTc1MDQwMDNDNUFBRSAvKiBTb3VyY2VHcmFwaGljU29mdHdhcmUuY3Bw
ICovLAorCQkJKTsKKwkJCXBhdGggPSBzb2Z0d2FyZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CiAJCTdDMDExRjNDMjRGQUQzNjAwMDVCRUYxMCAvKiBTZXR0aW5nc1RlbXBsYXRl
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNTA3OCw2
ICsyNTEzNiw3IEBACiAJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MkE4M0Q2RjI3MDU3
NEQwMDAzQzVBQUUgLyogc29mdHdhcmUgKi8sCiAJCQkJQTFFMTE1NDMxMzAxNUMzRDAwNTRBQzhD
IC8qIERpc3RhbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJODQ3MzBENUExMjQ4RjBCMzAwRDNB
OUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovLAogCQkJCUE3NUU4QjgwMEUxREUyRDYwMDdG
MjQ4MSAvKiBGRUJsZW5kLmNwcCAqLywKQEAgLTI1MTE0LDE1ICsyNTE3MywyMyBAQAogCQkJCTg0
NzMwRDZFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuaCAqLywKIAkJCQk4NDczMEQ2RjEyNDhG
MEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmNwcCAqLywKIAkJCQk4NDczMEQ3MDEyNDhGMEIz
MDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi8sCi0JCQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3
RDc5IC8qIEZpbHRlci5oICovLAorCQkJCTcyQTgzRDZFMjcwM0RGRDgwMDNDNUFBRSAvKiBGaWx0
ZXIuY3BwICovLAorCQkJCTcyQTgzRDY5MjcwM0Q4RTUwMDNDNUFBRSAvKiBGaWx0ZXIuaCAqLywK
IAkJCQkwOEM5MjUxNzBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmNwcCAqLywKIAkJ
CQkwOEM5MjUxODBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggKi8sCi0JCQkJMkM4
NTY1MzgyNEMxMEIwQjAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLywKLQkJ
CQkyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLywK
KwkJCQk3MkE4M0Q2NjI3MDNENjZEMDAzQzVBQUUgLyogRmlsdGVyRnVuY3Rpb24uaCAqLywKKwkJ
CQk3MjAwQ0Y2NjI3MEMzMjFEMDA1MTVDMjQgLyogRmlsdGVyR2VvbWV0cnkuY3BwICovLAorCQkJ
CTcyQTgzRDgzMjcwNjY3NEMwMDNDNUFBRSAvKiBGaWx0ZXJHZW9tZXRyeS5oICovLAogCQkJCTQ5
RUNFQjYzMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwICovLAogCQkJCTQ5
RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJCQk0OUVD
RUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJNDlF
Q0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLywKKwkJCQk3MjAw
Q0Y1RTI3MEFEMTM3MDA1MTVDMjQgLyogRmlsdGVyT3V0cHV0LmNwcCAqLywKKwkJCQk3Mjk3OEQ0
MzI2RkU5REU3MDBGRDJDNTYgLyogRmlsdGVyT3V0cHV0LmggKi8sCisJCQkJNzIwMENGNjcyNzBD
NDcxNDAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5oICovLAorCQkJCTcyMUNBOEY1MjcwMzk0
NTYwMEMwREQ2NSAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovLAorCQkJCTcyQzkwQTM5MjYz
NjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuY3BwICovLAorCQkJCTcyQzkwQTNBMjYzNjRB
MUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuaCAqLywKIAkJCQk4NDczMEQ3NDEyNDhGMEIzMDBE
M0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLywKIAkJCQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMg
LyogUG9pbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5
IC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLywKQEAgLTI2ODg0LDEwICsyNjk1MSw5IEBACiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlCMjU1OThFQTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5j
cHAgKi8sCiAJCQkJQjI1NTk4RUIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCAqLywK
LQkJCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCAqLywKLQkJCQk4
NDVFNzJGQTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi8sCi0JCQkJMDgxRUJGMzgw
RkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuY3BwICovLAotCQkJCTA4MUVCRjM5
MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8sCisJCQkJNzJBODNENkEy
NzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5jcHAgKi8sCisJCQkJNzJBODNENkIyNzAzREE5
QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5oICovLAorCQkJCTcyMDBDRjU3MjcwNzhDNDIwMDUxNUMy
NCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBmaWx0ZXJzOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI5OTgyLDggKzMwMDQ4LDggQEAKIAkJCQlD
QTdFOUI0NzI0MzYxREM1MDA0RTg5RjYgLyogQ29udGVudGZ1bFBhaW50Q2hlY2tlci5oICovLAog
CQkJCTkzOTJGMTRGMEFEMTg2MjMwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5jcHAgKi8sCiAJCQkJ
OTM5MkYxNEIwQUQxODYxQjAwNjkxQkQ0IC8qIENvdW50ZXJOb2RlLmggKi8sCi0JCQkJMEY1M0ZC
ODEyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5jcHAgKi8sCi0JCQkJMEY1M0ZCODMyMTNC
MUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5oICovLAorCQkJCTcyQTgzRDZDMjcwM0RDM0EwMDND
NUFBRSAvKiBDU1NGaWx0ZXIuY3BwICovLAorCQkJCTcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAv
KiBDU1NGaWx0ZXIuaCAqLywKIAkJCQlFM0JCQzI0NTIzODM1NTFBMDA2RUMzOUYgLyogQ1NTVmFs
dWVLZXkuaCAqLywKIAkJCQlFNEE4RDIxNTIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdpb24u
Y3BwICovLAogCQkJCUU0QThEMjE0MjI1NzhEQTAwMEE4NDYzQyAvKiBFdmVudFJlZ2lvbi5oICov
LApAQCAtMzIwNjIsNiArMzIxMjgsNyBAQAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAv
KiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3OUUxNDFCQjIx
NUJCMDBDQUE4QkYgLyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTQ0NzZCREIxREZDQUMwMzAwNjkwRTIzIC8qIENTU0RlZmVycmVkUGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3MjAwQ0Y2QjI3MENENjA5MDA1MTVDMjQgLyogQ1NTRmlsdGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGQkIwQzVCODE3QkJENjI5MDAzRDM2NzcgLyogQ1NTRmlsdGVySW1h
Z2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2NEI0RDYwQ0I0Mjk4QTAwNUYyQjYyIC8q
IENTU0ZvbnRGYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNGRDBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTRm9udEZhY2VSdWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNTYyLDEyICszMjYy
OSwxNiBAQAogCQkJCTkzNTQyNDMwMjcwM0NCODYwMDVDQTcyQyAvKiBGaWxlU3lzdGVtU3RvcmFn
ZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjlGMEU4MURBRUIwMEIyNTk2
NSAvKiBGaWxsTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDgzMUZFODY1REQwMDIw
MzFDQyAvKiBGaWxsTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRjgwRkQyNjFFRTAw
QTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNTkyNzA5QUJGQjAw
NTE1QzI0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAw
NDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkM4NTY1MzQyNEMw
RjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkyQ0FBNEEzQTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDBDRjVBMjcwOUFDMTEwMDUxNUMyNCAvKiBGaWx0
ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNjUyNzBDMDYxNzAwNTE1QzI0
IC8qIEZpbHRlckdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI3
MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzIwMENGNUQyNzA5QURDRTAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzIwMENGNjgyNzBDNDc4NzAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNUMyNzA5QUQzQTAwNTE1QzI0IC8qIEZpbHRlclJlcHJl
c2VudGF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAwQ0Y1QjI3MDlBQ0I2MDA1MTVDMjQg
LyogRmlsdGVyUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1
Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRGMEExNTRG
MDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI3
RDJERDI1MEZEODI4MDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTM1NDQyLDggKzM1NTEzLDcgQEAKIAkJCQlCMjIyN0EwMzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0Ew
NjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUaWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBMDkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAotCQkJCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0
ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAwQ0Y2QzI3MENENjE5MDA1MTVDMjQg
LyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwQzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRmlsdGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEYwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpdFRvVmll
d0JveC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjIwNiw3ICszNjI3Niw2IEBACiAJCTA4NjdENjkw
RkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFBy
b2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JX
b3Jrc3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDA3MDA7CiAJ
CQkJTGFzdFVwZ3JhZGVDaGVjayA9IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCA4Y2Y5MDlhZTll
NTM3MjRiOTFkYjRhY2UxNGFlMjg1NzFkZDk1NTI2Li4yMTExZmEyODY0MWE2ZjM1OWMwMWZlZWE2
ODQwMGMwM2IxNTg0OTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVy
SW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCkBAIC0x
MTYsMjYgKzExNywyMyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNm
b3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMg
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAg
YXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
cmVuZGVyaW5nTW9kZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdlOjpu
dWxsSW1hZ2UoKTsKIAogICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXpl
IH07CiAgICAgdGV4dHVyZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7
CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgY3NzRmls
dGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBjc3NGaWx0ZXItPnNl
dFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAgIGNzc0ZpbHRlci0+c2V0RmlsdGVyUmVn
aW9uKGltYWdlUmVjdCk7Ci0gICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCBtX2Zp
bHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbikpCisgICAgYXV0
byBmaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25z
LCByZW5kZXJpbmdNb2RlKTsKKyAgICBpZiAoIWZpbHRlcikKICAgICAgICAgcmV0dXJuICZJbWFn
ZTo6bnVsbEltYWdlKCk7Ci0gICAgY3NzRmlsdGVyLT5hcHBseSgpOwogCi0gICAgYXV0byogb3V0
cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKLSAgICBpZiAoIW91dHB1dCkKLSAgICAgICAgcmV0
dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CisgICAgYXV0byBnZW9tZXRyeSA9IHN0ZDo6bWFrZV91
bmlxdWU8RmlsdGVyR2VvbWV0cnk+KGltYWdlUmVjdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoYXV0
byBmaWx0ZXJlZEltYWdlID0gdGV4dHVyZS0+ZmlsdGVyZWRJbWFnZSgqZmlsdGVyLCBXVEZNb3Zl
KGdlb21ldHJ5KSkpCisgICAgICAgIHJldHVybiBmaWx0ZXJlZEltYWdlOwogCi0gICAgcmV0dXJu
IG91dHB1dC0+Y29weUltYWdlKCk7CisgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiB9
CiAKIHZvaWQgQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6ZmlsdGVySW1hZ2VDaGFuZ2VkKGNvbnN0IElu
dFJlY3QmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
Y3JldGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
Y3JldGVJbWFnZUJ1ZmZlci5oCmluZGV4IGE1ZGQyOGI3MzdiYzgzNWU4NmVhM2VmMjAyYTc0ZTQ2
YWIyMjIxODEuLjg4YTMxMDI3Nzk4MmYzMjdkMjQzOTQ2ZWVlZjUyNmU1ZjcyMDk3NDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdl
QnVmZmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCiAKQEAgLTEzOCw2ICsxMzksMTkgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKKyAgICBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3Jl
YXRlZCgpOworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisKKyAgICAgICAgUmVmUHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcjsKKyAgICAgICAgc3RkOjp0aWUoaW1hZ2VCdWZmZXIsIHN0ZDo6aWdub3Jl
KSA9IGZpbHRlci5hcHBseSh0aGlzLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgICAgIHJldHVy
biBpbWFnZUJ1ZmZlciA/IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoKSA6IG51bGxwdHI7CisgICAg
fQorCiAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDg1ZTNk
MjRiZWIwYzIwNGMzMjVhMjY1NmQ5Y2E1NDA0MDg2NmZiNzIuLmNlODlmNGJkM2FkZjc4ZTIyNTg5
MWVkNjczNzNjOTlmMGM5NjkyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5j
bHVkZSAiQmlkaVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0
Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCkBAIC02MDksNiArNjExLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QKICAgICBJ
bWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zp
bHRlckltYWdlQnVmZmVyKEZpbHRlciYgZmlsdGVyLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkKK3sKKyAgICBhdXRv
IFtmaWx0ZXJkSW1hZ2UsIGltYWdlUmVjdF0gPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1hZ2UsIFdU
Rk1vdmUoZ2VvbWV0cnkpKTsKKyAgICBpZiAoZmlsdGVyZEltYWdlKQorICAgICAgICBkcmF3SW1h
Z2VCdWZmZXIoKmZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0KTsKK30KKwogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQogewog
ICAgIFBhdGggcGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgKaW5kZXggNmE0YWU1ZGFkNWE3YjJhOWRjNDIzOWZjYTlhNDZiNzE3
ODEwOWYzYS4uZDU3M2IyMTUyMjgyNTYyZWU0MjYxMmQyNjlmMTVmYWJkMmRhZjhhMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
QEAgLTg1LDYgKzg1LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBGaWx0ZXI7CitjbGFz
cyBGaWx0ZXJHZW9tZXRyeTsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVu
dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKQEAgLTQ0Miw2ICs0NDQs
OCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VC
dWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVySW1hZ2VC
dWZmZXIoRmlsdGVyJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8
RmlsdGVyR2VvbWV0cnk+JiYpOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IGIx
ZThkM2IwNGFiMjYwNTEzMjg4NmEwYTgwMzA1MDhhMTMxNjEyODAuLmFlZDU1MzIxNGYyMmFkY2Ux
MTdhZDdiMGNhMjdmOGVmYjBmMDhkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtNDIsNiArNDIsOSBAQCBjbGFzcyBEcmF3aW5nQ29u
dGV4dDsKIHN0cnVjdCBJdGVtQnVmZmVySGFuZGxlOwogfQogCitjbGFzcyBGaWx0ZXI7CitjbGFz
cyBGaWx0ZXJHZW9tZXRyeTsKKwogY2xhc3MgSW1hZ2VCdWZmZXIgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8SW1hZ2VCdWZmZXIsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+LCBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8SW1hZ2VCdWZmZXI+IHsKIHB1YmxpYzoKICAgICAvLyBXaWxs
IHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCkBAIC0xMDYsNiAr
MTA5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gZmlsdGVyZWRJbWFn
ZShjb25zdCBGaWx0ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYpID0gMDsK
IAogICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250
ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KICAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQppbmRleCBkNGZhM2M0YmZhZDM0YWFm
MzA5M2E5ZjAyNDg2YmI3MjdmOThkNGFhLi5kNDVhYjMzYzQ0MDhlZDYzNjA3NDYxNGQ0NmY0NTlk
YTZmNTFkNjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KQEAgLTM3
LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogU2hvdWxkIHNo
YXJlIHRoZXNlIHZhbHVlcyB3aXRoIENTU0ZpbHRlcjo6YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4KS4KKy8vIEZJWE1FOiBTaG91bGQgc2hhcmUg
dGhlc2UgdmFsdWVzIHdpdGggRmlsdGVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgogc3RhdGljIGNvbnN0IGRvdWJsZSBzZXBpYUZ1bGxD
b25zdGFudHNbM11bM10gPSB7CiAgICAgeyAwLjM5MywgMC43NjksIDAuMTg5IH0sCiAgICAgeyAw
LjM0OSwgMC42ODYsIDAuMTY4IH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmM4ZGY0ZDU1
YjQ1NjEzNTQ5ZTNhZjQ5MTkyYTI2ZTJjMDQ0YWY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNzMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0Ogot
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFVTRShDT1JFX0lNQUdFKQotCi0jaW1wb3J0ICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgotI2lt
cG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotCi1P
QkpDX0NMQVNTIENJSW1hZ2U7Ci1PQkpDX0NMQVNTIENJRmlsdGVyOwotT0JKQ19DTEFTUyBDSUNv
bnRleHQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRkVDb2xvck1hdHJpeDsKLWNs
YXNzIEZFQ29tcG9uZW50VHJhbnNmZXI7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwotCi1jbGFzcyBG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RSZW5kZXJl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZT4gdHJ5Q3Jl
YXRlKEZpbHRlckVmZmVjdCYpOwotICAgIFJldGFpblB0cjxDSUNvbnRleHQ+IHNoYXJlZENJQ29u
dGV4dCgpOwotICAgIHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAg
IGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vdXRwdXRJbWFnZTsgfQot
ICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCBmaW5hbDsKLSAgICBGbG9hdFJlY3QgZGVz
dFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbGVhclJl
c3VsdCgpIGZpbmFsOwotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCk7Ci0gICAg
Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKEZpbHRl
ckVmZmVjdCYpOwotICAgIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSBm
aW5hbDsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJF
ZmZlY3QmKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VHcmFw
aGljKFNvdXJjZUdyYXBoaWMmKTsKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNv
bG9yTWF0cml4KGNvbnN0IEZFQ29sb3JNYXRyaXgmLCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJ
SW1hZ2U+PiYpOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZFQ29tcG9uZW50VHJh
bnNmZXIoY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFn
ZT4+Jik7Ci0gICAgCi0gICAgUmVmUHRyPElPU3VyZmFjZUltYWdlQnVmZmVyPiBtX291dHB1dElt
YWdlQnVmZmVyOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBtX291dHB1dEltYWdlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWM4NmZjNGMyM2FmOTU0NTU1N2E1NThjOGM0NTFlMTlhOGEzOGZiNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysr
IC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgi
Ci0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgotI2lt
cG9ydCAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgotI2ltcG9ydCAiRmlsdGVyLmgiCi0jaW1wb3J0
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbXBvcnQgIkZpbHRlck9wZXJhdGlvbi5oIgotI2ltcG9ydCAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2ltcG9y
dCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNvdXJjZUdy
YXBoaWMuaCIKLSNpbXBvcnQgPENvcmVJbWFnZS9DSUNvbnRleHQuaD4KLSNpbXBvcnQgPENvcmVJ
bWFnZS9DSUZpbHRlci5oPgotI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgotI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSAg
ICBpZiAoY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMobGFzdEVmZmVjdCkpCi0gICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPigpOwotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lDb250ZXh0PiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZTo6c2hhcmVkQ0lDb250ZXh0KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmV0YWluUHRyPENJQ29udGV4dD4+IGNpQ29udGV4dCA9IFtDSUNvbnRleHQgY29udGV4dFdp
dGhPcHRpb25zOiBAeyBrQ0lDb250ZXh0V29ya2luZ0NvbG9yU3BhY2U6IChfX2JyaWRnZSBpZClD
R0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQil9XTsKLSAgICByZXR1
cm4gY2lDb250ZXh0OwotfQotCi1zdGF0aWMgYm9vbCBpc051bGxPckxpbmVhckNvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24oY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYgZWZmZWN0KQotewotICAg
IGF1dG8gaXNOdWxsT3JMaW5lYXIgPSBbXSAoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgZnVuY3Rpb24pIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgICAgIHx8IGZ1bmN0aW9uLnR5cGUgPT0g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICB9OwotICAgIHJldHVybiBpc051
bGxPckxpbmVhcihlZmZlY3QucmVkRnVuY3Rpb24oKSkgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0
LmdyZWVuRnVuY3Rpb24oKSkKLSAgICAgICAgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0LmJsdWVG
dW5jdGlvbigpKSAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKLX0K
LQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VS
ZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgLy8gRklYTUU6IGNoYW5nZSBy
ZXR1cm4gdmFsdWUgdG8gdHJ1ZSBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkCi0gICAgc3dpdGNo
IChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlR3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6IHsKLSAgICAgICAg
c3dpdGNoIChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLnR5cGUoKSkgewotICAgICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKLSAgICAg
ICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihkb3duY2Fz
dDxGRUNvbXBvbmVudFRyYW5zZmVyPihlZmZlY3QpKTsKLQotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRy
b3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNldDoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0
JiBsYXN0RWZmZWN0KQotewotICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGxh
c3RFZmZlY3QpOwotICAgIGlmICghbV9vdXRwdXRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IHJlbmRlclRvSW1hZ2VCdWZmZXIobGFzdEVmZmVjdCk7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdl
PiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmIGVmZmVjdCkKLXsKLSAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiBpbnB1dElt
YWdlczsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsK
LSAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOwotICAgICAg
ICBpZiAoIWlucHV0SW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
aW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwotICAgIH0KLSAgICBlZmZlY3QuZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBlZmZlY3Quc2V0UmVzdWx0Q29sb3JTcGFjZShl
ZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAKLSAgICBpZiAoZWZmZWN0LmFic29s
dXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkg
ewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICBy
ZXR1cm4gaW1hZ2VGb3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVmZmVj
dCkpOwotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKLSAgICAgICAg
cmV0dXJuIGltYWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZl
Y3QpLCBpbnB1dEltYWdlcyk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGRv
d25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLQotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0
IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRl
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkRyb3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNl
dDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3QpCi17
Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZWZmZWN0LmZpbHRlcigpLnNvdXJjZUlt
YWdlKCk7Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgCi0gICAgaWYgKGlzPElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQotICAg
ICAgICByZXR1cm4gW0NJSW1hZ2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0PElPU3VyZmFj
ZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpLnN1cmZhY2UoKS5zdXJmYWNlKCldOwotICAgIAot
ICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhDR0ltYWdlOnNvdXJjZUltYWdlLT5jb3B5TmF0
aXZlSW1hZ2UoKS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKLX0KLQotUmV0YWluUHRyPENJSW1h
Z2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZFQ29sb3JNYXRyaXgo
Y29uc3QgRkVDb2xvck1hdHJpeCYgZWZmZWN0LCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1h
Z2U+PiYgaW5wdXRJbWFnZXMpCi17Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFnZXMu
YXQoMCk7Ci0KLSAgICBhdXRvIHZhbHVlcyA9IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9h
dHMoZWZmZWN0LnZhbHVlcygpKTsKLSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotICAgIAotICAg
IHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NB
VFVSQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVu
dHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05P
V046Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogLy8gRklY
TUU6IEFkZCBMdW1pbmFuY2UgdG8gQWxwaGEgSW1wbGVtZW50YXRpb24KLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIGF1dG8gKmNvbG9yTWF0cml4RmlsdGVyID0gW0NJ
RmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwotICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dEltYWdlS2V5
XTsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU6IHsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDpjb21wb25lbnRzWzBdIFk6Y29tcG9uZW50c1sxXSBaOmNvbXBvbmVudHNbMl0gVzow
XSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzNdIFk6Y29tcG9uZW50c1s0
XSBaOmNvbXBvbmVudHNbNV0gVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKLSAgICAgICAg
W2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25l
bnRzWzZdIFk6Y29tcG9uZW50c1s3XSBaOmNvbXBvbmVudHNbOF0gVzowXSBmb3JLZXk6QCJpbnB1
dEJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAgICAgICAgICAg
ICAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4Rmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAg
ICAgICAgICBaOjAgICAgICAgICAgICAgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogewotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOnZhbHVlc1swXSAgWTp2YWx1ZXNbMV0gIFo6dmFsdWVzWzJdICBXOnZhbHVlc1szXV0g
IGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0
VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s1XSAgWTp2YWx1ZXNbNl0gIFo6dmFs
dWVzWzddICBXOnZhbHVlc1s4XV0gIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICBb
Y29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1sx
MF0gWTp2YWx1ZXNbMTFdIFo6dmFsdWVzWzEyXSBXOnZhbHVlc1sxM11dIGZvcktleTpAImlucHV0
QlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOnZhbHVlc1sxNV0gWTp2YWx1ZXNbMTZdIFo6dmFsdWVzWzE3XSBXOnZhbHVl
c1sxOF1dIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s0XSAgWTp2YWx1ZXNbOV0g
IFo6dmFsdWVzWzE0XSBXOnZhbHVlc1sxOV1dIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbG9yTWF0cml4RmlsdGVyLm91
dHB1dEltYWdlOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRy
YW5zZmVyJiBlZmZlY3QsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSByZXN0IG9mIEZFQ29tcG9uZW50VHJhbnNm
ZXIgZnVuY3Rpb25zCi0gICAgQVNTRVJUKGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbihlZmZlY3QpKTsKLQotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0SW1hZ2VzLmF0
KDApOwotICAgIGF1dG8gZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xv
clBvbHlub21pYWwiXTsKLSAgICAKLSAgICBbZmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0
KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIGF1dG8gc2V0Q29lZmZpY2ll
bnRzID0gWyZdIChOU1N0cmluZyAqa2V5LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBmdW5jdGlvbikgewotICAgICAgICBpZiAoZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfTElORUFSKQotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6ZnVuY3Rpb24uaW50ZXJjZXB0IFk6ZnVuY3Rpb24uc2xvcGUgWjowIFc6
MF0gZm9yS2V5OmtleV07Ci0gICAgfTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dFJlZENv
ZWZmaWNpZW50cyIsIGVmZmVjdC5yZWRGdW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMo
QCJpbnB1dEdyZWVuQ29lZmZpY2llbnRzIiwgZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSk7Ci0gICAg
c2V0Q29lZmZpY2llbnRzKEAiaW5wdXRCbHVlQ29lZmZpY2llbnRzIiwgZWZmZWN0LmJsdWVGdW5j
dGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEFscGhhQ29lZmZpY2llbnRzIiwg
ZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIGZpbHRlci5vdXRwdXRJ
bWFnZTsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2FuUmVuZGVy
VXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgaWYgKCFzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZyhlZmZlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgZm9yIChhdXRvIGluIDogZWZmZWN0LmlucHV0RWZmZWN0cygpKSB7Ci0gICAgICAgIGlm
ICghc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKmluKSB8fCAhY2FuUmVuZGVyVXNpbmdDSUZp
bHRlcnMoKmluKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
b3V0cHV0KCkgY29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJSZW5kZXJpbmcgIiA8PCB0aGlzIDw8ICIgdXNpbmcgQ29yZUltYWdlXG4iKTsKLSAgICByZXR1
cm4gbV9vdXRwdXRJbWFnZUJ1ZmZlci5nZXQoKTsKLX0KLSAgICAKLXZvaWQgRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBsYXN0
RWZmZWN0KQotewotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBtX291
dHB1dEltYWdlQnVmZmVyID0gSU9TdXJmYWNlSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6
ZSwgbGFzdEVmZmVjdC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpLCBsYXN0RWZmZWN0LnJlc3VsdENv
bG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1fb3V0cHV0SW1hZ2VC
dWZmZXIpIHsKLSAgICAgICAgY2xlYXJSZXN1bHQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFtzaGFyZWRDSUNvbnRleHQoKS5nZXQoKSByZW5kZXI6IG1fb3V0cHV0SW1hZ2UuZ2V0
KCkgdG9JT1N1cmZhY2U6IG1fb3V0cHV0SW1hZ2VCdWZmZXItPnN1cmZhY2UoKS5zdXJmYWNlKCkg
Ym91bmRzOmRlc3RSZWN0KGxhc3RFZmZlY3QpIGNvbG9yU3BhY2U6bGFzdEVmZmVjdC5yZXN1bHRD
b2xvclNwYWNlKCkucGxhdGZvcm1Db2xvclNwYWNlKCldOwotfQotICAgIAotRmxvYXRSZWN0IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3Qm
IGxhc3RFZmZlY3QpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZlY3Qu
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZGVzdFNpemUuc2NhbGUobGFzdEVmZmVj
dC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBkZXN0U2l6ZSk7Ci0gICAgcmV0dXJuIGRlc3RSZWN0OwotfQot
Ci12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjbGVhclJlc3VsdCgpCi17Ci0g
ICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgbV9vdXRwdXRJbWFnZSA9IG51
bGxwdHI7Ci19Ci0KLUZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZSgpCi0gICAgOiBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpCi17Ci19Ci0g
ICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJl
c3VsdENvcmVJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhYmU1NjFiNzAxYmNhMDViMjQ0ZTUyNWUxNzhl
YzI0ZjZkZGQxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDT1JFX0lN
QUdFKQorCisjaW1wb3J0ICJGaWx0ZXJSZXN1bHQuaCIKKworT0JKQ19DTEFTUyBDSUltYWdlOwor
T0JKQ19DTEFTUyBDSUNvbnRleHQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmls
dGVyUmVzdWx0Q29yZUltYWdlIDogcHVibGljIEZpbHRlclJlc3VsdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQ7CisKKyAgICB2b2lkIHNldEltYWdlKFJl
dGFpblB0cjxDSUltYWdlPiYmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVm
ZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92ZXJyaWRlOworICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcigpIG92ZXJyaWRlOworCisgICAgUmV0YWluUHRyPENJSW1hZ2U+IG1faW1hZ2U7
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZp
bHRlclJlc3VsdENvcmVJbWFnZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyUmVzdWx0JiByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkg
PT0gV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7IH0KK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFn
ZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43Mjc5MmIxYWJlOTcwZDhjZGY4OWFmODVhNThkNTRkNWFiODAwYmI2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbQpAQCAtMCwwICsxLDU1IEBACisvKgorKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0
Q29yZUltYWdlLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCA8Q29yZUltYWdl
L0NJQ29udGV4dC5oPgorI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgorI2ltcG9ydCA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2U6OnNldEltYWdlKFJldGFpblB0cjxDSUltYWdlPiYmIGltYWdlKQor
eworICAgIEFTU0VSVChpbWFnZSk7CisgICAgbV9pbWFnZSA9IFdURk1vdmUoaW1hZ2UpOworfQor
CitSZWZQdHI8SW1hZ2VCdWZmZXI+JiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U6OmltYWdlQnVmZmVy
SWZFeGlzdHMoKQoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyOworfQorCitJbWFnZUJ1ZmZl
ciogRmlsdGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhp
Y0NvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmOGE4MGNiZmQ2NzI4MzZk
Zjg5OTVjZjM5ZDQzZGE1YmQ4NTUwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbQpA
QCAtMCwwICsxLDU2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6
CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgorCisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNp
bXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIFNvdXJjZUdyYXBoaWM6OmFwcGx5Q29yZUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgQVNTRVJUKHNvdXJjZUltYWdlKTsKKyAgICBpZiAoIXNvdXJjZUltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2U7CisgICAg
aWYgKGlzPElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQorICAgICAgICBpbWFn
ZSA9IFtDSUltYWdlIGltYWdlV2l0aElPU3VyZmFjZTpkb3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1
ZmZlcj4oKnNvdXJjZUltYWdlKS5zdXJmYWNlKCkuc3VyZmFjZSgpXTsKKyAgICBlbHNlCisgICAg
ICAgIGltYWdlID0gW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTpzb3VyY2VJbWFnZS0+Y29weU5h
dGl2ZUltYWdlKCktPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKV07CisKKyAgICBpZiAoIWltYWdlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZG93bmNhc3Q8RmlsdGVyUmVzdWx0Q29y
ZUltYWdlPihyZXN1bHQpLnNldEltYWdlKFdURk1vdmUoaW1hZ2UpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVP
Ti5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZF
QmxlbmRORU9OLmgKaW5kZXggMjYxMTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2Yx
OC4uZGU2NjA2OGNkZDBhOWNiNTc0YzBhY2JiYzhjOGM2MGE2Nzc0ZmYwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRO
RU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEwNywxNSArMTA3LDE4IEBAIHB1YmxpYzoKICAgICB9CiB9
OwogCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQq
IEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHRzJiByZXN1bHRzLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopCiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRF
ZmZlY3QoMSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIg
PSBzdGFjay50YWtlTGFzdCgpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZ2V0KHsg
KnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byByZXN1
bHQgPSBmaWx0ZXIoKS5jcmVhdGVGaWx0ZXJSZXN1bHQoYWJzb2x1dGVQYWludFJlY3QoKSwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSByZXN1bHQtPnBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
IAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTEyOSw3ICsxMzIsNyBA
QCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBpZiAoc291cmNl
UGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7CiAgICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNvdXJj
ZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCksIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiByZXN1bHQubGVha1JlZigpOwogICAgIH0KICAgICAvLyBJ
ZiB0aGVyZSBpcyBqdXN0IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdvLgogICAgIEFTU0VS
VChzb3VyY2VQaXhlbEFycmF5TGVuZ3RoID4gMCk7CkBAIC0xNDAsNiArMTQzLDggQEAgdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIHNvdXJjZUJBbmREZXN0WzBdID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCkpWzBd
OwogICAgIHBsYXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJj
ZUEpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CiAgICAgcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNl
QkFuZERlc3RbMF07CisKKyAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAogdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwg
dW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJy
YXksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggZjliZjE5
MWVlNjM4OWYwMWQ5YjVhMjEwMjUzY2QwMGIwMzAxODU0MC4uODQyM2NiYWRhMjUxN2E5MTYxOThj
MjFmZjM1OTg0NzllMmMwMGViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcApAQCAtMjI3LDYgKzIyNywxNCBAQCB2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdAogICAg
IGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJJbWFnZUJ1
ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciosIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRy
eT4mJikKK3sKKy8vICAgIGlmIChtX2RlbGVnYXRlKQorLy8gICAgICAgIG1fZGVsZWdhdGUtPnJl
Y29yZEltYWdlQnVmZmVyVXNlKCpzb3VyY2VJbWFnZSk7CisvLyAgICByZWNvcmRGaWx0ZXJVc2Uo
ZmlsdGVyKTsKKy8vICAgIGFwcGVuZDxEcmF3RmlsdGVySW1hZ2VCdWZmZXI+KGZpbHRlci5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBnZW9tZXRyeSk7Cit9CisKIHZvaWQgUmVjb3JkZXI6OnNhdmUoKQogewog
ICAgIGFwcGVuZDxTYXZlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgK
aW5kZXggYTVhZDM2NmQ0ZGNkOTlkODQzZTBiYmEwNjk1ZWQ3ZDI0NTM3MmJiZS4uOGE4ODFhZmNj
Y2ZhYjU2MTVjOGQ5ODRkM2U1MTc4YzJlZmM4NzdhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCkBAIC0xMjgsNiArMTI4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRy
YXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCBkcmF3UGF0dGVybihOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAKKyAgICB2b2lkIGRyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0
cjxGaWx0ZXJHZW9tZXRyeT4mJikgZmluYWw7CisKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ry
b2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2NzA0Y2Q2N2ZiMGE3YWZlOWFm
MThmYmI2MmMyY2VkOS4uMzU2ZTM1OTMzZmNlYmQ1YzdmMjg3MDRiMDI2Y2QwNTYxMWZlN2RiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDE0
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsyNiw0MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRORU9OLmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Cisj
aW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQoRmlsdGVyJiBmaWx0
ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Qmxl
bmQpCi0gICAgLCBtX21vZGUobW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoQmxl
bmRNb2RlIG1vZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChtb2RlKSk7
CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIEJsZW5k
TW9kZSBtb2RlKQorRkVCbGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkKKyAgICA6IG1fbW9k
ZShtb2RlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQoZmlsdGVyLCBtb2Rl
KSk7CiB9CiAKIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKQogewot
ICAgIGlmIChtX21vZGUgPT0gbW9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9k
ZSA9IG1vZGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9t
b2RlLCBtb2RlKSAhPSBtX21vZGU7CiB9CiAKLSNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RUJsZW5kOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAg
IEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAg
IGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0byByZXN1bHQg
PSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0
OwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIs
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2lu
dCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsg
aW4sIGluMiB9LCBudWxscHRyKTsKIH0KLSNlbmRpZgogCi1UZXh0U3RyZWFtJiBGRUJsZW5kOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUg
cmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUJsZW5kOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
ICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG1vZGU9
XCIiIDw8IChtX21vZGUgPT0gQmxlbmRNb2RlOjpOb3JtYWwgPyAibm9ybWFsIiA6IGNvbXBvc2l0
ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlKSkgPDwg
IlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsK
LSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCmluZGV4IDcwZTg0MDdiZjVj
MjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLjEwMDAzMmY4ZTQ5OTIyMDJhMjMyMzNhYmE5
YzU1MzE3MjZhY2M1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNCwzMiArMjUsMjcgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgog
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVC
bGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVC
bGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgc3RhdGljIFJlZjxGRUJsZW5k
PiBjcmVhdGUoQmxlbmRNb2RlKTsKIAogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIHNldEJsZW5kTW9kZShCbGVuZE1vZGUpOwogCiBw
cml2YXRlOgorICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKKwogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVCbGVuZCI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyh1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBz
cmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOworICAgIEZpbHRlclJl
c3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0
ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZFQmxlbmQoRmlsdGVyJiwgQmxlbmRN
b2RlKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
QmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKaW5kZXggMzgwNjVjYjk2YzdiNGI0YjAzZmM2YjBlZWQ4NWFjNGI2Yzk2OGE1
NC4uZGI0OGRjZGQ0MTM4ZGE2ZWYzNTkzNzRjMzE4NTkyNzdlMGFiY2M5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywyOCArMjQsMTkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxl
cmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNv
bG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZpbHRlciYgZmlsdGVyLCBDb2xvck1hdHJpeFR5cGUg
dHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IFR5cGU6OkNvbG9yTWF0cml4KQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3ZhbHVlcyhX
VEZNb3ZlKHZhbHVlcykpCitSZWY8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRl
KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQogeworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7
CiB9CiAKLVJlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQorRkVD
b2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZs
b2F0PiYmIHZhbHVlcykKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV92YWx1ZXMoV1RGTW92
ZSh2YWx1ZXMpKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgoZmls
dGVyLCB0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAogYm9vbCBGRUNvbG9yTWF0cml4Ojpz
ZXRUeXBlKENvbG9yTWF0cml4VHlwZSB0eXBlKQpAQCAtNjMsMjU4ICs1NSw0MyBAQCBib29sIEZF
Q29sb3JNYXRyaXg6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+ICZ2YWx1ZXMpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZh
bHVlcykKK3ZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZs
b2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsKLSAgICBmbG9hdCByID0gcmVkOwotICAg
IGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBiID0gYmx1ZTsKLSAgICBmbG9hdCBhID0gYWxw
aGE7Ci0KLSAgICByZWQgICAgID0gdmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNbIDFdICogZyArIHZh
bHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1ZXNbIDRdICogMjU1OwotICAgIGdy
ZWVuICAgPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0gKiBnICsgdmFsdWVzIFs3XSAqIGIg
KyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7Ci0gICAgYmx1ZSAgICA9IHZhbHVl
c1sxMF0gKiByICsgdmFsdWVzWzExXSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10g
KiBhICsgdmFsdWVzWzE0XSAqIDI1NTsKLSAgICBhbHBoYSAgID0gdmFsdWVzWzE1XSAqIHIgKyB2
YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4XSAqIGEgKyB2YWx1ZXNb
MTldICogMjU1OwotfQotCi1pbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYg
cmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBjb25zdCBmbG9hdCogY29tcG9uZW50cykK
LXsKLSAgICBmbG9hdCByID0gcmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBi
ID0gYmx1ZTsKLQotICAgIHJlZCAgICAgPSByICogY29tcG9uZW50c1swXSArIGcgKiBjb21wb25l
bnRzWzFdICsgYiAqIGNvbXBvbmVudHNbMl07Ci0gICAgZ3JlZW4gICA9IHIgKiBjb21wb25lbnRz
WzNdICsgZyAqIGNvbXBvbmVudHNbNF0gKyBiICogY29tcG9uZW50c1s1XTsKLSAgICBibHVlICAg
ID0gciAqIGNvbXBvbmVudHNbNl0gKyBnICogY29tcG9uZW50c1s3XSArIGIgKiBjb21wb25lbnRz
WzhdOwotfQotCi0vLyBGSVhNRTogdGhpcyBzaG91bGQgdXNlIHRoZSBsdW1pbmFuY2UoLi4uKSBm
dW5jdGlvbiBpbiBDb2xvckx1bWluYW5jZS5oLgotaW5saW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0
JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkKLXsKLSAgICBh
bHBoYSA9IDAuMjEyNSAqIHJlZCArIDAuNzE1NCAqIGdyZWVuICsgMC4wNzIxICogYmx1ZTsKLSAg
ICByZWQgPSAwOwotICAgIGdyZWVuID0gMDsKLSAgICBibHVlID0gMDsKLX0KLQotI2lmIFVTRShB
Q0NFTEVSQVRFKQotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci1ib29sIGVm
ZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0
IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxvYXQgY29tcG9uZW50c1s5XSwgSW50U2l6ZSBidWZm
ZXJTaXplKQotewotICAgIEFTU0VSVChwaXhlbEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUu
YXJlYSgpICogNCk7Ci0gICAgCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWCkgewotICAgICAgICAvLyB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCB0
YWtlcyBhIDR4NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhl
IEZFQ29sb3JNYXRyaXggNXg0IG1hdHJpeAotICAgICAgICAvLyBpcyBub3QgemVybywgZmFsbCBi
YWNrIHRvIG5vbi12SW1hZ2UgY29kZS4KLSAgICAgICAgaWYgKHZhbHVlc1s0XSAhPSAwIHx8IHZh
bHVlc1s5XSAhPSAwIHx8IHZhbHVlc1sxNF0gIT0gMCB8fCB2YWx1ZXNbMTldICE9IDApCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29uc3QgaW50MzJfdCBkaXZpc29y
ID0gMjU2OwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKLQotICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsKLSAg
ICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSBi
dWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRhID0gZGF0YTsKLSAgICAKLSAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsK
LSAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRl
cyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gZGF0YTsKLQotICAg
IHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDVdICogZGl2aXNv
cikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMF0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWzE1XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2aXNvcikpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNl0gKiBkaXZpc29yKSksCi0K
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDJdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sg
N10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICogZGl2aXNvcikpLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxM10gKiBkaXZpc29yKSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE4XSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4
ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFn
ZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6
IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRdID0gewotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMF0gKiBkaXZpc29yKSksCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1szXSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25l
bnRzWzZdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s0XSAqIGRpdmlzb3Ip
KSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzdd
ICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzhdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgZGl2aXNvciwKLSAgICAgICAgfTsKLSAgICAg
ICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2
aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogewot
ICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICB9OwotICAgICAg
ICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZp
c29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgY29tcG9uZW50c1swXSA9
ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAw
LjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1
ZSk7CisgICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNv
bXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzVd
ID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAt
IDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZh
bHVlKTsKKyAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7CiB9Ci0j
ZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci12b2lkIGVmZmVj
dFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXplKQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsK
LSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVT
YXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICBlbHNlIGlmIChm
aWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUpCi0gICAgICAgIEZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVz
WzBdKTsKLQotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0
aCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgaWYgKGVmZmVjdEFwcGx5QWNjZWxlcmF0
ZWQ8ZmlsdGVyVHlwZT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRzLCBidWZmZXJTaXpl
KSkKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7
Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQg
PSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQg
Kz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0
ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0
ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVs
QXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIG1hdHJpeChyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSwgdmFsdWVzKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0
KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9
IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCAr
PSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgc2F0dXJhdGVBbmRI
dWVSb3RhdGUocmVkLCBncmVlbiwgYmx1ZSwgY29tcG9uZW50cyk7Ci0gICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXku
c2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwg
cGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZs
b2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAg
ZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAg
ICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIp
OwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zm
c2V0ICsgMyk7Ci0gICAgICAgICAgICBsdW1pbmFuY2UocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1
ZSAqIHBpRmxvYXQgLyAxODApOworICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxv
YXQgLyAxODApOworICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0g
c2luSHVlICogMC4yMTM7CisgICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43
MTUgLSBzaW5IdWUgKiAwLjcxNTsKKyAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUg
KiAwLjA3MiArIHNpbkh1ZSAqIDAuOTI4OworICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNv
c0h1ZSAqIDAuMjEzICsgc2luSHVlICogMC4xNDM7CisgICAgY29tcG9uZW50c1s0XSA9IDAuNzE1
ICsgY29zSHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKKyAgICBjb21wb25lbnRzWzVdID0g
MC4wNzIgLSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOworICAgIGNvbXBvbmVudHNb
Nl0gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7CisgICAgY29tcG9u
ZW50c1s3XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKKyAgICBj
b21wb25lbnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwog
fQogCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFQ29sb3JNYXRyaXg6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoaW5CdWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgp
KTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNlKCkgfTsKLSAgICBJbnRSZWN0IGltYWdl
UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBw
aXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIGltYWdlUmVj
dCk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYg
cGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXV0byBwaXhlbEFycmF5RGlt
ZW5zaW9ucyA9IHBpeGVsQnVmZmVyLT5zaXplKCk7Ci0KLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVl
cyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwotICAgIAotICAgIHN3aXRjaCAobV90eXBl
KSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBlZmZlY3RUeXBl
PEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURTogCi0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBl
ZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU+KHBpeGVsQXJyYXksIHZhbHVl
cywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVs
QXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5n
ZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHJlc3VsdEltYWdl
LT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIGFw
cGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0
eXBlKQpAQCAtMzM5LDEwICsxMTYsOSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5k
ZW50IDw8ICJbZmVDb2xvck1hdHJpeCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiB0eXBlPVwiIiA8PCBt
X3R5cGUgPDwgIlwiIjsKICAgICBpZiAoIW1fdmFsdWVzLmlzRW1wdHkoKSkgewogICAgICAgICB0
cyA8PCAiIHZhbHVlcz1cIiI7CkBAIC0zNTcsOSArMTMzLDYgQEAgVGV4dFN0cmVhbSYgRkVDb2xv
ck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb24KICAgICAgICAgdHMgPDwgIlwiIjsKICAgICB9CiAgICAgdHMgPDwgIl1cbiI7Ci0gICAg
Ci0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0
RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAg
ICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDI5ZTQxYThhZWQxZTRmMGI1
Mzk3MDNhYzRkYjU1MjRlZmE0YzEyM2YuLmY2MTIxM2ZlNjBmZTBiNGNjM2QyY2RlZjliNjQyZjQ2
ZGI0ZDEyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszNyw3IEBA
IGVudW0gQ29sb3JNYXRyaXhUeXBlIHsKIAogY2xhc3MgRkVDb2xvck1hdHJpeCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4gY3Jl
YXRlKEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKKyAgICBzdGF0
aWMgUmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9h
dD4mJik7CiAKICAgICBDb2xvck1hdHJpeFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogICAgIGJvb2wgc2V0VHlwZShDb2xvck1hdHJpeFR5cGUpOwpAQCAtNDYsNTQgKzQ1LDIy
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlczsgfQogICAgIGJvb2wgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4m
KTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMo
ZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQg
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFs
dWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUh1ZVJv
dGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKIAogcHJpdmF0
ZToKLSAgICBGRUNvbG9yTWF0cml4KEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZs
b2F0PiYmKTsKKyAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0
PiYmKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVDb2xvck1hdHJpeCI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIENvbG9yTWF0cml4
VHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPGZsb2F0PiBtX3ZhbHVlczsKIH07CiAKLWlubGluZSB2
b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQgdmFsdWUpCi17Ci0gICAgY29tcG9uZW50c1swXSA9ICgwLjIxMyArIDAu
Nzg3ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVl
KTsKLSAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29t
cG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNF0g
PSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzVdID0gKDAuMDcyIC0g
MC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAtIDAuMjEzICogdmFs
dWUpOwotICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKLSAgICBj
b21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lk
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBv
bmVudHMsIGZsb2F0IHZhbHVlKQotewotICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1ZSAqIHBp
RmxvYXQgLyAxODApOwotICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxvYXQgLyAx
ODApOwotICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0gc2luSHVl
ICogMC4yMTM7Ci0gICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgLSBz
aW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3
MiArIHNpbkh1ZSAqIDAuOTI4OwotICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNvc0h1ZSAq
IDAuMjEzICsgc2luSHVlICogMC4xNDM7Ci0gICAgY29tcG9uZW50c1s0XSA9IDAuNzE1ICsgY29z
SHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKLSAgICBjb21wb25lbnRzWzVdID0gMC4wNzIg
LSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOwotICAgIGNvbXBvbmVudHNbNl0gPSAw
LjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7Ci0gICAgY29tcG9uZW50c1s3
XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25l
bnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwotfQotCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENs
YXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg7IH0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5jcHAKaW5kZXggODQ3ZWE1OGY1ZjliMDM4NjZkOWVhYzU3ZjEwY2NmNTc0MDJmOWU2My4uZmVi
ODA4NmVhZjUyYzJjMjkwNDhiZjVlZmFkYmIyZjI3YjNjZGM0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjQsMTM4ICsyNSwzMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZF
Q29tcG9uZW50VHJhbnNmZXIuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9u
ZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAgIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
YWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyKQotICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKLSAgICAsIG1fZ3Jl
ZW5GdW5jdGlvbihncmVlbkZ1bmN0aW9uKQotICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0
aW9uKQotICAgICwgbV9hbHBoYUZ1bmN0aW9uKGFscGhhRnVuY3Rpb24pCi17Ci19Ci0KLVJlZjxG
RUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAg
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRUNvbXBvbmVudFRyYW5zZmVyKGZpbHRlciwgcmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24s
IGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOwotfQotCi12b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpCitSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCiB7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVDb21wb25lbnRUcmFuc2ZlcihyZWRGdW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1
ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAg
ICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAg
ICAgcmV0dXJuOyAgICAgICAgICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAg
ICAgICAgIAotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAo
biAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRv
dWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKLSAgICAg
ICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2
MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsK
LSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19
Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3Vw
VGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJG
dW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5z
ZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNp
emUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAvIDI1NS4wKTsKLSAgICAgICAgayA9IHN0ZDo6
bWluKGssIG4gLSAxKTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVzW2td
OwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAg
ICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0K
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUg
KiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4w
LCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0
cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEg
ZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBw
b3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGRUNvbXBvbmVu
dFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVl
bkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24s
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBt
X3JlZEZ1bmN0aW9uKHJlZEZ1bmN0aW9uKQorICAgICwgbV9ncmVlbkZ1bmN0aW9uKGdyZWVuRnVu
Y3Rpb24pCisgICAgLCBtX2JsdWVGdW5jdGlvbihibHVlRnVuY3Rpb24pCisgICAgLCBtX2FscGhh
RnVuY3Rpb24oYWxwaGFGdW5jdGlvbikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGdyZWVuVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhy
ZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKLQotICAgIEludFJl
Y3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoID0gZGVzdGluYXRpb25QaXhl
bEFycmF5Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBkZXN0aW5hdGlvblBpeGVsQXJy
YXkuZGF0YSgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNl
dCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAg
ICAgICBkYXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKLSAg
ICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0
ICsgMV1dOwotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtw
aXhlbE9mZnNldCArIDJdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFU
YWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgM11dOwotICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9v
a3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxl
JiBhbHBoYVRhYmxlKQorRmlsdGVyUmVzdWx0KiBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseShG
aWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZm
ZXIqKSBjb25zdAogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWRUYWJsZS5zaXpl
KCk7ICsraSkKLSAgICAgICAgcmVkVGFibGVbaV0gPSBncmVlblRhYmxlW2ldID0gYmx1ZVRhYmxl
W2ldID0gYWxwaGFUYWJsZVtpXSA9IGk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOwor
ICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBl
ID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlk
ZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAg
ICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lE
RU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxl
LCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgotICAgICAgICBjb21wdXRl
R2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9
OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fcmVkRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJS
QVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZ3JlZW5GdW5jdGlvbi50eXBlKSA8IFdURl9BUlJB
WV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9ibHVlRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlf
TEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYWxwaGFGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9M
RU5HVEgoY2FsbEVmZmVjdCkpOwotCi0gICAgY2FsbEVmZmVjdFttX3JlZEZ1bmN0aW9uLnR5cGVd
KHJlZFRhYmxlLCBtX3JlZEZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fZ3JlZW5GdW5jdGlv
bi50eXBlXShncmVlblRhYmxlLCBtX2dyZWVuRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9i
bHVlRnVuY3Rpb24udHlwZV0oYmx1ZVRhYmxlLCBtX2JsdWVGdW5jdGlvbik7Ci0gICAgY2FsbEVm
ZmVjdFttX2FscGhhRnVuY3Rpb24udHlwZV0oYWxwaGFUYWJsZSwgbV9hbHBoYUZ1bmN0aW9uKTsK
KyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb25lbnRU
cmFuc2ZlclR5cGUgdHlwZSkKQEAgLTIwOSwxMCArMTA0LDkgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGYKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9u
VHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29tcG9uZW50VHJhbnNm
ZXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHRzIDw8ICJcbiI7CiAgICAgewogICAgICAgICBUZXh0U3RyZWFtOjpJ
bmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgMik7CkBAIC0yMjEsOSArMTE1LDYgQEAgVGV4dFN0
cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgUmVwcmVzZW4KICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7Ymx1ZTogIiA8PCBt
X2JsdWVGdW5jdGlvbiA8PCAifVxuIjsKICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7YWxwaGE6
ICIgPDwgbV9hbHBoYUZ1bmN0aW9uIDw8ICJ9XVxuIjsKICAgICB9Ci0KLSAgICBUZXh0U3RyZWFt
OjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggMmI1ODZkZWY3ZmI0MmEzN2IyZTEy
M2VkYTg3MTE5YzRlYjM0OGE1MS4uNzYxMDY5ZGI4OWU0Mzc3NGE4NzY4MzY5ZTk1NTZlNjcxNjE0
NGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDkgKzI0LDYgQEAKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gQ29tcG9uZW50VHJhbnNm
ZXJUeXBlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBjcmVhdGUoRmls
dGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJs
dWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOworICAg
IHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVl
RnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24p
OwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRGdW5jdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdy
ZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuRnVuY3Rpb247IH0KQEAgLTYyLDI0
ICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBhbHBoYUZ1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1bmN0aW9uOyB9CiAKIHByaXZhdGU6Ci0g
ICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1
bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5j
KTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBo
YUZ1bmN0aW9uKTsKIAotICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90
LCAyNTY+OworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KIAotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVu
dGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZURp
c2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVH
YW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgY29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUs
IExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBU
YWJsZSYgYWxwaGFUYWJsZSk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG1fcmVkRnVuY3Rpb247CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBt
X2dyZWVuRnVuY3Rpb247CkBAIC04OCw3ICs3NiwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2ZlcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFz
c1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVy
OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhi
NTllNjZkZTlmZThkNjM5MTZjYmU1Y2U2ZGQ0MDM4ZmE0Y2IyYTguLmNmMDRlNDNjNTUyMjkwNzFk
M2YxZjMyNTQ0Zjg5ZjQ1OWJhNThhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI1LDE5IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29t
cG9zaXRlQXJpdGhtZXRpY05FT04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRl
OjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlw
ZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBG
aWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlwZSkK
K1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVPcGVy
YXRvciwgazEsIGsyLCBrMywgazQpKTsKK30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZF
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogbV9jb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVP
cGVyYXRvcikKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQogICAgICwgbV9rMyhrMykK
QEAgLTQyLDI2NCArNDUsNjIgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYgZmls
dGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG8KIHsKIH0KIAotUmVm
PEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBD
b21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGsz
LCBmbG9hdCBrNCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShmaWx0
ZXIsIHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVDb21wb3NpdGU6OnNldE9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCitib29sIEZFQ29tcG9zaXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
KQogewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFu
Z2UobV9jb21wb3NpdGVPcGVyYXRvciwgY29tcG9zaXRlT3BlcmF0b3IpICE9IG1fY29tcG9zaXRl
T3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZsb2F0IGsxKQogewotICAg
IGlmIChtX2sxID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMSA9IGsxOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazEsIGsxKSAhPSBt
X2sxOwogfQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMihmbG9hdCBrMikKIHsKLSAgICBpZiAo
bV9rMiA9PSBrMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazIgPSBrMjsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2syLCBrMikgIT0gbV9rMjsK
IH0KIAogYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzMoZmxvYXQgazMpCiB7Ci0gICAgaWYgKG1fazMg
PT0gazMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2szID0gazM7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMywgazMpICE9IG1fazM7CiB9CiAK
IGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogewotICAgIGlmIChtX2s0ID09IGs0
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rNCA9IGs0OwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazQsIGs0KSAhPSBtX2s0OwogfQogCi12b2lk
IEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQorRmxvYXRSZWN0IEZF
Q29tcG9zaXRlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChtX3R5cGUg
IT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLX0KKyAgICAvLyBGb3IgSW4gYW5k
IEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgorICAg
IC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVj
dCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgorICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9y
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOIHx8IG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVD
T01QT1NJVEVfT1BFUkFUT1JfQVRPUCkKKyAgICAgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERyYXdp
bmdSZWN0KGlucHV0cywgaW5wdXRzWzFdLT5kcmF3aW5nUmVjdCgpKTsKICAgICAKLXN0YXRpYyB1
bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZb
XSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OwotICAgIHVuc2ln
bmVkIHVjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMpOwotICAgIHJldHVybiBidWZmWyEhKHVj
ICYgfjB4ZmYpICsgISEodWMgJiB+KH4wdSA+PiAxKSldOwotfQotCi10ZW1wbGF0ZSA8aW50IGIx
LCBpbnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHModW5z
aWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVs
QXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewot
ICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChiMSkKLSAg
ICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAgIHNjYWxl
ZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3RoID49IDAp
IHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVuc2lnbmVk
IGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsyICogaTEg
KyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVk
SzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2Nh
bGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gY2xhbXBCeXRlKHJlc3VsdCk7Ci0gICAg
ICAgICsrc291cmNlOwotICAgICAgICArK2Rlc3RpbmF0aW9uOwotICAgIH0KLX0KLQotLy8gY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQgaXMgYSBmYXN0ZXIgdmVyc2lvbiBvZiBjb21w
dXRlQXJpdGhtZXRpY1BpeGVscyBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGNsYW1waW5nCi0v
LyBpcyBub3QgbmVjZXNzYXJ5LiBUaGlzIGVuYWJsZXMgYWdncmVzaXZlIGNvbXBpbGVyIG9wdGlt
aXphdGlvbnMgc3VjaCBhcyBhdXRvLXZlY3Rvcml6YXRpb24uCi10ZW1wbGF0ZSA8aW50IGIxLCBp
bnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50
IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChi
MSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAg
IHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3Ro
ID49IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsy
ICogaTEgKyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0g
c2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQg
Kz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gcmVzdWx0OwotICAgICAgICAr
K3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLSNpZiAhSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQotc3RhdGljIGlubGluZSB2b2lkIGFyaXRobWV0aWNTb2Z0d2Fy
ZSh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQg
cGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
Ci17Ci0gICAgZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYsIGsxKSArIHN0ZDo6bWF4
KDAuMGYsIGsyKSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OwotICAgIGZsb2F0IGxvd2VyTGlt
aXQgPSBzdGQ6Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBrMikgKyBzdGQ6Om1pbigw
LjBmLCBrMykgKyBrNDsKLSAgICBpZiAoKGs0ID49IDAuMGYgJiYgazQgPD0gMS4wZikgJiYgKHVw
cGVyTGltaXQgPj0gMC4wZiAmJiB1cHBlckxpbWl0IDw9IDEuMGYpICYmIChsb3dlckxpbWl0ID49
IDAuMGYgJiYgbG93ZXJMaW1pdCA8PSAxLjBmKSkgewotICAgICAgICBpZiAoazQpIHsKLSAgICAg
ICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1Vu
Y2xhbXBlZDwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFy
aXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKGsxKQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwg
azMsIGs0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGht
ZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5
TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChrNCkgewotICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsczwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVu
Z3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoazEpCi0gICAg
ICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9u
LCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24s
IHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9Ci19Ci0jZW5kaWYKLQot
aW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi17Ci0gICAgaW50IGxl
bmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0
PGludD4oZGVzdGluYXRpb24ubGVuZ3RoKCkpKTsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUg
ZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5LgotI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKLSAgICBwbGF0Zm9ybUFy
aXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBr
MSwgazIsIGszLCBrNCk7Ci0jZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2UuZGF0
YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsK
LSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICAvLyBGb3IgSW4g
YW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgot
ICAgICAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBh
aW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQ
YWludFJlY3QoaW5wdXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBj
bGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKLSAgICAgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5m
bHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0Ci0g
ICAgICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KLSAgICAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJv
dGggaW5wdXQgZWZmZWN0cy4KLSAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIC8vIEFyaXRobWV0aWMg
bWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBj
YW4ndAorICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KKyAgICBpZiAobV9j
b21wb3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAg
ICAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CisgICAg
CisgICAgcmV0dXJuIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoaW5wdXRzLCBnZW9tZXRyeSk7
CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFQ29tcG9zaXRlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBpZiAobV90eXBl
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwot
ICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlw
bGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEs
IG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1
ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbiA9IHN0
YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBzdGFjay50YWtlTGFzdCgpOworICAgIAor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdp
b24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9
IGRlc3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAg
ICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3Rp
bmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9z
aXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6
ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5s
b2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3ApOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZm
ZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0
dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluLCBpbjIgfSwgbnVsbHB0cik7CiB9CiAKLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3Np
dGVPcGVyYXRpb25UeXBlJiB0eXBlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZFQ29tcG9zaXRlT3BlcmF0b3ImIGNvbXBvc2l0ZU9wZXJhdG9y
KQogewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0b3Ip
IHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgIHRzIDw8
ICJVTktOT1dOIjsKICAgICAgICAgYnJlYWs7CkBAIC0zMjgsMTggKzEyOSwxMyBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSYgdHlwZQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb21w
b3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0
aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29tcG9zaXRlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlv
bikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbXBvc2l0ZSI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0g
ICAgdHMgPDwgIiBvcGVyYXRpb249XCIiIDw8IG1fdHlwZSA8PCAiXCIiOwotICAgIGlmIChtX3R5
cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICB0cyA8PCAiIG9wZXJh
dGlvbj1cIiIgPDwgbV9jb21wb3NpdGVPcGVyYXRvciA8PCAiXCIiOworICAgIGlmIChtX2NvbXBv
c2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCiAgICAgICAg
IHRzIDw8ICIgazE9XCIiIDw8IG1fazEgPDwgIlwiIGsyPVwiIiA8PCBtX2syIDw8ICJcIiBrMz1c
IiIgPDwgbV9rMyA8PCAiXCIgazQ9XCIiIDw8IG1fazQgPDwgIlwiIjsKICAgICB0cyA8PCAiXVxu
IjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXggN2QwOGUxZjcx
MDdiNGI5NjhjNThlM2EzN2MzMmFlMmY3NmFlYTBjMy4uOTlmMjkwNWRjZmJjMDRjOGZjMWVhNThm
MWMwYTVmMWI4OWViNDNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTIgKzI0LDkgQEAKIAogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBDb21wb3NpdGVP
cGVyYXRpb25UeXBlIHsKK2VudW0gRkVDb21wb3NpdGVPcGVyYXRvciB7CiAgICAgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfVU5LTk9XTiAgICA9IDAsIAogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX09W
RVIgICAgICAgPSAxLAogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOICAgICAgICAgPSAyLApA
QCAtNDEsMTAgKzM5LDEwIEBAIGVudW0gQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB7CiAKIGNsYXNz
IEZFQ29tcG9zaXRlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRUNvbXBvc2l0ZT4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRUNv
bXBvc2l0ZT4gY3JlYXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KTsKIAotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSk7CisgICAgRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBib29s
IHNldENvbXBvc2l0ZU9wZXJhdG9yKEZFQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgZmxvYXQg
azEoKSBjb25zdCB7IHJldHVybiBtX2sxOyB9CiAgICAgYm9vbCBzZXRLMShmbG9hdCk7CkBAIC01
OCwzMCArNTYsMjAgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1cm4gbV9r
NDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1
aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAh
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6Ci0gICAgRkVD
b21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBGRUNvbXBvc2l0ZShGRUNvbXBvc2l0ZU9wZXJhdG9y
LCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKICAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9zaXRlIjsgfQog
Ci0gICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZl
Y3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0
IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAgICBib29sIGFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCi0gICAgdGVtcGxhdGUgPGludCBiMSwgaW50IGI0PgotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc05lb24oY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxv
YXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOworICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZv
cm1Bcml0aG1ldGljTmVvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0
IGszLCBmbG9hdCBrNCk7Ci0jZW5kaWYKLQotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgbV90
eXBlOworICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgbV9jb21wb3NpdGVPcGVyYXRvcjsKICAgICBm
bG9hdCBtX2sxOwogICAgIGZsb2F0IG1fazI7CiAgICAgZmxvYXQgbV9rMzsKQEAgLTg5LDQgKzc3
LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAKaW5kZXggNzViMmU3YzZlYTEzYzJjMWMyZjhmNjVkM2RiNGVkNWNjM2Fm
ZGE4Zi4uMTEyMzkzYWIwODZjZWRiOGJlZjZlNjFkZTQwNDg3YThhOTkxNjk4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFu
IEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQs
MTkgKzI1LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1h
dHJpeC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
LSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5o
PgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0Lmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywg
Y29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAg
IGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6Q29udm9sdmVNYXRyaXgpCi0gICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6
ZSkKK1JlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoY29uc3Qg
SW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50
UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBv
aW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIGtlcm5lbE1hdHJpeCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbnZv
bHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1v
ZGUsIGtlcm5lbFVuaXRMZW5ndGgsIHByZXNlcnZlQWxwaGEsIGtlcm5lbE1hdHJpeCkpOworfQor
CitGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5l
bFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRP
ZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5p
dExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxN
YXRyaXgpCisgICAgOiBtX2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKICAgICAsIG1fZGl2aXNvcihk
aXZpc29yKQogICAgICwgbV9iaWFzKGJpYXMpCiAgICAgLCBtX3RhcmdldE9mZnNldCh0YXJnZXRP
ZmZzZXQpCkBAIC00OSwxNCArNTAsNiBAQCBGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0
cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIEFTU0VS
VChtX2tlcm5lbFNpemUuaGVpZ2h0KCkgPiAwKTsKIH0KIAotUmVmPEZFQ29udm9sdmVNYXRyaXg+
IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYg
a2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2lu
dCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQ
b2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb252
b2x2ZU1hdHJpeChmaWx0ZXIsIGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNl
dCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCi0gICAgICAgIHByZXNlcnZlQWxwaGEsIGtl
cm5lbE1hdHJpeCkpOwotfQotCiB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUo
Y29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSkKIHsKICAgICBBU1NFUlQoa2VybmVsU2l6ZS53aWR0
aCgpID4gMCk7CkBAIC0xMjAsMzE4ICsxMTMsMjAgQEAgYm9vbCBGRUNvbnZvbHZlTWF0cml4Ojpz
ZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotLyoKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICBDb252
b2x2ZU1hdHJpeCBpbXBsZW1lbnRhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAgVGhlIGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93
aW5nIHdheToKLQotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAg
ICAgQSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAg
IHwgICAgICAgICAgICAgfCAgIHwKLSAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8Ci0gICAg
ICB8ICAgfCAgICAgICAgICAgICB8ICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK
LSAgICAgIHwgICAgICAgICAgRSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKwotCi0gICBXaGVyZSByZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZh
bHVlcwotICAgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0
aGUgcmVjdGFuZ2xlLgotCi0gICBFeGFtcGxlOgotICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEw
LCBoZWlnaHQ6IDEwCi0KLSAgICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDog
MywgaGVpZ2h0IDQKLSAgICAgIFRhcmdldDogeDoxLCB5OjMKLQotICAgICAgVGhlIGZvbGxvd2lu
ZyBmaWd1cmUgc2hvd3MgdGhlIHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6Ci0KLSAg
ICAgICAgLi4uCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLlguCi0KLSAgIFRo
ZSByZWdpb25zIGluIHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKLSAgICAgIE5vdGU6ICh4
MSwgeTEpIHRvcC1sZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgot
ICAgICAgTm90ZTogcm93IHgyIGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lv
bgotICAgICAgICAgICAgb25seSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwg
eDIgYW5kIHkxIDw9IHkgPCB5MgotCi0gICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4Mjog
MTAsIHkyOiAzCi0gICAgICBSZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCi0g
ICAgICBSZWdpb24gQzogeDE6IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCi0gICAgICBSZWdpb24g
RDogeDE6IDksIHkxOiAzLCB4MjogMTAsIHkyOiAxMAotICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5
MTogMTAsIHgyOiAxMCwgeTI6IDEwIChlbXB0eSByZWdpb24pCi0KLSAgIFNpbmNlIHJlZ2lvbiBD
IChvZnRlbikgY29udGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAotICAg
YSBmYXN0IGFsZ29yaXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0
SW50ZXJpb3JQaXhlbHMuCi0gICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxz
IGlzIHVzZWQsIHdoaWNoIGNhbGxzIGdldFBpeGVsVmFsdWUsCi0gICB0byBoYW5kbGUgcGl4ZWxz
IG91dHNpZGUgb2YgdGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgotICAga2Vy
bmVsIG1hdHJpeCBpcyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1
bGF0ZWQgYnkgdGhpcwotICAgZnVuY3Rpb24uCi0KLSAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5j
dGlvbnMgaGF2ZSBsb3QgaW4gY29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKLSAgIGNvbW1v
biBhIHRlbXBsYXRlIGZvciB0aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFz
IHdlbGwsCi0gICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgot
Ki8KLQotc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShm
bG9hdCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG1heCA9IDI1NSkKK0Zsb2F0UmVjdCBGRUNvbnZv
bHZlTWF0cml4OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChjaGFubmVs
IDw9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChjaGFubmVsID49IG1heCkKLSAgICAg
ICAgcmV0dXJuIG1heDsKLSAgICByZXR1cm4gY2hhbm5lbDsKKyAgICByZXR1cm4gZ2VvbWV0cnku
bWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CiB9CiAKLXRlbXBsYXRlPGJvb2wgcHJlc2Vy
dmVBbHBoYVZhbHVlcz4KLUFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxv
YXQgYmlhcykKK0ZpbHRlclJlc3VsdCogRkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoRmlsdGVyT3V0
cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29u
c3QKIHsKLSAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/
IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwr
KywgY2xhbXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7
Ci0KLSAgICBpZiAocHJlc2VydmVBbHBoYVZhbHVlcykgewotICAgICAgICBkZXN0UGl4ZWxzLnNl
dChwaXhlbCwgc291cmNlUGl4ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAgICAgKytwaXhlbDsKLSAg
ICB9IGVsc2UKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwotfQot
Ci0jaWYgQ09NUElMRVIoTVNWQykKLS8vIEluY29ycmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRl
IG9mIHN0YWNrIGluIHx0b3RhbHN8IGR1ZSB0byB8cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJh
Z21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlm
Ci0KLS8vIE9ubHkgZm9yIHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1
ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9y
UGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xp
cEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8gZWRnZSBtb2RlIGRvZXMg
bm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQu
eSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAg
aW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0g
KG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0g
b2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhh
VmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7
Ci0KLSAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKLSAg
ICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQg
KyAxKSAqIDQpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5k
KSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQotICAgIGZvciAoaW50IHkg
PSB5RW5kICsgMTsgeSA+IHlTdGFydDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBjbGlw
UmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBw
YWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2Vy
bmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9r
ZXJuZWxTaXplLndpZHRoKCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1
dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwot
ICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0g
ICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90
YWxzWzNdID0gMDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7
ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAgICAgICB3aGlsZSAo
a2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAg
ICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJu
ZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5r
ZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIGlm
ICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9
IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKLSAgICAg
ICAgICAgICAgICArK2tlcm5lbFBpeGVsOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7
Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtl
cm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9
IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBw
aXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKLSAgICAgICAgICAg
IHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5j
cmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOwotICAgIH0KLX0K
LQotQUxXQVlTX0lOTElORSBpbnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQotewotICAgIGlmICh4ID49IDAg
JiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5o
ZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7
Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9O
T05FCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKLSAg
ICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHgg
Pj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0
aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkKLSAgICAgICAgICAgIHkgPSAwOwotICAgICAgICBl
bHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgICAgICB5ID0gcGFpbnRp
bmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0
aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAgICB3aGlsZSAoeCA8
IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICAgICAgeCAlPSBw
YWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHdoaWxlICh5IDwgMCkKLSAgICAgICAgICAgIHkg
Kz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0
OwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAg
IH0KLX0KLQotLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1wbGF0ZTxib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50
IHkyKQotewotICAgIGludCBwaXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAq
IDQ7Ci0gICAgaW50IGhlaWdodCA9IHkyIC0geTE7Ci0gICAgaW50IHdpZHRoID0geDIgLSB4MTsK
LSAgICBpbnQgYmVnaW5LZXJuZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKLSAg
ICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3Rh
cnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsKLSAgICBpbnQgeEluY3Jl
YXNlID0gKHBhaW50aW5nRGF0YS53aWR0aCAtIHdpZHRoKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMg
dGhlIHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNl
cnZlQWxwaGFWYWx1ZXMgPyAwIDogMSldOwotCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAw
LCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9k
aXZpc29yKTsKLQotICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2Vy
bmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAg
ICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICBp
bnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lk
dGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsK
LSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwot
ICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRv
dGFsc1szXSA9IDA7Ci0KLSAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0
YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOwotICAgICAgICAgICAgICAgIGlmIChwaXhl
bEluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5n
RGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCkpOwotICAgICAgICAgICAgICAg
ICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhl
bEluZGV4ICsgMSkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJ
bmRleCA+PSAwKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRh
Lmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMykpOwotICAgICAgICAgICAgICAg
ICsra2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVs
WCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVs
WTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0
aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBw
YWludGluZ0RhdGEuYmlhcyk7Ci0gICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwotICAg
ICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3RhcnRLZXJuZWxQ
aXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsK
LSAgICB9Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8g
RGlzYWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
Y2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAg
Ly8gTXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdB
WVNfSU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291
cmNlIGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RT
ZXRJbnRlcmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRv
bSwgeVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVs
czxmYWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVu
ZCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBp
eGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4Miwg
aW50IHkyKQotewotICAgIC8vIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRv
IHRoZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldElu
dGVyaW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZl
QWxwaGEpCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgx
LCB5MSwgeDIsIHkyKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxz
ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9w
cmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVs
QXJyYXk7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJh
eSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7Ci0gICAgZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnBy
ZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50
U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIFBhaW50aW5nRGF0YSBw
YWludGluZ0RhdGEgPSB7Ci0gICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0
aW5hdGlvblBpeGVsQXJyYXksCi0gICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAotICAgICAgICBw
YWludFNpemUuaGVpZ2h0KCksCi0gICAgICAgIG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9ybWFs
aXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKLSAgICB9OwotCi0gICAgLy8gRHJhd2luZyBmdWxs
eSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAt
IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhl
aWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOwotCi0gICAgaWYgKGNsaXBSaWdodCA8IDAg
fHwgY2xpcEJvdHRvbSA8IDApIHsKLSAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRp
bWl6aWVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0
KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVj
dERpbWVuc2lvbikgewotICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlv
bnM7Ci0gICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAv
IHN0cmlkZTsKLQotICAgICAgICBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShjaHVua0NvdW50
LCBbJl0oc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAq
IGluZGV4KTsKLSAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAo
aW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxz
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAg
ICAgICB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdE
YXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJp
Z2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3Rhcmdl
dE9mZnNldC55KCkgKyAxOwotICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAg
ICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBt
X3RhcmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdo
dCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20s
IHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3Rhcmdl
dE9mZnNldC54KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAg
ICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6
ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0cik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCkBAIC00NTMsMTAgKzE0OCw5
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBF
ZGdlTW9kZVR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNv
bnZvbHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXBy
ZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbnZv
bHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbnZvbHZl
TWF0cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG9yZGVyPVwiIiA8PCBtX2tlcm5lbFNpemUgPDwg
IlwiICIKICAgICAgICA8PCAia2VybmVsTWF0cml4PVwiIiA8PCBtX2tlcm5lbE1hdHJpeCAgPDwg
IlwiICIKICAgICAgICA8PCAiZGl2aXNvcj1cIiIgPDwgbV9kaXZpc29yIDw8ICJcIiAiCkBAIC00
NjUsOSArMTU5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXQKICAgICAgICA8PCAiZWRnZU1v
ZGU9XCIiIDw8IG1fZWRnZU1vZGUgPDwgIlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0
aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoIDw8ICJcIiAiCiAgICAgICAgPDwgInByZXNlcnZl
QWxwaGE9XCIiIDw8IG1fcHJlc2VydmVBbHBoYSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVh
bTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDY3ZDRjNjU2N2ZjZTZiMjdlZTVhYjg5NWE2
ZTFlNTAwNTRlMTNkYmEuLjFhNjk1YjRkOTIxZjI2ODY2ZjBkYTNkMTJiOWNmMmI2MGUzOTc0MjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBa
b2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNCw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw5ICszOCw3IEBAIGVudW0gRWRnZU1vZGVU
eXBlIHsKIAogY2xhc3MgRkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRlciYs
IGNvbnN0IEludFNpemUmLAotICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2lu
dCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29sLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisgICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBj
cmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlh
cywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2tlcm5lbFNpemU7IH0KICAgICB2b2lkIHNldEtlcm5lbFNpemUoY29uc3Qg
SW50U2l6ZSYpOwpAQCAtNjcsNDEgKzY1LDE3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFByZXNl
cnZlQWxwaGEoYm9vbCk7CiAKIHByaXZhdGU6Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsK
LSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAg
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0g
ICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGZsb2F0IGJpYXM7Ci0gICAgICAgIFZlY3Rvcjxm
bG9hdD4ga2VybmVsTWF0cml4OwotICAgIH07Ci0KLSAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRl
ciYsIGNvbnN0IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQ
b2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mKTsKKyAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNp
emUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZz
ZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9v
bCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCiAg
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZv
bHZlTWF0cml4IjsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2Vy
dmVBbHBoYVZhbHVlcz4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9yUGl4
ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0
YXJ0LCBpbnQgeUVuZCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1ZShQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHkpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJS
ZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0
cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTQsNCArODgsMyBAQCBwcml2YXRlOgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3Bw
CmluZGV4IGVlYjE3MjhkYjM1ZThhYzMwMmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLjU5NzlkMGZj
OWExMDlhMmU3NDY1OWNjOThhNGNjZWQ0MTBjNzU5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI3LDM2ICsyOCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVzZUxp
Z2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNl
TGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAw
LCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRT
b3VyY2UpLCBUeXBlOjpEaWZmdXNlTGlnaHRpbmcpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZF
RGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2Nh
bGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlKQorRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VT
Y2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RURpZmZ1c2VMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlm
ZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1v
dmUobGlnaHRTb3VyY2UpKSk7CiB9CiAKLUZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZmdXNlTGln
aHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRkVEaWZmdXNlTGlnaHRpbmc6OnNldERpZmZ1c2VD
b25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCi17Ci0gICAgaWYgKG1fZGlmZnVzZUNvbnN0
YW50ID09IGRpZmZ1c2VDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGlm
ZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1U
ZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4
dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlRGlmZnVzZUxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHN1cmZhY2VTY2Fs
ZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKICAgICAgICA8PCAiZGlmZnVzZUNvbnN0
YW50PVwiIiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxV
bml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJuZWxV
bml0TGVuZ3RoWSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5k
ZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYzZTExMjhiODQyNjE1ZTQ3NTEzYTBkZGRjMy4u
OTYwMDYyMDQ5YTIyZmU1YTg1Y2JmZWJiMzQ5ZWNmMWFiZDQxNzk3MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNl
TGlnaHRpbmcuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNSwyMSArMjYsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBM
aWdodFNvdXJjZTsKLQogY2xhc3MgRkVEaWZmdXNlTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGlu
ZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKEZp
bHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdo
dFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVEaWZmdXNlTGlnaHRpbmcoKTsKLQotICAgIGZs
b2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9
Ci0gICAgYm9vbCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQpOwotCi0gICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGlu
Zz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNl
Q29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGlu
ZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8
TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAg
ICAKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
IkZFRGlmZnVzZUxpZ2h0aW5nIjsgfQorCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcAppbmRleCAwNDc0OTMzOTJiYjI4MTQ2ZDhiMTY5YmEwYTdjMzJiMTZjNTYz
ZmExLi5kODUyMDQxYzM4ODI5MDU4OWVmNzExM2Y5MmExYjU5YzJlNjcwZGUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjQsMTMyICsyNSw1MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFRGlzcGxhY2VtZW50TWFwLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpc3BsYWNl
bWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRpc3Bs
YWNlbWVudE1hcCkKLSAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQot
ICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCi0gICAgLCBtX3NjYWxl
KHNjYWxlKQorUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRl
KENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRURpc3BsYWNlbWVudE1hcCh4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9y
LCBzY2FsZSkpOwogfQogCi1SZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFw
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxl
Y3RvciwKLSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNj
YWxlKQorRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSkKKyAgICA6IG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVj
dG9yKQorICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCisgICAgLCBt
X3NjYWxlKHNjYWxlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlzcGxhY2VtZW50
TWFwKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsK
IH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBD
aGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IpCiB7Ci0gICAgaWYgKG1feENoYW5u
ZWxTZWxlY3RvciA9PSB4Q2hhbm5lbFNlbGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV94Q2hhbm5lbFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3hDaGFubmVsU2VsZWN0b3IsIHhDaGFubmVs
U2VsZWN0b3IpICE9IG1feENoYW5uZWxTZWxlY3RvcjsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVu
dE1hcDo6c2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFu
bmVsU2VsZWN0b3IpCiB7Ci0gICAgaWYgKG1feUNoYW5uZWxTZWxlY3RvciA9PSB5Q2hhbm5lbFNl
bGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV95Q2hhbm5lbFNlbGVjdG9yID0g
eUNoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNo
YW5nZShtX3lDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IpICE9IG1feUNoYW5uZWxT
ZWxlY3RvcjsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2Nh
bGUpCiB7Ci0gICAgaWYgKG1fc2NhbGUgPT0gc2NhbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3NjYWxlID0gc2NhbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJikKLXsKLSAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycg
cHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UKLSAgICAvLyBh
bmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUgJ2luJyBzb3Vy
Y2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCi0gICAgLy8gY3VycmVudCBjb2xvciBzcGFjZS4K
LSAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBiZWNhdXNlIGl0
IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRlckVmZmVjdDo6
c2V0UmVzdWx0Q29sb3JTcGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpKTsK
LX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShG
aWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gbm90IHRyYW5z
Zm9ybSB0aGUgZmlyc3QgcHJpbWl0aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYg
KGluZGV4KQotICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2NhbGUsIHNjYWxlKSAh
PSBtX3NjYWxlOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVs
KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQorRmxvYXRSZWN0IEZF
RGlzcGxhY2VtZW50TWFwOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGNvbnN0
IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhl
bCArIHkgKiByb3dCeXRlczsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVn
aW9uKGlucHV0cyk7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXJP
dXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBj
b25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgQVNTRVJUKG1feENoYW5uZWxT
ZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwotICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0
b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgp
ID49IDIpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFE
cmF3aW5nUmVjdCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKAmGluMuKA
mSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KLSAg
ICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0
QkRyYXdpbmdSZWN0KTsKLSAgICAKLSAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3BsYWNlbWVu
dEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaW5wdXRJbWFnZS0+bGVuZ3Ro
KCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsKLQotICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotCi0gICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2Fs
ZS53aWR0aCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWln
aHQoKSAvIDI1NS4wOwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0
aCgpICogMC41OwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFkgPSAwLjUgLSBzY2FsZS5oZWlnaHQo
KSAqIDAuNTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIGluMiA9
IHN0YWNrLnRha2VMYXN0KCk7CiAgICAgCi0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0g
eENoYW5uZWxJbmRleCgpOwotICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVs
SW5kZXgoKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0
aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgaW50IHJvd0J5dGVzID0gcGFp
bnRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNpemUu
aGVpZ2h0KCk7ICsreSkgewotICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJvd0J5
dGVzOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsr
eCkgewotICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQg
KyB4ICogNDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGlj
X2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3Rp
bmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKLSAg
ICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkg
KiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50
Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0
aW5hdGlvblBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9u
UGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKLSAgICAgICAgICAgIGlmIChz
cmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kg
Pj0gcGFpbnRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4
ZWxQdHIgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkKj4oaW5wdXRJbWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwg
cm93Qnl0ZXMpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShv
dXRwdXQsIHsgaW4sIGluMiB9LCBudWxscHRyKTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUp
CkBAIC0xNzQsMTcgKzk2LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFRGlzcGxhY2VtZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZURpc3BsYWNlbWVudE1hcCI7Ci0gICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBz
Y2FsZT1cIiIgPDwgbV9zY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJ4Q2hhbm5lbFNlbGVjdG9y
PVwiIiA8PCBtX3hDaGFubmVsU2VsZWN0b3IgPDwgIlwiICIKICAgICAgICA8PCAieUNoYW5uZWxT
ZWxlY3Rvcj1cIiIgPDwgbV95Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICBpbnB1dEVm
ZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAg
IHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IGRkNzMyYTg4MTA3
M2UyNjZiYzg0NmFmZTY4MTllNjc1MTYyM2EzYTIuLjM5Y2U1NDljZjE5ZWFjMGRhNTI4ZjYyYmYz
MDI0ODNkNjE1MTBkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zNyw3ICszNiw3IEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7CiAKIGNsYXNz
IEZFRGlzcGxhY2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKEZpbHRlciYsIENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNl
bGVjdG9yLCBmbG9hdCBzY2FsZSk7CisgICAgc3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4g
Y3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKICAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2Vs
ZWN0b3I7IH0KICAgICBib29sIHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVj
dG9yVHlwZSk7CkBAIC00OCwyMiArNDcsMjEgQEAgcHVibGljOgogICAgIGZsb2F0IHNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQogICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwogCi0g
ICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
IG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwotCiBwcml2YXRlOgotICAgIEZFRGlzcGxhY2VtZW50
TWFwKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5l
bFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CisgICAgRkVEaXNwbGFjZW1l
bnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKKworICAgIGludCB4Q2hhbm5l
bEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQorICAgIGlu
dCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsg
fQogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RURpc3BsYWNlbWVudE1hcCI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZp
bHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFj
aywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGludCB4
Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQot
ICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9y
IC0gMTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1f
eUNoYW5uZWxTZWxlY3RvcjsKQEAgLTcxLDQgKzY5LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDVjZTdiZTNhNDcxYjQ3
YjhkZDU0MjZkOTY1YmJmZTc4OWY2YmJkZDguLjgwODc1Yjg4YzQyNzNhNjJhOGMwOTBiZWQ1ZTE4
NzE3NzhlNDAxMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsOTggKzI0LDQ4IEBACiAjaW5jbHVk
ZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKICNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBm
aWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZm
ZWN0KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRvdykKLSAgICAsIG1fc3RkWChzdGRYKQotICAgICwg
bV9zdGRZKHN0ZFkpCi0gICAgLCBtX2R4KGR4KQotICAgICwgbV9keShkeSkKLSAgICAsIG1fc2hh
ZG93Q29sb3Ioc2hhZG93Q29sb3IpCi0gICAgLCBtX3NoYWRvd09wYWNpdHkoc2hhZG93T3BhY2l0
eSkKLXsKLX0KIAotUmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29u
c3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorUmVmPEZFRHJvcFNo
YWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQg
ZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgs
IGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIGNvbG9yLCBvcGFjaXR5KSk7CiB9
CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGRURy
b3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKKyAgICA6IG1fc3Rk
WChzdGRYKQorICAgICwgbV9zdGRZKHN0ZFkpCisgICAgLCBtX2R4KGR4KQorICAgICwgbV9keShk
eSkKKyAgICAsIG1fY29sb3IoY29sb3IpCisgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKIHsKLSAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotCi0gICAgRmxvYXRSZWN0IGFic29s
dXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAg
RmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKLSAg
ICBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29s
dXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShhYnNv
bHV0ZU9mZnNldFBhaW50UmVjdCk7Ci0KLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7
Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3
aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNv
bHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0g
ICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAw
LjVmKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRS
ZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1
dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLQotICAgIHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBG
RURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVEcm9wU2hh
ZG93OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0
ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFk
aXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKLSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBG
bG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgs
IG1fZHkgfSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKLSAgICBkcmF3aW5nUmVnaW9uV2l0
aE9mZnNldC5tb3ZlKG9mZnNldCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBp
bi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFjaXR5
KTsKLSAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdp
bmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOwotCi0g
ICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dD
b2xvcik7Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3Bh
Y2UoKSB9OwotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+
bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQ
aXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxB
cnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgp
LndpZHRoKCkpOwotICAgIAotICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxC
dWZmZXIsIHNoYWRvd0FyZWEpOwotCi0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKLSAgICByZXN1bHRDb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KSwgbV9zaGFkb3dDb2xvcik7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7Ci0KLSAgICByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb24p
OworICAgIHJldHVybiB7IH07CisvLyAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigp
OworLy8KKy8vICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDAp
LT5hYnNvbHV0ZVBhaW50UmVjdCgpOworLy8gICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFp
bnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKKy8vICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0
Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwor
Ly8gICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOwor
Ly8KKy8vICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVL
ZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKy8vCisvLyAgICAvLyBXZSB0
YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNh
dXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKy8vICAgIGFic29sdXRlUGFpbnRSZWN0
LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKKy8vICAgIGFic29sdXRl
UGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CisvLwor
Ly8gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKKy8vICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5p
bnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKKy8vICAgIGVsc2UKKy8vICAgICAgICBhYnNvbHV0
ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworLy8KKy8vICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKIH0KIAogSW50T3V0c2V0cyBGRURyb3BT
aGFkb3c6Om91dHNldHMoKSBjb25zdApAQCAtMTI4LDE0ICs3OSwyMyBAQCBJbnRPdXRzZXRzIEZF
RHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0CiAgICAgfTsKIH0KIAotVGV4dFN0cmVhbSYgRkVE
cm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNl
bnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFRHJvcFNo
YWRvdzo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsKLSAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNo
YWRvdyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAi
LCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5
IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFj
aXR5IDw8ICJdXG4iOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGlu
ID0gc3RhY2sudGFrZUxhc3QoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1
bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICByZXR1cm4g
YXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0m
IEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmls
dGVyUmVwcmVzZW50YXRpb24pIGNvbnN0Cit7CisgICAgdHMgIDw8IGluZGVudCA8PCJbZmVEcm9w
U2hhZG93IjsKKyAgICB0cyAgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAi
IDw8IG1fc3RkWQorICAgICAgICA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8
PCBtX2R5CisgICAgICAgIDw8ICJcIiBjb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQobV9jb2xvcikgPDwiXCIgb3BhY2l0eT1cIiIgPDwgbV9vcGFjaXR5IDw8ICJd
XG4iOwogICAgIHJldHVybiB0czsKIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAx
MmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEyOWVmZjM4NGMuLmQ1NTY1ZTQ5NzI4ZTA4M2UxYjMxM2Vl
ZDExNmJiYzY1YjA4N2NiODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwxNCArMjEsMTMgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3Mg
RkVEcm9wU2hhZG93IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+
IGNyZWF0ZShmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0
IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAKICAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29u
c3QgeyByZXR1cm4gbV9zdGRYOyB9CiAgICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0
ZFgpIHsgbV9zdGRYID0gc3RkWDsgfQpAQCAtNDEsMzIgKzQxLDMzIEBAIHB1YmxpYzoKICAgICBm
bG9hdCBkeSgpIGNvbnN0IHsgcmV0dXJuIG1fZHk7IH0KICAgICB2b2lkIHNldER5KGZsb2F0IGR5
KSB7IG1fZHkgPSBkeTsgfQogCi0gICAgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFkb3dDb2xvcjsgfSAKLSAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7IH0KKyAg
ICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgdm9p
ZCBzZXRjQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsgfQogCi0g
ICAgZmxvYXQgc2hhZG93T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93T3BhY2l0eTsg
fQotICAgIHZvaWQgc2V0U2hhZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hh
ZG93T3BhY2l0eSA9IHNoYWRvd09wYWNpdHk7IH0KKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
IHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQogCiBwcml2YXRlOgotICAgIEZFRHJvcFNoYWRvdyhG
aWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7
CisgICAgRkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9h
dCBkeSwgY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQogCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVz
dWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciopIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZp
bHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7
CiAgICAgZmxvYXQgbV9keDsKICAgICBmbG9hdCBtX2R5OwotICAgIENvbG9yIG1fc2hhZG93Q29s
b3I7Ci0gICAgZmxvYXQgbV9zaGFkb3dPcGFjaXR5OworICAgIENvbG9yIG1fY29sb3I7CisgICAg
ZmxvYXQgbV9vcGFjaXR5OwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHAKaW5kZXggYjQyMzU1MzRjMzhiMWViYTIxMWVlODQ4NjE3OTkyMzgwZjNiNmIwMS4uOWJjYTJk
NWRjYTQ5NDUyZjdlNGM4YzhiZDc5OGMwOTJkZGM5MjUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCkBAIC0zLDYgKzMs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI0LDU2ICsyNSw1NSBAQAogI2luY2x1ZGUgIkZFRmxvb2QuaCIKIAog
I2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUZsb29kOjpGRUZsb29kKEZpbHRlciYgZmls
dGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Rmxvb2QpCi0gICAgLCBtX2Zsb29kQ29sb3IoZmxv
b2RDb2xvcikKLSAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29k
PiBGRUZsb29kOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQogewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2QoY29sb3IsIG9wYWNpdHkpKTsKIH0KIAot
UmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKK0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3Qg
Q29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQorICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAs
IG1fb3BhY2l0eShvcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2Qo
ZmlsdGVyLCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKIH0KIAotYm9vbCBGRUZsb29kOjpz
ZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK2Jvb2wgRkVGbG9vZDo6c2V0Q29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChtX2Zsb29kQ29sb3IgPT0gY29sb3IpCisg
ICAgaWYgKG1fY29sb3IgPT0gY29sb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Zs
b29kQ29sb3IgPSBjb2xvcjsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkK
K2Jvb2wgRkVGbG9vZDo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChtX2Zs
b29kT3BhY2l0eSA9PSBmbG9vZE9wYWNpdHkpCisgICAgaWYgKG1fb3BhY2l0eSA9PSBvcGFjaXR5
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9mbG9vZE9wYWNpdHkgPSBmbG9vZE9wYWNp
dHk7CisgICAgbV9vcGFjaXR5ID0gb3BhY2l0eTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFRmxvb2Q6OmRy
YXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJl
dHVybjsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7Cit9
CisKK0ZpbHRlclJlc3VsdCogRkVGbG9vZDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZp
bHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKikgY29uc3QKK3sKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgYXV0byBjb2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5m
aWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSksIGNvbG9yKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgfSwgbnVsbHB0
cik7CiB9CiAKLVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1Rl
eHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIHRzIDw8IGluZGVudCA8PCAiW2Zl
Rmxvb2QiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGZsb29kQ29sb3IoKSkgPDwgIlwiICIKLSAgICAgICA8PCAi
Zmxvb2Qtb3BhY2l0eT1cIiIgPDwgZmxvb2RPcGFjaXR5KCkgPDwgIlwiXVxuIjsKKyAgICB0cyAg
PDwgaW5kZW50IDw8ICJbZmVGbG9vZCI7CisgICAgdHMgIDw8ICIgY29sb3I9XCIiIDw8IHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKCkpIDw8ICJcIiAiCisgICAgICAgIDw8
ICJvcGFjaXR5PVwiIiA8PCBvcGFjaXR5KCkgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0NjgyZmEwNjE3MzQ4ZS4uNzk4
NmQ0NjY4NGJmNThhYmNiY2U4NGNmYjY2YTIxMjI4MDhhZTc5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNDIgKzIzLDM1IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRkVGbG9vZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVGbG9vZD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIHN0
YXRpYyBSZWY8RkVGbG9vZD4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAK
LSAgICBjb25zdCBDb2xvciYgZmxvb2RDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RDb2xv
cjsgfQotICAgIGJvb2wgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYpOworICAgIGNvbnN0IENv
bG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBib29sIHNldENvbG9y
KGNvbnN0IENvbG9yJik7CiAKLSAgICBmbG9hdCBmbG9vZE9wYWNpdHkoKSBjb25zdCB7IHJldHVy
biBtX2Zsb29kT3BhY2l0eTsgfQotICAgIGJvb2wgc2V0Rmxvb2RPcGFjaXR5KGZsb2F0KTsKLQot
I2lmICFVU0UoQ0cpCi0gICAgLy8gZmVGbG9vZCBkb2VzIG5vdCBwZXJmb3JtIGNvbG9yIGludGVy
cG9sYXRpb24gb2YgYW55IGtpbmQsIHNvIHRoZSByZXN1bHQgaXMgYWx3YXlzIGluIHRoZSBjdXJy
ZW50Ci0gICAgLy8gY29sb3Igc3BhY2UgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgY29sb3It
aW50ZXJwb2xhdGlvbi1maWx0ZXJzLgotICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KLSAgICB2
b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3Zl
cnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOyB9Ci0jZW5kaWYKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgYm9vbCBzZXRPcGFjaXR5KGZsb2F0KTsKIAogcHJpdmF0
ZToKLSAgICBGRUZsb29kKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIEZFRmxv
b2QoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9vZCI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBDb2xvciBt
X2Zsb29kQ29sb3I7Ci0gICAgZmxvYXQgbV9mbG9vZE9wYWNpdHk7CisgICAgQ29sb3IgbV9jb2xv
cjsKKyAgICBmbG9hdCBtX29wYWNpdHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2YzNmViYjZiYmI4
YWIzNjM5NDM2NS4uYzcwNTk0MDk3NGViYTljNjA3NWM1OWQyMGNlZmM1MDI5NDc0Njc4MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjYsNDUwICsyNiwzNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyLmgiCiAKLSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIFVTRShB
Q0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2Vy
bmVsRmFjdG9yKCkKLXsKLSAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsK
LX0KLQotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlv
biwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKK1Jl
ZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5v
cmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRldGFpbHMu
Ci0gICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBpZiAo
IShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMiAtIDE7
Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAgICAgICAgICAg
IGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAg
ICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewot
ICAgICAgICAgICAgZGVsdGFSaWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1
c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNz
aWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5CbHVyKQot
ICAgICwgbV9zdGRYKHgpCitGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorICAgIDogbV9zdGRYKHgpCiAgICAgLCBt
X3N0ZFkoeSkKICAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCiB7CiB9CiAKLVJlZjxGRUdhdXNz
aWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFR2F1c3NpYW5CbHVyKGZpbHRlciwgeCwgeSwgZWRnZU1vZGUpKTsKLX0KLQotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4KQotewotICAgIG1fc3RkWCA9
IHg7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkK
LXsKLSAgICBtX3N0ZFkgPSB5OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9k
ZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOwot
fQotCi0vLyBUaGlzIGZ1bmN0aW9uIG9ubHkgb3BlcmF0ZXMgb24gQWxwaGEgY2hhbm5lbC4KLWlu
bGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1Bp
eGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LAotICAgIHVuc2lnbmVk
IGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVM
aW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhL
ZXJuZWxTaXplKQotewotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5
LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0g
ICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwgemVyby1pbmRleCBiYXNlZC4KLSAgICBj
b25zdCBpbnQgY2hhbm5lbCA9IDM7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhl
aWdodDsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAg
IGludCBzdW0gPSAwOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgY29uc3QgdWludDhf
dCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKLSAgICAgICAgICAgIHN1bSArPSBzcmNQdHJb
Y2hhbm5lbF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZSArIGNoYW5uZWw7Ci0gICAgICAg
ICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotICAgICAg
ICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bSAvIGR4KTsKLQotICAgICAg
ICAgICAgLy8gU2hpZnQga2VybmVsLgotICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4
TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBz
cmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gLT0gKnNyY1B0cjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgp
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNl
dCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3Jj
UHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1bSArPSAqc3Jj
UHRyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBi
b3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1w
ZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50
IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGlu
dCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQot
ewotICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0
V2lkdGgpOwotICAgIGlmIChhbHBoYUltYWdlKQotICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhh
T25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBz
dHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxT
aXplKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEo
KTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICAv
LyBDb25jZXJuaW5nIHRoZSBhcnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSAr
IE1hcmdpbiArIEJvcmRlci4gVGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQotICAgIC8vIFAg
PSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzLgotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZm
ZWN0SGVpZ2h0OyArK3kpIHsKLSAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKLSAg
ICAgICAgaW50IHN1bVIgPSAwLCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAwOwotCi0gICAg
ICAgIGlmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FKSB7Ci0gICAgICAgICAgICAvLyBGaWxs
IHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNp
emU7ICsraSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICog
c3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEg
KyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAg
ICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRyOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
ZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9m
ZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0
ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRy
KysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAg
ICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAg
ICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA+PSBk
eExlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVs
Qnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bVIgLT0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0
clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAg
ICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAq
IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3Jj
RGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clsw
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNy
Y1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIGhlcmUu
Ci0gICAgICAgICAgICAvLyBHZXQgZWRnZSB2YWx1ZXMgZm9yIGVkZ2VNb2RlICdkdXBsaWNhdGUn
LgotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlTGVmdCA9IHNyY0RhdGEgKyBs
aW5lOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlUmlnaHQgID0gc3JjRGF0
YSArIChsaW5lICsgKGVmZmVjdFdpZHRoIC0gMSkgKiBzdHJpZGUpOwotCi0gICAgICAgICAgICAv
LyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gZHhMZWZ0ICogLTE7
IGkgPCBkeFJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHJpZ2h0IGZv
ciBuZWdhdGl2ZSB2YWx1ZXMgb2YgJ2knPwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVMZWZ0WzBdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZUxlZnRbMV07Ci0gICAgICAgICAgICAgICAgICAg
IHN1bUIgKz0gZWRnZVZhbHVlTGVmdFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBl
ZGdlVmFsdWVMZWZ0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+PSBlZmZlY3RX
aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOwot
ICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAg
ICBzdW1HICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLQot
ICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBk
eCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Vt
RyAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90
PihzdW1CIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihzdW1BIC8gZHgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgotICAg
ICAgICAgICAgICAgIGlmICh4IDwgZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIg
LT0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBlZGdlVmFs
dWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IGVkZ2VWYWx1ZUxlZnRbMl07
Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0
ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcg
LT0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKLSAg
ICAgICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0ID49IGVmZmVjdFdpZHRoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1
bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRn
ZVZhbHVlUmlnaHRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICog
c3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNE
YXRhICsgcmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBd
OwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQiArPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3Jj
UHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotaW5saW5lIHZvaWQgYWNjZWxlcmF0ZUJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1
ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBp
bnQgZWZmZWN0SGVpZ2h0KQotewotICAgIGlmICghaW9CdWZmZXIuZGF0YSgpIHx8ICF0ZW1wQnVm
ZmVyLmRhdGEoKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChlZmZlY3RXaWR0aCA8PSAwIHx8IGVmZmVjdEhlaWdodCA8
PSAwIHx8IHN0cmlkZSA8PSAwKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgbXVzdCBhbHdheXMgdXNlIGFuIG9kZCBy
YWRpdXMuCi0gICAgaWYgKGtlcm5lbFNpemUgJSAyICE9IDEpCi0gICAgICAgIGtlcm5lbFNpemUg
Kz0gMTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZWZmZWN0SW5CdWZmZXI7Ci0gICAgZWZmZWN0SW5C
dWZmZXIuZGF0YSA9IHN0YXRpY19jYXN0PHZvaWQqPihpb0J1ZmZlci5kYXRhKCkpOwotICAgIGVm
ZmVjdEluQnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZmZWN0SW5CdWZmZXIuaGVp
Z2h0ID0gZWZmZWN0SGVpZ2h0OwotICAgIGVmZmVjdEluQnVmZmVyLnJvd0J5dGVzID0gc3RyaWRl
OwotCi0gICAgdkltYWdlX0J1ZmZlciBlZmZlY3RPdXRCdWZmZXI7Ci0gICAgZWZmZWN0T3V0QnVm
ZmVyLmRhdGEgPSB0ZW1wQnVmZmVyLmRhdGEoKTsKLSAgICBlZmZlY3RPdXRCdWZmZXIud2lkdGgg
PSBlZmZlY3RXaWR0aDsKLSAgICBlZmZlY3RPdXRCdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0
OwotICAgIGVmZmVjdE91dEJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIC8vIERldGVy
bWluZSB0aGUgc2l6ZSBvZiBhIHRlbXBvcmFyeSBidWZmZXIgYnkgY2FsbGluZyB0aGUgZnVuY3Rp
b24gZmlyc3Qgd2l0aCBhIHNwZWNpYWwgZmxhZy4gdkltYWdlIHdpbGwgcmV0dXJuCi0gICAgLy8g
dGhlIHNpemUgbmVlZGVkLCBvciBhbiBlcnJvciAod2hpY2ggYXJlIGFsbCBuZWdhdGl2ZSkuCi0g
ICAgc2l6ZV90IHRtcEJ1ZmZlclNpemUgPSB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZm
ZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIDAsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5l
bFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kIHwga3ZJbWFnZUdldFRlbXBCdWZmZXJTaXplKTsK
LSAgICBpZiAodG1wQnVmZmVyU2l6ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2b2lk
KiB0bXBCdWZmZXIgPSBmYXN0TWFsbG9jKHRtcEJ1ZmZlclNpemUpOwotICAgIHZJbWFnZUJveENv
bnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgdG1wQnVm
ZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7
Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdE91dEJ1ZmZlciwgJmVmZmVj
dEluQnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2
SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0
SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwg
a2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIFdURjo6ZmFzdEZyZWUodG1w
QnVmZmVyKTsKLQotICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBp
b0J1ZmZlci4KLSAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gdGVtcEJ1ZmZlci5sZW5n
dGgoKSk7Ci0gICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgdGVtcEJ1ZmZlci5kYXRhKCksIGlv
QnVmZmVyLmxlbmd0aCgpKTsKLX0KLSNlbmRpZgotCi1pbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1
ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3Ry
aWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUg
ZWRnZU1vZGUpCi17Ci0gICAgaW50IGR4TGVmdCA9IDA7Ci0gICAgaW50IGR4UmlnaHQgPSAwOwot
ICAgIGludCBkeUxlZnQgPSAwOwotICAgIGludCBkeVJpZ2h0ID0gMDsKLSAgICAKLSAgICBVaW50
OENsYW1wZWRBcnJheSogZnJvbUJ1ZmZlciA9ICZpb0J1ZmZlcjsKLSAgICBVaW50OENsYW1wZWRB
cnJheSogdG9CdWZmZXIgPSAmdGVtcEJ1ZmZlcjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MzsgKytpKSB7Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWCkgewotICAgICAgICAgICAga2VybmVs
UG9zaXRpb24oaSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCk7Ci0jaWYgSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAg
ICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgs
IGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXpl
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpm
cm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0
cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgdHJ1ZSwgZWRnZU1v
ZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwg
a2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgo
KSwgcGFpbnRTaXplLmhlaWdodCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgot
ICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWSkgewotICAgICAgICAgICAga2VybmVsUG9zaXRpb24o
aSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCk7Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAgICAgICAgICAg
Ym94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwg
ZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVy
LCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFp
bnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vs
c2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6
ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50
U2l6ZS53aWR0aCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgotICAgICAgICAg
ICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAg
ICBpZiAoJmlvQnVmZmVyICE9IGZyb21CdWZmZXIpIHsKLSAgICAgICAgQVNTRVJUKGlvQnVmZmVy
Lmxlbmd0aCgpID09IGZyb21CdWZmZXItPmxlbmd0aCgpKTsKLSAgICAgICAgbWVtY3B5KGlvQnVm
ZmVyLmRhdGEoKSwgZnJvbUJ1ZmZlci0+ZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci0gICAg
fQotfQotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMo
VWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxB
cnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXpl
JiBwYWludFNpemUpCi17Ci0gICAgaW50IHN0cmlkZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsK
LQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChrZXJuZWxTaXplWCA9PSBrZXJuZWxTaXpl
WSAmJiAobV9lZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8IG1fZWRnZU1vZGUgPT0gRURHRU1P
REVfRFVQTElDQVRFKSkgewotICAgICAgICBhY2NlbGVyYXRlQm94Qmx1cihpb0J1ZmZlciwgdG1w
UGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0
YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5l
bFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlKCksIG1fZWRnZU1vZGUpOwot
fQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBw
bHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQotewotICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFt
ZXRlcnMtPndpZHRoLCBwYXJhbWV0ZXJzLT5oZWlnaHQpOwotICAgIHBhcmFtZXRlcnMtPmZpbHRl
ci0+cGxhdGZvcm1BcHBseUdlbmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFt
ZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJz
LT5rZXJuZWxTaXplWSwgcGFpbnRTaXplKTsKLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1w
ZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtl
cm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpCitzdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNz
aWFuS2VybmVsRmFjdG9yKCkKIHsKLSNpZiAhVVNFKEFDQ0VMRVJBVEUpCi0gICAgaW50IHNjYW5s
aW5lID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwotICAgIGludCBleHRyYUhlaWdodCA9IDMgKiBr
ZXJuZWxTaXplWSAqIDAuNWY7Ci0gICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAocGFpbnRT
aXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gKHNfbWluaW1hbFJlY3REaW1lbnNp
b24gKyBleHRyYUhlaWdodCAqIHBhaW50U2l6ZS53aWR0aCgpKTsKLQotICAgIGlmIChvcHRpbWFs
VGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFs
VGhyZWFkTnVtYmVyKTsKLQotICAgICAgICBpbnQgam9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJP
ZkpvYnMoKTsKLSAgICAgICAgaWYgKGpvYnMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0
aGUgam9iIGludG8gImJsb2NrSGVpZ2h0Ii1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2Jz
IHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKLSAgICAgICAgICAgIC8vIGJs
b2NrSGVpZ2h0ICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBi
eSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGNvbnN0IGludCBi
bG9ja0hlaWdodCA9IHBhaW50U2l6ZS5oZWlnaHQoKSAvIGpvYnM7Ci0gICAgICAgICAgICBjb25z
dCBpbnQgam9ic1dpdGhFeHRyYSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAlIGpvYnM7Ci0KLSAgICAg
ICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAwOyBq
b2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0
ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICBpbnQgc3RhcnRZID0g
IWpvYiA/IDAgOiBjdXJyZW50WSAtIGV4dHJhSGVpZ2h0OwotICAgICAgICAgICAgICAgIGN1cnJl
bnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdo
dDsKLSAgICAgICAgICAgICAgICBpbnQgZW5kWSA9IGpvYiA9PSBqb2JzIC0gMSA/IGN1cnJlbnRZ
IDogY3VycmVudFkgKyBleHRyYUhlaWdodDsKLQotICAgICAgICAgICAgICAgIGludCBibG9ja1Np
emUgPSAoZW5kWSAtIHN0YXJ0WSkgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBpZiAoIWpv
YikgewotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gJmlvQnVmZmVy
OwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9ICZ0bXBQaXhlbEFy
cmF5OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFt
cy5pb1BpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChi
bG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9IFVp
bnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1lbWNweShwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCksIGlvQnVmZmVy
LmRhdGEoKSArIHN0YXJ0WSAqIHNjYW5saW5lLCBibG9ja1NpemUpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHBhcmFtcy53aWR0aCA9IHBhaW50U2l6ZS53aWR0aCgpOwot
ICAgICAgICAgICAgICAgIHBhcmFtcy5oZWlnaHQgPSBlbmRZIC0gc3RhcnRZOwotICAgICAgICAg
ICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWCA9IGtlcm5lbFNpemVYOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5rZXJuZWxTaXplWSA9IGtlcm5lbFNpemVZOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotCi0gICAgICAgICAgICAvLyBDb3B5IHRv
Z2V0aGVyIHRoZSBwYXJ0cyBvZiB0aGUgaW1hZ2UuCi0gICAgICAgICAgICBjdXJyZW50WSA9IDA7
Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAxOyBqb2IgPCBqb2JzOyBqb2IrKykgewotICAg
ICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpv
YnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgaW50IHNvdXJjZU9mZnNldDsKLSAg
ICAgICAgICAgICAgICBpbnQgZGVzdGluYXRpb25PZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50
IHNpemU7Ci0gICAgICAgICAgICAgICAgaW50IGFkanVzdGVkQmxvY2tIZWlnaHQgPSBqb2IgPCBq
b2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0KLSAgICAgICAg
ICAgICAgICBjdXJyZW50WSArPSBhZGp1c3RlZEJsb2NrSGVpZ2h0OwotICAgICAgICAgICAgICAg
IHNvdXJjZU9mZnNldCA9IGV4dHJhSGVpZ2h0ICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25PZmZzZXQgPSBjdXJyZW50WSAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAg
IHNpemUgPSBhZGp1c3RlZEJsb2NrSGVpZ2h0ICogc2NhbmxpbmU7Ci0KLSAgICAgICAgICAgICAg
ICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpICsgZGVzdGluYXRpb25PZmZzZXQsIHBhcmFtcy5pb1Bp
eGVsQXJyYXktPmRhdGEoKSArIHNvdXJjZU9mZnNldCwgc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2lu
Z2xlIHRocmVhZGVkIG1vZGUuCi0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBUaGUgc2VsZWN0aW9u
IGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZv
cm1zLgotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBr
ZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIDMgLyA0LmYg
KiBzcXJ0ZigyICogcGlGbG9hdCk7CiB9CiAKIHN0YXRpYyBpbnQgY2xhbXBlZFRvS2VybmVsU2l6
ZShmbG9hdCB2YWx1ZSkKIHsKICAgICAvLyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAwLiBB
IGJpZ2dlciByYWRpdXMgd29uJ3QgbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0
IGltYWdlIGJ1dAogICAgIC8vIGluZmxhdGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRvbyBt
dWNoLiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBGaXJlZm94JyBiZWhhdmlvci4KKyAgICBzdGF0
aWMgY29uc3QgaW50IGdNYXhLZXJuZWxTaXplID0gNTAwOwogICAgIHVuc2lnbmVkIHNpemUgPSBz
dGQ6Om1heDx1bnNpZ25lZD4oMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1ZSAq
IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkgKyAwLjVmKSkpOwogICAgIHJldHVybiBjbGFtcFRvPGlu
dD4oc3RkOjptaW4oc2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdNYXhLZXJuZWxTaXplKSkp
OwogfQotICAgIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCisKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlv
bikKIHsKICAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkgPj0gMCAmJiBzdGREZXZpYXRp
b24uaGVpZ2h0KCkgPj0gMCk7CiAgICAgSW50U2l6ZSBrZXJuZWxTaXplOwpAQCAtNDgzLDEyICs3
MCwxMiBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNp
emUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4ga2VybmVsU2l6ZTsKIH0KIAot
SW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXIm
IGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7Ci0g
ICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0
ZXJSZXNvbHV0aW9uKHN0ZERldmlhdGlvbikpOworICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxl
ZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uIC8qZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bihzdGREZXZpYXRpb24pKi8pOwogfQogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxh
dGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQog
ewogICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGRE
ZXZpYXRpb24pOwogCkBAIC00OTYsNTYgKzgzLDIwIEBAIEludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4g
eyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAy
IH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkKK0Zsb2F0UmVjdCBGRUdhdXNzaWFuQmx1cjo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
IHsKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigp
LCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0
ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwogICAgIC8vIEVkZ2UgbW9kZXMg
b3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBhaW50IHJlY3Qu
Ci0gICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICBzZXRBYnNv
bHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkK
KyAgICAgICAgcmV0dXJuIGRyYXdpbmdSZWN0OwogCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBr
ZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94
IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtl
cm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZ
KDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5k
cygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJl
Y3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29s
dXRlUGFpbnRSZWN0KSk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAg
IEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNB
bHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFtX3N0ZFggJiYg
IW1fc3RkWSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2Fs
Y3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBrZXJu
ZWxTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotCi0gICAgSW50U2l6ZSBwYWlu
dFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUo
ZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7
Ci0gICAgaWYgKCF0bXBJbWFnZURhdGEpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBXZSB0YWtl
IHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNl
IHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgz
ICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVko
MyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHBsYXRmb3JtQXBwbHkoZGVz
dGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtl
cm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERy
YXdpbmdSZWN0KGlucHV0cywgZHJhd2luZ1JlY3QpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3Np
YW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKQEAgLTU1NCwxNCArMTA1LDIxIEBAIEludE91dHNldHMg
RkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdAogICAgIHJldHVybiB7IG91dHNldFNpemUu
aGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0
U2l6ZS53aWR0aCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVz
ZW50YXRpb24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFR2F1c3NpYW5CbHVyOjphcHBseShGaWx0
ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
KSBjb25zdAoreworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0g
c3RhY2sudGFrZUxhc3QoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRz
KCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4g
YXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0m
IEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUdh
dXNzaWFuQmx1ciI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3Rk
WCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50
U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmgKaW5kZXggNWZiOTdmZmIwNzBjMmRhZWI2ZWIyODNiZWFhYTE3NjQ3Y2JiMmQz
ZS4uOTRhMGY1M2QxOTk5ZWE4YWM2NmE3NzQ1YzUxYTkzM2M0ZDE4ZWZjMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMiw1OSArMjMsNDAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRkVDb252b2x2
ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5CbHVyIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4g
Y3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMg
UmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwog
CiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQotICAg
IHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCk7CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25Y
KGZsb2F0IHgpIHsgbV9zdGRYID0geDsgfQogCiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RkWTsgfQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCk7
CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpIHsgbV9zdGRZID0geTsgfQogCiAg
ICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlTW9kZTsgfQot
ICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKKyAgICB2b2lkIHNldEVkZ2VNb2Rl
KEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkgeyBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7IH0KIAotICAg
IHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxvYXRT
aXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRL
ZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNh
bGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIElu
dFNpemUgY2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7
CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRz
ZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAgICBG
RUdhdXNzaWFuQmx1cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CisgICAg
RkVHYXVzc2lhbkJsdXIoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwogCiAgICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7
IH0KIAotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAq
IDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQot
ICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFR2F1c3NpYW5C
bHVyKiBmaWx0ZXI7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFy
cmF5OwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0g
ICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQg
a2VybmVsU2l6ZVg7Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOwotICAgIH07Ci0KLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5n
UmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
RmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9y
bUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50
U2l6ZSYgcGFpbnRTaXplKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2ln
bmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXpl
KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxv
YXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGRmMTc2Zjhl
MDcwYTQxOGMyMDg1MTgwOTBlZTdhNmNhMTEzZTU2ZjUuLjkwZThiOWZhNDIxMGRkNzYyYTRlNGQ5
MWRlMjUwMzQ4ODBmZDJmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ3MCArMjgsNzIgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRl
ICJDb2xvckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIs
IExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2Us
IFR5cGUgdHlwZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xp
Z2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGln
aHRTb3VyY2UpKQotICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0
aW5nOjpGRUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IG1fY29sb3IoY29sb3IpCiAg
ICAgLCBtX3N1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUpCiAgICAgLCBtX2RpZmZ1c2VDb25zdGFu
dChkaWZmdXNlQ29uc3RhbnQpCiAgICAgLCBtX3NwZWN1bGFyQ29uc3RhbnQoc3BlY3VsYXJDb25z
dGFudCkKICAgICAsIG1fc3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQogICAgICwg
bV9rZXJuZWxVbml0TGVuZ3RoWChrZXJuZWxVbml0TGVuZ3RoWCkKICAgICAsIG1fa2VybmVsVW5p
dExlbmd0aFkoa2VybmVsVW5pdExlbmd0aFkpCisgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJj
ZSkpCiB7CiB9CiAKLWJvb2wgRkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZh
Y2VTY2FsZSkKLXsKLSAgICBpZiAobV9zdXJmYWNlU2NhbGUgPT0gc3VyZmFjZVNjYWxlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUxpZ2h0aW5nOjpzZXRMaWdodGluZ0NvbG9y
KGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKG1fbGlnaHRpbmdDb2xvciA9PSBsaWdodGlu
Z0NvbG9yKQorICAgIGlmIChtX2NvbG9yID09IGNvbG9yKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBtX2xpZ2h0aW5nQ29sb3IgPSBsaWdodGluZ0NvbG9yOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhYKQotewotICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGhYID09IGtlcm5lbFVu
aXRMZW5ndGhYKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYID0ga2VybmVsVW5pdExlbmd0aFg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVM
aWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCi17
Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFkgPT0ga2VybmVsVW5pdExlbmd0aFkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0
TGVuZ3RoWTsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNpemUgPSA0Owotc3RhdGljIGNvbnN0ZXhwciBpbnQg
Y0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7Ci1zdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgY09wYXF1
ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRik7Ci0KLS8vIFRoZXNlIGZhY3RvcnMg
YW5kIHRoZSBub3JtYWwgY29lZmZpY2llbnRzIGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIgaHR0
cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50Lgotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKLXN0
YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7Ci1zdGF0aWMgY29u
c3RleHByIGZsb2F0IGNGYWN0b3IxZGl2NCA9IC0xIC8gNC5mOwotc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBjRmFjdG9yMmRpdjMgPSAtMiAvIDMuZjsKLQotaW5saW5lIEludFNpemUgRkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
IG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJu
IHsKLSAgICAgICAgLTIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21SaWdo
dCwKLSAgICAgICAgLTIgKiBjZW50ZXIgLSByaWdodCArIDIgKiBib3R0b20gKyBib3R0b21SaWdo
dAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
LSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b20gPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4g
ewotICAgICAgICAtMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9tUmln
aHQsCi0gICAgICAgIC1sZWZ0IC0gMiAqIGNlbnRlciAtIHJpZ2h0ICsgYm90dG9tTGVmdCArIDIg
KiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGln
aHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsK
LSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRv
bUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0
dXJuIHsKLSAgICAgICAgLTIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0
b20sCi0gICAgICAgIC1sZWZ0IC0gMiAqIGNlbnRlciArIGJvdHRvbUxlZnQgKyAyICogYm90dG9t
Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjps
ZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGNlbnRlciA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3BS
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b21SaWdo
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcCArIHRvcFJp
Z2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAg
ICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAg
fTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlv
ck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNvbnN0Ci17Ci0g
ICAgaW50IHJpZ2h0QWxwaGFPZmZzZXQgPSBvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldDsKLSAgICAKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShyaWdodEFscGhhT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplKSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSk7
Ci0KLSAgICBpbnQgbGVmdCA9IGFscGhhV2luZG93LmxlZnQoKTsKLSAgICBpbnQgdG9wTGVmdCA9
IGFscGhhV2luZG93LnRvcExlZnQoKTsKLSAgICBpbnQgdG9wID0gYWxwaGFXaW5kb3cudG9wKCk7
Ci0KLSAgICBpbnQgYm90dG9tTGVmdCA9IGFscGhhV2luZG93LmJvdHRvbUxlZnQoKTsKLSAgICBp
bnQgYm90dG9tID0gYWxwaGFXaW5kb3cuYm90dG9tKCk7Ci0KLSAgICAvLyBUaGUgYWxwaGFXaW5k
b3cgaGFzIGJlZW4gc2hpZnRlZCwgYW5kIGhlcmUgd2UgZmlsbCBpbiB0aGUgcmlnaHQgY29sdW1u
LgotICAgIGFscGhhV2luZG93LmFscGhhWzBdWzJdID0gdG9wUmlnaHQ7Ci0gICAgYWxwaGFXaW5k
b3cuYWxwaGFbMV1bMl0gPSByaWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsyXVsyXSA9IGJv
dHRvbVJpZ2h0OwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgdGhlIGFscGhhV2luZG93IGlzIHdv
cmtpbmcgd2l0aCBzb21lIHNwb3QtY2hlY2tzLgotICAgIEFTU0VSVChhbHBoYVdpbmRvdy50b3BM
ZWZ0KCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgLSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wTGVmdAotICAgIEFT
U0VSVChhbHBoYVdpbmRvdy50b3AoKSA9PSBwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcAotCi0gICAg
cmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3BSaWdodCAtIDIgKiBsZWZ0ICsgMiAqIHJp
Z2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtdG9wTGVmdCAtIDIgKiB0
b3AgLSB0b3BSaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAg
ICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0
Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3AgLSAy
ICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAotICAgICAgICAtdG9w
TGVmdCAtIDIgKiB0b3AgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50
ZXIgKyAyICogcmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQgKyAyICogY2VudGVy
ICsgcmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGlu
Z0RhdGE6OmJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorYm9vbCBGRUxpZ2h0aW5n
OjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQogewotICAgIGludCBsZWZ0ID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOwotICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsK
LSAgICAgICAgLXRvcExlZnQgKyB0b3BSaWdodCAtIDIgKiBsZWZ0ICsgMiAqIHJpZ2h0LAotICAg
ICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgLSB0b3BSaWdodCArIGxlZnQgKyAyICogY2VudGVyICsg
cmlnaHQKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc3VyZmFjZVNjYWxlLCBz
dXJmYWNlU2NhbGUpICE9IG1fc3VyZmFjZVNjYWxlOwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0
Citib29sIEZFTGlnaHRpbmc6OnNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQpCiB7Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGlu
dCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJl
dHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICogY2VudGVyLAot
ICAgICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgKyBsZWZ0ICsgMiAqIGNlbnRlcgotICAgIH07Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaWZmdXNlQ29uc3RhbnQsIGRpZmZ1c2VDb25zdGFu
dCkgIT0gbV9kaWZmdXNlQ29uc3RhbnQ7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWwo
aW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwg
ZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvcikKK2Jvb2wgRkVMaWdodGluZzo6
c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQogewotICAgIHNldFBp
eGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZh
Y3RvclksIG5vcm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zcGVjdWxhckNvbnN0
YW50LCBzcGVjdWxhckNvbnN0YW50KSAhPSBzcGVjdWxhckNvbnN0YW50OwogfQogCi12b2lkIEZF
TGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRh
JiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwy
RFZlY3RvciwgZmxvYXQgYWxwaGEpCitib29sIEZFTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25l
bnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkKIHsKLSAgICBmbG9hdCB6ID0gYWxwaGEgKiBkYXRh
LnN1cmZhY2VTY2FsZTsKLSAgICBMaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgbGln
aHRpbmdEYXRhID0gbV9saWdodFNvdXJjZS0+Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKHBhaW50
aW5nRGF0YSwgeCwgeSwgeik7Ci0KLSAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOwotICAgIGlmIChu
b3JtYWwyRFZlY3Rvci5pc1plcm8oKSkgewotICAgICAgICAvLyBOb3JtYWwgdmVjdG9yIGlzICgw
LCAwLCAxKS4gVGhpcyBpcyBhIHF1aXRlIGZyZXF1ZW50IGNhc2UuCi0gICAgICAgIGlmIChtX2xp
Z2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAgICAgICAgICBs
aWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0
b3IueigpIC8gbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gewotICAgICAgICAgICAg
ICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci54KCksCi0gICAgICAgICAgICAgICAgbGlnaHRp
bmdEYXRhLmxpZ2h0VmVjdG9yLnkoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3IueigpICsgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCi0gICAgICAgICAg
ICB9OwotICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0
b3IubGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCi0g
ICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3
YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aDsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93Ziho
YWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVu
dCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFs
VmVjdG9yID0gewotICAgICAgICAgICAgZmFjdG9yWCAqIG5vcm1hbDJEVmVjdG9yLndpZHRoKCkg
KiBkYXRhLnN1cmZhY2VTY2FsZSwKLSAgICAgICAgICAgIGZhY3RvclkgKiBub3JtYWwyRFZlY3Rv
ci5oZWlnaHQoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAgICAgICAgICAgMS4wZgotICAgICAg
ICB9OwotICAgICAgICBmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSBub3JtYWxWZWN0b3IubGVu
Z3RoKCk7Ci0KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1
c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFu
dCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZl
Y3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAg
ICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAgICAgICAgICAgICAgICBs
aWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndh
eVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0g
MSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICog
KG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhh
bGZ3YXlWZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBo
YWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3Ro
KSwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsaWdo
dFN0cmVuZ3RoID4gMSkKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDE7Ci0gICAgaWYgKGxpZ2h0
U3RyZW5ndGggPCAwKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMDsKLQotICAgIHVpbnQ4X3Qg
cGl4ZWxWYWx1ZVszXSA9IHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJl
bmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci54KCkgKiAyNTUuMGYpLAotICAgICAgICBz
dGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVj
dG9yLnkoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3Ry
ZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueigpICogMjU1LjBmKQotICAgIH07Ci0g
ICAgCi0gICAgZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFsdWUsIDMsIG9mZnNldCk7Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zcGVjdWxhckV4cG9uZW50LCBzcGVjdWxhckV4cG9u
ZW50KSAhPSBtX3NwZWN1bGFyRXhwb25lbnQ7CiB9CiAKLS8vIFRoaXMgYXBwZWFycyB0byByZWFk
IGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzYW1lIHBpeGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVh
ZHMgdGhlIGFscGhhIGNoYW5uZWwsIGFuZCB3cml0ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4K
LXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+
IDAgc2luY2Ugd2UgcmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCi0gICAg
QVNTRVJUKHN0YXJ0WSk7Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgZm9yIChp
bnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgcm93U3RhcnRPZmZz
ZXQgPSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHBy
ZXZpb3VzUm93U3RhcnQgPSByb3dTdGFydE9mZnNldCAtIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgICAgIGludCBuZXh0Um93U3RhcnQgPSByb3dTdGFydE9mZnNldCArIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0KLSAgICAgICAgLy8gYWxwaGFXaW5kb3cg
aXMgYSBsb2NhbCBjYWNoZSBvZiBhbHBoYSB2YWx1ZXMuCi0gICAgICAgIC8vIEZpbGwgdGhlIHR3
byByaWdodCBjb2x1bW5zIHB1dHRpbmcgdGhlIGxlZnQgZWRnZSB2YWx1ZSBpbiB0aGUgY2VudGVy
IGNvbHVtbi4KLSAgICAgICAgLy8gRm9yIGVhY2ggcGl4ZWwsIHdlIHNoaWZ0IGVhY2ggcm93IGxl
ZnQgdGhlbiBmaWxsIHRoZSByaWdodCBjb2x1bW4uCi0gICAgICAgIEFscGhhV2luZG93IGFscGhh
V2luZG93OwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3AoZGF0YS5waXhlbHMtPml0ZW0ocHJl
dmlvdXNSb3dTdGFydCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5k
b3cuc2V0VG9wUmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFydCArIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0
Q2VudGVyKGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRSaWdodChkYXRhLnBpeGVscy0+aXRlbShy
b3dTdGFydE9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAg
ICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tKGRhdGEucGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFy
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9t
UmlnaHQoZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3RhcnRPZmZzZXQg
KyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNy
ZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAgICAgYWxw
aGFXaW5kb3cuc2hpZnQoKTsKLSAgICAgICAgICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBk
YXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGNGYWN0b3IxZGl2NCwgY0ZhY3RvcjFkaXY0LCBkYXRh
LmludGVyaW9yTm9ybWFsKG9mZnNldCwgYWxwaGFXaW5kb3cpLCBhbHBoYVdpbmRvdy5jZW50ZXIo
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCkKIHsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0
ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlFbmQpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdl
KG1fa2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhYKSAhPSBtX2tlcm5lbFVuaXRM
ZW5ndGhYOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0
IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQotewotICAgIHVuc2lnbmVkIHJvd3NUb1Byb2Nlc3MgPSBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lIC0gMTsKLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gcm93c1RvUHJv
Y2VzcyAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVu
c2lnbmVkPigoKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSAtIDEpICogcm93c1RvUHJvY2Vzcykg
LyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2Jz
Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVy
cz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlciwgb3B0aW1hbFRocmVh
ZE51bWJlcik7Ci0KLSAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0gICAgICAg
IGludCBqb2IgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChqb2Ig
PiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInlTdGVwIi1zaXplZCBq
b2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIg
c2luY2UKLSAgICAgICAgICAgIC8vIHlTdGVwICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4
dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAg
ICAgICAgIGNvbnN0IGludCB5U3RlcCA9IHJvd3NUb1Byb2Nlc3MgLyBqb2I7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQgam9ic1dpdGhFeHRyYSA9IHJvd3NUb1Byb2Nlc3MgJSBqb2I7Ci0KLSAgICAg
ICAgICAgIGludCB5U3RhcnQgPSAxOwotICAgICAgICAgICAgZm9yICgtLWpvYjsgam9iID49IDA7
IC0tam9iKSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJz
JiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAg
cGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmRhdGEgPSBkYXRh
OwotICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSBwYWludGluZ0RhdGE7Ci0g
ICAgICAgICAgICAgICAgcGFyYW1zLnlTdGFydCA9IHlTdGFydDsKLSAgICAgICAgICAgICAgICB5
U3RhcnQgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IHlTdGVwICsgMSA6IHlTdGVwOwotICAgICAg
ICAgICAgICAgIHBhcmFtcy55RW5kID0geVN0YXJ0OwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4KLSAgICB9Ci0K
LSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGRhdGEsIHBhaW50aW5nRGF0YSwgMSwgZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCitib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVu
aXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKQogewotICAgIC8vIFRoZSBzZWxlY3Rp
b24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0
Zm9ybXMuCi0jaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01Q
SUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBwbGF0Zm9ybUFwcGx5TmVvbihkYXRhLCBwYWludGlu
Z0RhdGEpOwotI2Vsc2UKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhkYXRhLCBwYWludGluZ0Rh
dGEpOwotI2VuZGlmCisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rZXJuZWxVbml0TGVuZ3Ro
WSwga2VybmVsVW5pdExlbmd0aFkpICE9IG1fa2VybmVsVW5pdExlbmd0aFk7CiB9CiAKLWJvb2wg
RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3
aWR0aCwgaW50IGhlaWdodCkKK0Zsb2F0UmVjdCBGRUxpZ2h0aW5nOjpkcmF3aW5nUmVjdChjb25z
dCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KSBjb25zdAogewotICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRh
OwotICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotCi0gICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBp
ZiB3aWR0aCBvciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEgcGl4ZWwuCi0gICAgLy8gVGhlIFczIHNw
ZWMgZG9lcyBub3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5z
LgotICAgIGlmICh3aWR0aCA8PSAyIHx8IGhlaWdodCA8PSAyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBkYXRhLnBpeGVscyA9ICZwaXhlbHM7Ci0gICAgZGF0YS5zdXJmYWNlU2NhbGUg
PSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKLSAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplID0gd2lkdGggKiBjUGl4ZWxTaXplOwotICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9u
ZSA9IHdpZHRoIC0gMTsKLSAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0g
MTsKLQotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbV9saWdodGluZ0NvbG9yLnRvQ29sb3JDb21w
b25lbnRzSW5Db2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgcGFpbnRpbmdE
YXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QociwgZywg
Yik7Ci0KLSAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCp0aGlzLCBwYWludGlu
Z0RhdGEpOwotCi0gICAgLy8gVG9wIGxlZnQuCi0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIDAsIGNGYWN0b3IyZGl2MywgY0Zh
Y3RvcjJkaXYzLCBkYXRhLnRvcExlZnROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBUb3Agcmln
aHQuCi0gICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhl
bFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lk
dGhEZWNyZWFzZWRCeU9uZSwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9w
UmlnaHROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBCb3R0b20gbGVmdC4KLSAgICBvZmZzZXQg
PSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90
dG9tTGVmdE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8vIEJvdHRvbSByaWdodC4KLSAgICBvZmZz
ZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6
ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERl
Y3JlYXNlZEJ5T25lLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNG
YWN0b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5vcm1hbChvZmZzZXQpKTsKLQotICAgIGlmICh3
aWR0aCA+PSAzKSB7Ci0gICAgICAgIC8vIFRvcCByb3cuCi0gICAgICAgIG9mZnNldCA9IGNQaXhl
bFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIDAsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYy
LCBkYXRhLnRvcFJvd05vcm1hbChvZmZzZXQpKTsKLQotICAgICAgICAvLyBCb3R0b20gcm93Lgot
ICAgICAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAx
OyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXpl
KQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRh
LmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAoaGVpZ2h0ID49IDMp
IHsKLSAgICAgICAgLy8gTGVmdCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdE
YXRhLCAwLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5sZWZ0Q29sdW1uTm9y
bWFsKG9mZnNldCkpOwotCi0gICAgICAgIC8vIFJpZ2h0IGNvbHVtbi4KLSAgICAgICAgb2Zmc2V0
ID0gMiAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAg
ICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwg
b2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCi0gICAgICAgICAgICBz
ZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5yaWdodENvbHVtbk5vcm1h
bChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAod2lkdGggPj0gMyAmJiBoZWlnaHQgPj0gMykg
ewotICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCi0gICAgICAgIHBsYXRmb3JtQXBwbHkoZGF0
YSwgcGFpbnRpbmdEYXRhKTsKLSAgICB9Ci0KLSAgICBpbnQgbGFzdFBpeGVsID0gZGF0YS53aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKLSAgICBpZiAobV9saWdodGluZ1R5cGUg
PT0gRGlmZnVzZUxpZ2h0aW5nKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVs
T2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBkYXRh
LnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAg
ICAgdWludDhfdCBhMSA9IGRhdGEucGl4ZWxzLT5pdGVtKGkpOwotICAgICAgICAgICAgdWludDhf
dCBhMiA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAxKTsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTMg
PSBkYXRhLnBpeGVscy0+aXRlbShpICsgMik7Ci0gICAgICAgICAgICAvLyBhbHBoYSBzZXQgdG8g
c2V0IHRvIG1heChhMSwgYTIsIGEzKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpICsg
MywgYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBnZW9t
ZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzKTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUxpZ2h0aW5nOjphcHBs
eShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VC
dWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CisgICAg
QVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgp
OwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5p
dExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMK
LSAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJv
d3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKLSAgICAvLyBvdXRwdXQgZm9yIHZhcmlv
dXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxl
LgotICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGlt
cGxlbWVudGF0aW9uCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQo
eyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEludFNpemUgYWJzb2x1
dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkcmF3TGlnaHRp
bmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNv
bHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0
LCB7IGluIH0sIG51bGxwdHIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5o
CmluZGV4IDdmYjU2MDlkYmI1N2I3NjIwMWYzMzAzMzcwNTJlNDFhYzI1MDNjZjkuLmI4MjRjNDM2
N2QwMzkxMTllZWMyM2U2ZmVlYzI5ODdiYmIyNmIzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsMjYgKzI4LDI3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNv
bG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAj
aW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENs
YW1wZWRBcnJheS5oPgotCi0vLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRp
bmcgYW5kIEZFU3BlY3VsYXJMaWdodGluZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVj
dCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbjsKLQogY2xhc3MgRkVMaWdodGluZyA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9CisgICAgYm9vbCBzZXRDb2xvcihjb25zdCBDb2xvciYpOwogCiAg
ICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0K
ICAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CiAKLSAgICBjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQotICAgIGJvb2wg
c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9CisgICAgYm9vbCBzZXREaWZm
dXNlQ29uc3RhbnQoZmxvYXQpOworCisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQorICAgIGJvb2wgc2V0U3BlY3VsYXJDb25z
dGFudChmbG9hdCk7CisKKyAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1
cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9CisgICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZs
b2F0KTsKIAogICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QgeyByZXR1cm4gbV9r
ZXJuZWxVbml0TGVuZ3RoWDsgfQogICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQp
OwpAQCAtNTQsMTE1ICs1NiwyNSBAQCBwdWJsaWM6CiAgICAgZmxvYXQga2VybmVsVW5pdExlbmd0
aFkoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOyB9CiAgICAgYm9vbCBzZXRL
ZXJuZWxVbml0TGVuZ3RoWShmbG9hdCk7CiAKLSAgICBjb25zdCBMaWdodFNvdXJjZSYgbGlnaHRT
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOyB9CisgICAgY29uc3Qg
TGlnaHRTb3VyY2UmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdldCgpOyB9CiAK
IHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24g
PSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0K
LSAgICBlbnVtIExpZ2h0aW5nVHlwZSB7Ci0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAg
ICAgU3BlY3VsYXJMaWdodGluZwotICAgIH07Ci0gICAgCi0gICAgc3RydWN0IEFscGhhV2luZG93
IHsKLSAgICAgICAgdWludDhfdCBhbHBoYVszXVszXSB7IH07Ci0gICAgICAgIAotICAgICAgICAv
LyBUaGUgaW1wbGVtZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRp
Y2VzIGVhc2llci4KLSAgICAgICAgdWludDhfdCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMF1bMF07IH0KLSAgICAgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAg
ICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMF07IH0KLSAgICAgICAgdWludDhfdCBib3R0
b21MZWZ0KCkgY29uc3QgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KLQotICAgICAg
ICB1aW50OF90IHRvcCgpIGNvbnN0ICAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsx
XTsgfQotICAgICAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVy
biBhbHBoYVsxXVsxXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAg
ICAgICB7IHJldHVybiBhbHBoYVsyXVsxXTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wKHVpbnQ4
X3QgdmFsdWUpICAgICAgICAgIHsgYWxwaGFbMF1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lk
IHNldENlbnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0K
LSAgICAgICAgdm9pZCBzZXRCb3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsx
XSA9IHZhbHVlOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3BSaWdodCh1aW50OF90IHZhbHVlKSAg
ICAgeyBhbHBoYVswXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0UmlnaHQodWludDhf
dCB2YWx1ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNl
dEJvdHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KLQot
ICAgICAgICBzdGF0aWMgdm9pZCBzaGlmdFJvdyh1aW50OF90IGFscGhhWzNdKQotICAgICAgICB7
Ci0gICAgICAgICAgICBhbHBoYVswXSA9IGFscGhhWzFdOwotICAgICAgICAgICAgYWxwaGFbMV0g
PSBhbHBoYVsyXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzaGlmdCgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKLSAgICAgICAgICAgIHNo
aWZ0Um93KGFscGhhWzFdKTsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKLSAgICAgICAgLy8gVGhp
cyBzdHJ1Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkgKFNNUCBzYWZlKSBkYXRhCi0gICAg
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7Ci0gICAgICAgIGZsb2F0IHN1cmZhY2VTY2Fs
ZTsKLSAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQg
d2lkdGhEZWNyZWFzZWRCeU9uZTsKLSAgICAgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOwot
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
LSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29u
c3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFs
cGhhV2luZG93JikgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHJpZ2h0Q29sdW1uTm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21MZWZ0
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21S
b3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRv
bVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1
Y3QgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVMaWdodGluZyog
ZmlsdGVyOwotICAgICAgICBMaWdodGluZ0RhdGEgZGF0YTsKLSAgICAgICAgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgICAgIGludCB5U3RhcnQ7Ci0gICAgICAg
IGludCB5RW5kOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
Y1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqKTsKLSAgICBzdGF0aWMgdm9p
ZCBwbGF0Zm9ybUFwcGx5TmVvbldvcmtlcihGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbiop
OwotCi0gICAgRkVMaWdodGluZyhGaWx0ZXImLCBMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNl
PiYmLCBUeXBlKTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVMaWdodGluZyI7IH0KLQotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xh
bXBlZEFycmF5JiwgaW50LCBpbnQpOwotCi0gICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBj
b25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50
IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZl
Y3Rvcik7Ci0gICAgdm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0
aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHks
IGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9h
dCBhbHBoYSk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQ
YWludChjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRh
JiwgaW50IHN0YXJ0WCwgaW50IHN0YXJ0WSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
Yyhjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7
Ci0KLSNpZiBDUFUoQVJNX05FT04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVS
KEdDQ19DT01QQVRJQkxFKQotICAgIHN0YXRpYyBpbnQgZ2V0UG93ZXJDb2VmZmljaWVudHMoZmxv
YXQgZXhwb25lbnQpOwotICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uKGNvbnN0IExp
Z2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLSNlbmRpZgot
Ci0gICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdUeXBlOwotICAgIFJlZjxMaWdodFNvdXJjZT4g
bV9saWdodFNvdXJjZTsKLQotICAgIENvbG9yIG1fbGlnaHRpbmdDb2xvcjsKKyAgICBGRUxpZ2h0
aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291
cmNlPiYmKTsKKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKKworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIENvbG9yIG1fY29sb3I7CiAgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7CiAgICAgZmxvYXQg
bV9kaWZmdXNlQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckNvbnN0YW50OwogICAgIGZs
b2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwog
ICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7CisgICAgUmVmPExpZ2h0U291cmNlPiBtX3Nv
dXJjZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMGEyMDAw
MWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uM2EwOGNkMGRjMDNjODE1MTU0MGU1
MmFmOTRiOGE0NzBiNDc3NjgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1MSArMjMsNDggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3Ry
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUZFTWVyZ2U6OkZFTWVyZ2UoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJF
ZmZlY3QoZmlsdGVyLCBUeXBlOjpNZXJnZSkKK1JlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUo
dW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVNZXJnZShudW1iZXJPZkVmZmVjdElucHV0cykpOwogfQogCi1SZWY8RkVNZXJnZT4gRkVN
ZXJnZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVNZXJnZTo6RkVNZXJnZSh1bnNpZ25lZCBu
dW1iZXJPZkVmZmVjdElucHV0cykKKyAgICA6IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMobnVtYmVy
T2ZFZmZlY3RJbnB1dHMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShmaWx0
ZXIpKTsKKyAgICBBU1NFUlQobV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiB9CiAKLXZvaWQgRkVN
ZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2NvbnN0IEF0b21TdHJpbmcmIEZFTWVyZ2U6
OmVmZmVjdE5hbWUoKQogewotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0
cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIkZFTWVyZ2UiLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKK30K
KworRmlsdGVyUmVzdWx0KiBGRU1lcmdlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmls
dGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAoreworICAgIEFTU0VS
VChzdGFjay5zaXplKCkgPT0gbV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiAKLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICgh
cmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8UmVmPEZpbHRlclJlc3Vs
dD4+IGlucHV0czsKKyAgICBmb3IgKGF1dG8gaW5wdXRzU2l6ZSA9IG1fbnVtYmVyT2ZFZmZlY3RJ
bnB1dHM7IGlucHV0c1NpemUtLTsgKQorICAgICAgICBpbnB1dHMuYXBwZW5kKHN0YWNrLnRha2VM
YXN0KCkpOwogCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAq
dGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1h
Z2VCdWZmZXJSZXN1bHQoKSkKLSAgICAgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOwotICAgIH0KKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIGlucHV0
cywgbnVsbHB0cik7CiB9CiAKLVRleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlTWVyZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVj
dElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7Ci0gICAgdHMgPDwgIiBtZXJnZU5vZGVz
PVwiIiA8PCBzaXplIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBp
bmRlbnRTY29wZSh0cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgaW5wdXRFZmZlY3QoaSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJl
c2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IG1fbnVtYmVyT2ZFZmZl
Y3RJbnB1dHMgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVj
Yjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThmMjYwNy4uZjNmNDVjMzY4YTNhYTMxZjM4NWQ2
MmMwODQyYzYzZTY3YjVlOTRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDE2ICsyOSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZF
TWVyZ2U+IGNyZWF0ZSh1bnNpZ25lZCBtX251bWJlck9mRWZmZWN0SW5wdXRzKTsKKworICAgIHN0
YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgRkVN
ZXJnZShGaWx0ZXImKTsKKyAgICBGRU1lcmdlKHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRz
KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAi
RkVNZXJnZSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7
CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX251bWJl
ck9mRWZmZWN0SW5wdXRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCmluZGV4IDhhN2U1YjY2N2FiNzczYjkwYjg5MGUzODM4NjM5MzU2MmI5ZDhkZjUuLmYw
YmM5ODEzMmY4ZDFkMzQyZmEzYWUwM2YxYTI2NWE0MDIwNmViODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAy
MDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5j
LiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjUsMjY1ICsyNSw2MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTW9ycGhv
bG9neS5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JU
eXBlcy5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0j
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6TW9ycGhvbG9neSkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAg
ICwgbV9yYWRpdXNYKHJhZGl1c1gpCi0gICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKK1JlZjxGRU1v
cnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9s
b2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCiB7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KG1vcnBob2xvZ3lPcGVyYXRvciwgcmFkaXVzWCwg
cmFkaXVzWSkpOwogfQogCi1SZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShG
aWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNY
LCBmbG9hdCByYWRpdXNZKQorRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9w
ZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkK
KyAgICA6IG1fbW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVyYXRvcikKKyAgICAsIG1f
cmFkaXVzWChyYWRpdXNYKQorICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwgcmFkaXVz
WSkpOwogfQogCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK2Jvb2wgRkVNb3JwaG9sb2d5OjpzZXRNb3JwaG9sb2d5
T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcikKIHsKLSAgICBp
ZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0
eXBlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fbW9ycGhv
bG9neU9wZXJhdG9yLCBtb3JwaG9sb2d5T3BlcmF0b3IpICE9IG1vcnBob2xvZ3lPcGVyYXRvcjsK
IH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1goZmxvYXQgcmFkaXVzWCkKIHsKLSAg
ICBpZiAobV9yYWRpdXNYID09IHJhZGl1c1gpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X3JhZGl1c1ggPSByYWRpdXNYOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fcmFkaXVzWCwgcmFkaXVzWCkgIT0gbV9yYWRpdXNYOwogfQogCiBib29sIEZFTW9y
cGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKQogewotICAgIGlmIChtX3JhZGl1c1kg
PT0gcmFkaXVzWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fcmFkaXVzWSA9IHJhZGl1
c1k7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZm
ZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+
ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVz
b2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKLSAgICBpZiAoY2xpcHNUb0JvdW5k
cygpKQotICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwotfQotCi1zdGF0
aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpCi17
Ci0gICAgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7Ci19Ci0KLWlubGluZSBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tl
ZENvbG9yOjpSR0JBIHBpeGVsKQotewotICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NS
R0JBKHBpeGVsKSk7Ci19Ci0KLWlubGluZSBQYWNrZWRDb2xvcjo6UkdCQSBtYWtlUGl4ZWxWYWx1
ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBj
b21wb25lbnRzKQotewotICAgIHJldHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7IG1ha2VGcm9tQ29t
cG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsKLX0KLQotdGVtcGxhdGU8TW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBh
LCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIpCi17Ci0gICAgaWYgKHR5cGUg
PT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4gcGVyQ29tcG9u
ZW50TWluKGEsIGIpOwotCi0gICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChhLCBiKTsKLX0KLQot
dGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdp
ZHRoKQotewotICAgIGF1dG8gZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lk
dGgpKSB9KTsKLQotICAgIGZvciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7
Ci0gICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUo
UGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNy
Y1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7Ci0g
ICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVtdW0sIHBpeGVsKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGV4dHJlbXVtOwotfQotCi1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3Jj
UGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRVJPREU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgp
OwotCi0gICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxB
VEU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotfQotCi11c2luZyBD
b2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+Owot
Ci10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRy
ZW1hJiBrZXJuZWwpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVtdW0g
PSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwga2VybmVsW2ldKTsKLQotICAgIHJldHVybiBleHRy
ZW11bTsKLX0KLQotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2Vy
bmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VS
T0RFKQotICAgICAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9S
X0VST0RFPihrZXJuZWwpOwotCi0gICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9ESUxBVEU+KGtlcm5lbCk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0
YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgY29u
c3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKLSAg
ICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OwotCi0g
ICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKLSAgICBjb25zdCBp
bnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOwotICAgIGNvbnN0IGludCB3aWR0aCA9
IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRh
LmhlaWdodDsKLQotICAgIEFTU0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVp
Z2h0KTsKLSAgICBBU1NFUlQoc3RhcnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZ
IDwgZW5kWSk7Ci0KLSAgICBDb2x1bW5FeHRyZW1hIGV4dHJlbWE7Ci0gICAgZXh0cmVtYS5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRpdXNYICsgMSk7Ci0KLSAgICBmb3IgKGludCB5ID0g
c3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6
Om1heCgwLCB5IC0gcmFkaXVzWSk7Ci0gICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4o
aGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOwotCi0gICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOwot
Ci0gICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVt
ZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBy
YWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShz
cmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUp
KTsKLQotICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNv
bHVtbgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAgICAg
ICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBw
ZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3Rh
cnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAgICAgaWYgKHggPiBy
YWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAgICAg
ICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBp
eGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAgICAg
ICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5l
bEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkpLnZhbHVlOwotICAgICAgICB9Ci0gICAgfQorICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fcmFkaXVzWSwgcmFkaXVzWSkgIT0gbV9yYWRpdXNZOwog
fQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5
UGFyYW1ldGVycyogcGFyYW0pCitGbG9hdFJlY3QgRkVNb3JwaG9sb2d5OjpkcmF3aW5nUmVjdChj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KSBjb25zdAogewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
KCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CisgICAg
QVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0ID0g
aW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOworICAgIGRyYXdpbmdSZWN0LmluZmxhdGUoeyBtX3Jh
ZGl1c1gsIG1fcmFkaXVzWSB9KTsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4RHJhd2luZ1JlY3Qo
aW5wdXRzLCBkcmF3aW5nUmVjdCk7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorRmlsdGVyUmVzdWx0KiBGRU1v
cnBob2xvZ3k6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1bnRp
bWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3
aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0
KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKyAg
ICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0
KCk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxBcmVhID0gKDE2MCAqIDE2MCk7IC8v
IEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0gICAgCi0gICAgdW5zaWdu
ZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4OwotICAgIHVuc2lnbmVk
IG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKHBhaW50aW5nRGF0YS53
aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3IpIC8gbWluaW1hbEFyZWEs
IG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAg
ICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxK
b2JzKCZXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIsIG9wdGltYWxU
aHJlYWROdW1iZXIpOwotICAgICAgICBhdXRvIG51bU9mVGhyZWFkcyA9IHBhcmFsbGVsSm9icy5u
dW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bU9mVGhyZWFkcyA+IDEpIHsKLSAgICAgICAg
ICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSItc2l6ZWQgam9icyBidXQgdGhlcmUg
YSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAg
ICAgICAvLyBqb2JTaXplICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFu
ZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGludCBq
b2JTaXplID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAg
IGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRpbmdEYXRhLmhlaWdodCAlIG51bU9mVGhyZWFkczsK
LSAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2Ig
PSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQ
bGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpv
Yik7Ci0gICAgICAgICAgICAgICAgcGFyYW0uZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAg
ICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBq
b2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXplOwotICAgICAgICAgICAg
ICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAgICBwYXJhbS5wYWludGlu
Z0RhdGEgPSAmcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFyYWxs
ZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVsCi0gICAgfQorICAgIGlmIChhdXRv
IHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBh
aW50aW5nRGF0YS5oZWlnaHQpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBp
biB9LCBudWxscHRyKTsKIH0KIAotYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdl
bmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBp
bWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3ImIG1vcnBo
b2xvZ3lPcGVyYXRvcikKIHsKLSAgICBpZiAocmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwg
KCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhl
bEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShp
bi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0KLSAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX3JhZGl1
c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5h
dGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMud2lkdGgoKSwgcmFkaXVz
LmhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGll
ZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBp
ZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJhZGl1cyA9IGZs
b29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gs
IG1fcmFkaXVzWSB9KSk7Ci0gICAgaW50IHJhZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5n
UmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwotICAgIGludCByYWRpdXNZID0gc3Rk
OjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOwot
Ci0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwg
ZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBwYWludGluZ0RhdGEuc3Jj
UGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7Ci0gICAgcGFpbnRpbmdEYXRhLmRz
dFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS53
aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0
LmhlaWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRp
dXNYID0gY2VpbGYocmFkaXVzWCAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGlu
Z0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0K
LSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
JiB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAobW9ycGhvbG9neU9w
ZXJhdG9yKSB7CiAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAg
ICAgdHMgPDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTI5NywxNSArOTMsMTEgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVw
cmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVNb3Jw
aG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZU1vcnBob2xvZ3ki
OwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwogICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8IG1vcnBob2xvZ3lPcGVyYXRvcigp
IDw8ICJcIiAiCiAgICAgICAgPDwgInJhZGl1cz1cIiIgPDwgcmFkaXVzWCgpIDw8ICIsICIgPDwg
cmFkaXVzWSgpIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRl
bnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmlu
ZGV4IDQ4ZmMzNTQxMTdmYzI3Y2NmYzhlOTNmMTRlZGYwNzVkZTM5YzVhMTEuLmExOTUwMTY5YTVk
NWY1M2M4M2EwNzRlMDk1M2Y0YTE1MzVhZTBmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaApAQCAtMiw2ICsy
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTEgKzIzLDEw
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUg
IkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSB7CitlbnVtIE1vcnBob2xvZ3lPcGVyYXRvciB7CiAgICAgRkVNT1JQSE9MT0dZX09Q
RVJBVE9SX1VOS05PV04gPSAwLAogICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSA9IDEs
CiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSA9IDIKQEAgLTM0LDEwICszNCwxMCBA
QCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewogCiBjbGFzcyBGRU1vcnBob2xvZ3kgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFTW9ycGhvbG9n
eT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gs
IGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoTW9y
cGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAotICAgIE1v
cnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9Ci0gICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSk7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9CisgICAgYm9vbCBzZXRNb3JwaG9s
b2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yKTsKIAogICAgIGZsb2F0IHJhZGl1c1goKSBj
b25zdCB7IHJldHVybiBtX3JhZGl1c1g7IH0KICAgICBib29sIHNldFJhZGl1c1goZmxvYXQpOwpA
QCAtNDYsNDAgKzQ2LDE5IEBAIHB1YmxpYzoKICAgICBib29sIHNldFJhZGl1c1koZmxvYXQpOwog
CiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0ZXImLCBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBGRU1vcnBob2xvZ3koTW9y
cGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAogICAgIGNv
bnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNb3JwaG9sb2d5
IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBG
bG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShG
aWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYg
ZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50
IHJhZGl1c1kpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJy
YXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFy
cmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGlu
dCByYWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9OwotCi0gICAgc3RydWN0IFBs
YXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVNb3JwaG9sb2d5KiBmaWx0ZXI7Ci0g
ICAgICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgICAgICBjb25zdCBQYWlu
dGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZv
cm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwotCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdl
bmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwotCi0gICAg
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1f
bW9ycGhvbG9neU9wZXJhdG9yOwogICAgIGZsb2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBtX3Jh
ZGl1c1k7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMjcwZGI5MjQ4MWEzMzkyZDNkNWExZTkxN2MyZDY1
YWE0MTQwZjY5Li43MWQ4NDA2NDM2MjYyZmU3OTU2ODkzMjA3YWUzMzIxOTFmNzgwN2Y4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0
LDcxICsyNSw0NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFT2Zmc2V0Lmgi
CiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVPZmZzZXQ6OkZFT2Zmc2V0KEZpbHRlciYgZmls
dGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpPZmZzZXQpCi0gICAgLCBtX2R4KGR4KQorRkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBm
bG9hdCBkeSkKKyAgICA6IG1fZHgoZHgpCiAgICAgLCBtX2R5KGR5KQogewogfQogCi1SZWY8RkVP
ZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBk
eSkKK1JlZjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChkeCwgZHkpKTsKIH0KIAotdm9pZCBGRU9m
ZnNldDo6c2V0RHgoZmxvYXQgZHgpCitGbG9hdFJlY3QgRkVPZmZzZXQ6OmRyYXdpbmdSZWN0KGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0CiB7Ci0gICAgbV9keCA9IGR4OworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOwor
ICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBpbnB1dHNbMF0tPmRyYXdpbmdSZWN0KCk7CisgICAgZHJh
d2luZ1JlY3QubW92ZSh7IG1fZHgsIG1fZHkgfSk7CisgICAgcmV0dXJuIGRyYXdpbmdSZWN0Owog
fQogCi12b2lkIEZFT2Zmc2V0OjpzZXREeShmbG9hdCBkeSkKK0ZpbHRlclJlc3VsdCogRkVPZmZz
ZXQ6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgbV9keSA9IGR5OwotfQotCi12b2lkIEZFT2Zm
c2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0IHBhaW50
UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIGlmIChjbGlwc1RvQm91
bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19CisgICAg
QVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgp
OwogCi12b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGluQnVm
ZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAh
aW5CdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQu
cmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAg
c2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJh
d2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2lu
Z1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5
IH0pKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZm
ZXIsIGRyYXdpbmdSZWdpb24pOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBp
biB9LCBudWxscHRyKTsKIH0KIAotVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlv
bikgY29uc3QKK1RleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBp
bmRlbnQgPDwgIltmZU9mZnNldCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBkeD1cIiIgPDwgZHgoKSA8
PCAiXCIgZHk9XCIiIDw8IGR5KCkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVu
dFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5o
CmluZGV4IDY1YWJkYTkwYTQ3YjFiZmU3NmFlNWM3NGFhYjVhYTE2N2ZiMWU2OWUuLmE5OGU0YTk5
YzA1YjM3MWM1ZjRlNjBmYzNiZmJlNzU2MmJlOTU3NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDM0ICsyMyw2MCBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShG
aWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNy
ZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwogCiAgICAgZmxvYXQgZHgoKSBjb25zdCB7IHJldHVy
biBtX2R4OyB9Ci0gICAgdm9pZCBzZXREeChmbG9hdCk7CisgICAgdm9pZCBzZXREeChmbG9hdCBk
eCkgeyBtX2R4ID0gZHg7IH0KIAogICAgIGZsb2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9keTsg
fQotICAgIHZvaWQgc2V0RHkoZmxvYXQpOworICAgIHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9k
eSA9IGR5OyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBG
RU9mZnNldChGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIEZFT2Zmc2V0KGZsb2F0
IGR4LCBmbG9hdCBkeSk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gIkZFT2Zmc2V0IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBG
aWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9keDsKICAgICBmbG9hdCBtX2R5
OwogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
K3ZvaWQgRkVPZmZzZXQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgbV9keDsKKyAgICBlbmNvZGVyIDw8IG1fZHk7Cit9CiAKK3RlbXBsYXRlPGNsYXNz
IERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRU9mZnNldD4+IEZFT2Zmc2V0OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkeDsKKyAgICBk
ZWNvZGVyID4+IGR4OworICAgIGlmICghZHgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkeTsKKyAgICBkZWNvZGVyID4+IGR5OworICAg
IGlmICghZHkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVP
ZmZzZXQ6OmNyZWF0ZSgqZHgsICpkeSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAppbmRleCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0
MWY3NGY5YzQ4N2ExNDRjLi45OWFiOGRhNjRmY2Q1YTM2YjEyNjFmYTEyZjBkMWYwYThjMWRmMzAz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
U3BlY3VsYXJMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw0OSArMjMsMjYgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGRVNwZWN1bGFyTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUg
IkxpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5n
KEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFj
ZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBTcGVjdWxh
ckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3Rh
bnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3Ro
WSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OlNwZWN1bGFyTGlnaHRpbmcpCitSZWY8RkVT
cGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYg
Y29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxh
ckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSkpOwogfQogCi1SZWY8RkVTcGVjdWxhckxpZ2h0aW5n
PiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCitGRVNw
ZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQorICAgIDogRkVMaWdodGluZyhjb2xvciwgc3Vy
ZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxV
bml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVNwZWN1bGFyTGlnaHRpbmcoZmlsdGVyLCBsaWdodGluZ0Nv
bG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtl
cm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkp
KTsKIH0KIAotRkVTcGVjdWxhckxpZ2h0aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBkZWZh
dWx0OwotCi1ib29sIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChmbG9h
dCBzcGVjdWxhckNvbnN0YW50KQotewotICAgIGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3Bl
Y3VsYXJDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3BlY3VsYXJDb25z
dGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVT
cGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQpCi17Ci0gICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSBzcGVjdWxhckV4cG9uZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJF
eHBvbmVudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlU3BlY3VsYXJMaWdo
dGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNj
YWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1YWxDb25zdGFudD1cIiIgPDwgbV9zcGVjdWxh
ckNvbnN0YW50IDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1f
c3BlY3VsYXJFeHBvbmVudCA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2Nv
cGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuaAppbmRleCBlOTk4YTc2MDVkMWU0NzM1ZDlmNDk3OThkMzk4MThiZjNi
MjQ5NThhLi5jYWU1YjgyZmJlYmM1YWI2MzQzNTY5MDVlOWJlN2U2ZjNmMDMyZjc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI3LDIwICsyOCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0
IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3Vy
Y2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOworICAgIHN0YXRpYyBS
ZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0
U291cmNlPiYmKTsKIAotICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdCB7IHJldHVy
biBtX3NwZWN1bGFyQ29uc3RhbnQ7IH0KLSAgICBib29sIHNldFNwZWN1bGFyQ29uc3RhbnQoZmxv
YXQpOwotCi0gICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Bl
Y3VsYXJFeHBvbmVudDsgfQotICAgIGJvb2wgc2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCk7Citw
cml2YXRlOgorICAgIEZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGln
aHRTb3VyY2U+JiYpOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJG
RVNwZWN1bGFyTGlnaHRpbmciOyB9CiAKLXByaXZhdGU6Ci0gICAgRkVTcGVjdWxhckxpZ2h0aW5n
KEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0
LCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1
MWNiYjIyOWRlZTk2NDJkYzFlN2RjYTBjNWRiMmZjYWMyMGFkLi4xMzc5MmRkOGQwM2ZjMTliMmM2
MzIxZTMxNjJmNzEzYTc3MTY3MzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwu
Y29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDgwICsyMiwzNiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkZFVGlsZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRl
ICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVUaWxlOjpGRVRpbGUoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVy
LCBUeXBlOjpUaWxlKQorUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoKQogeworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFVGlsZSgpKTsKIH0KIAotUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVh
dGUoRmlsdGVyJiBmaWx0ZXIpCitGbG9hdFJlY3QgRkVUaWxlOjpkcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUaWxlKGZpbHRlcikpOworICAgIC8vIERv
bid0IHVzZSB0aGUgaW5wdXRzJyBzdWJyZWdpb25zIGZvciA8ZmVUaWxlPi4KKyAgICByZXR1cm4g
Z2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRVRpbGU6OmFwcGx5KEZpbHRl
ck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciop
IGNvbnN0CiB7Ci0vLyBGSVhNRTogU2VlIGJ1ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29y
ayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3Ro
ZXJ3aXNlLgotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBBU1NF
UlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAK
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdl
KCkpOwotCi0gICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMg
dGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBv
ZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lm
aWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgotICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5t
YXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGls
ZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4
RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgaWYgKGluLT5maWx0ZXJFZmZlY3RUeXBlKCkg
PT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0KSB7Ci0gICAgICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lv
bigpOwotICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndp
ZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIH0KLQotICAg
IGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
dGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVy
KCkucmVuZGVyaW5nTW9kZSgpKTsKLSAgICBpZiAoIXRpbGVJbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5j
b250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9j
YXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkpOwotICAgIHRpbGVJbWFnZUNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9j
YXRpb24oKSk7Ci0KLSAgICBhdXRvIHRpbGVJbWFnZUNvcHkgPSBJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZShXVEZNb3ZlKHRpbGVJbWFnZSkpOwotICAgIGlmICghdGlsZUltYWdlQ29w
eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zv
cm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUoaW5NYXhFZmZlY3RMb2NhdGlvbiAt
IG1heEVmZmVjdExvY2F0aW9uKTsKLQotICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0
ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRy
YW5zZm9ybSB9KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3Vs
dEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZN
b3ZlKHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFwcGx5
UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCi1UZXh0U3RyZWFtJiBGRVRp
bGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9u
VHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0
CiB7Ci0gICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiXVxu
IjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotCisgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlXVxuIjsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oCmluZGV4IDQ5YmQ5OWYwOTQ0N2RhZTFjZjA5YWYxMjM1OGM2ZGU4NDA2ODc3MTQuLjYxM2E1
ODU2ZjVjOWIxOGRhZjc2MWNjZTc3OTQ4YWQ0NmVhZTg2MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMiw2ICsyLDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjcgKzIzLDI1IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRl
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRVRpbGUgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKEZp
bHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToKLSAg
ICBGRVRpbGUoRmlsdGVyJik7CisgICAgdXNpbmcgRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3Q7
CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
VGlsZSI7IH0KIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVUaWxlOyB9CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYs
IEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3Zl
cnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJl
Y3QoKSkpOyB9CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGFjMjM0NmU4YTRiYTU4YWFh
OTI0YTZkNjdiZDVlNGI3N2RkMjI2OGYuLjgyYmY4N2M1YTQxZGI0MzI5YjE2NDAzNTZjMTRjMzdk
ODUyNDY5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgogICogQ29weXJp
Z2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMzEgKzI2LDE4IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLS8qCi0gICAgUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0g
Ml0uIEFsZ29yaXRobSBpczoKLSAgICByID0gKGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFt
cGxpdHVkZSA9IDE2ODA3IGFuZAotICAgIG0gPSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIx
NDc0ODM2NDcsIHIgPSBzZWVkLgotICAgIFNlZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAz
MSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4Ci0gICAgVG8gdGVzdDogdGhlIGFsZ29yaXRobSBz
aG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUKLSAgICBhcyB0aGUgMTAsMDAwdGgg
Z2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgotKi8KLXN0YXRpYyBj
b25zdCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRN
YXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCi1zdGF0aWMgY29uc3QgaW50IHNfcmFu
ZEFtcGxpdHVkZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMg
Y29uc3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCi1zdGF0aWMgY29uc3QgaW50IHNf
cmFuZFIgPSAyODM2OyAvLyBtICUgYQorUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpj
cmVhdGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJh
c2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxl
cykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZy
ZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykp
OworfQogCi1GRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVs
ZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZ
LCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlR1cmJ1bGVuY2UpCi0gICAgLCBtX3R5cGUodHlwZSkK
K0ZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJh
c2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0
IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fYmFz
ZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lZKGJhc2VG
cmVxdWVuY3lZKQogICAgICwgbV9udW1PY3RhdmVzKG51bU9jdGF2ZXMpCkBAIC01OSw0MDUgKzQ2
LDQ3IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxl
bmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlCiB7CiB9CiAKLVJlZjxGRVR1cmJ1bGVuY2U+
IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBl
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3Rh
dmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFVHVyYnVsZW5jZShmaWx0ZXIsIHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJl
cXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKLX0KLQogYm9vbCBGRVR1
cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsZW5jZVR5cGUgdHlwZSkKIHsKLSAgICBpZiAobV90eXBl
ID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVko
ZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi17Ci0gICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVkgPT0gYmFz
ZUZyZXF1ZW5jeVkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Jhc2VGcmVxdWVuY3lZ
ID0gYmFzZUZyZXF1ZW5jeVk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhj
aGFuZ2UobV90eXBlLCB0eXBlKSAhPSBtX3R5cGU7CiB9CiAKIGJvb2wgRkVUdXJidWxlbmNlOjpz
ZXRCYXNlRnJlcXVlbmN5WChmbG9hdCBiYXNlRnJlcXVlbmN5WCkKIHsKLSAgICBpZiAobV9iYXNl
RnJlcXVlbmN5WCA9PSBiYXNlRnJlcXVlbmN5WCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fYmFzZUZyZXF1ZW5jeVggPSBiYXNlRnJlcXVlbmN5WDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Jhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WCkg
IT0gbV9iYXNlRnJlcXVlbmN5WDsKIH0KIAotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFNlZWQoZmxv
YXQgc2VlZCkKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNl
RnJlcXVlbmN5WSkKIHsKLSAgICBpZiAobV9zZWVkID09IHNlZWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3NlZWQgPSBzZWVkOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBz
dGQ6OmV4Y2hhbmdlKG1fYmFzZUZyZXF1ZW5jeVksIGJhc2VGcmVxdWVuY3lZKSAhPSBtX2Jhc2VG
cmVxdWVuY3lZOwogfQogCiBib29sIEZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyhpbnQgbnVt
T2N0YXZlcykKIHsKLSAgICBpZiAobV9udW1PY3RhdmVzID09IG51bU9jdGF2ZXMpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX251bU9jdGF2ZXMgPSBudW1PY3RhdmVzOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0
Y2gpCi17Ci0gICAgaWYgKG1fc3RpdGNoVGlsZXMgPT0gc3RpdGNoKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbV9zdGl0Y2hUaWxlcyA9IHN0aXRjaDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLy8gVGhlIHR1cmJ1bGVuY2UgY2FsY3VsYXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZlcnNp
b24gb2Ygd2hhdCBhcHBlYXJzIGluIHRoZSBTVkcgMS4xIHNwZWNpZmljYXRpb246Ci0vLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlCi0KLS8vIENv
bXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCi1pbmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6OlBh
aW50aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAgICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVk
ZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3JhbmRSICogKHNlZWQgLyBzX3JhbmRRKTsKLSAgICBp
ZiAocmVzdWx0IDw9IDApCi0gICAgICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOwotICAgIHNl
ZWQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIGZsb2F0IHNtb290
aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0dXJuIHQgKiB0ICogKDMgLSAyICogdCk7Ci19Ci0K
LWlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0
IGIpCi17Ci0gICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVu
Y2U6OmluaXRQYWludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICBmbG9hdCBu
b3JtYWxpemF0aW9uRmFjdG9yOwotCi0gICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhl
IHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCi0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVk
IDw9IDApCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAl
IChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKLSAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBz
X3JhbmRNYXhpbXVtIC0gMSkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhp
bXVtIC0gMTsKLQotICAgIGZsb2F0KiBncmFkaWVudDsKLSAgICBmb3IgKGludCBjaGFubmVsID0g
MDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNfYmxvY2tTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbaV0gPSBpOwotICAgICAgICAgICAgZ3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1baV07Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgZ3JhZGll
bnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICog
c19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAg
ICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9t
KCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAg
ICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAhZ3JhZGllbnRbMV0pOwotICAgICAg
ICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRp
ZW50WzFdKTsKLSAgICAgICAgICAgIGdyYWRpZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7
Ci0gICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0t
aSkgewotICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0g
ICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgc19ibG9ja1NpemU7Ci0gICAg
ICAgIEFTU0VSVChqID49IDApOwotICAgICAgICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSAr
IDIpOwotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3RvcltqXSA9IGs7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6
ZSArIDI7ICsraSkgewotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxv
Y2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBm
b3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICAg
ICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07Ci0gICAgICAgICAgICBwYWludGlu
Z0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotRkVUdXJi
dWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXpl
IHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fc3RpdGNoVGlsZXMpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHRpbGVI
ZWlnaHQgPSB0aWxlU2l6ZS5oZWlnaHQoKTsKLSAgICBBU1NFUlQodGlsZVdpZHRoID4gMCAmJiB0
aWxlSGVpZ2h0ID4gMCk7Ci0KLSAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNl
LCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAotICAgIC8vIHNvIHRoYXQgdGhlIHRp
bGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCi0gICAgaWYgKGJhc2VGcmVxdWVuY3lYKSB7
Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGggKiBiYXNlRnJl
cXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWls
Zih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIC8vIEJh
c2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5k
YXJkLgotICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJl
cXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGxv
d0ZyZXF1ZW5jeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBo
aWdoRnJlcXVlbmN5OwotICAgIH0KLSAgICBpZiAoYmFzZUZyZXF1ZW5jeVkpIHsKLSAgICAgICAg
ZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkg
LyB0aWxlSGVpZ2h0OwotICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZUhl
aWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGlmIChiYXNlRnJl
cXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkK
LSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotCi0g
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgIHN0aXRjaERhdGEud2lkdGggPSByb3VuZGYo
dGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOwotICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Bl
cmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsKLSAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJv
dW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpOwotICAgIHN0aXRjaERhdGEud3JhcFkg
PSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gc3RpdGNo
RGF0YTsKLX0KLQotLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3
dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1Db2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChjb25zdCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3Qg
RmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpIGNvbnN0Ci17Ci0gICAgc3RydWN0IE5vaXNlUG9zaXRp
b24gewotICAgICAgICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGluIHRoZSBzcGVjIHRleHQuCi0g
ICAgICAgIGludCBuZXh0SW5kZXg7IC8vIGJ4MSwgYnkxIGluIHRoZSBzcGVjIHRleHQuCi0gICAg
ICAgIGZsb2F0IGZyYWN0aW9uOyAvLyByeDAsIHJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgotCi0gICAg
ICAgIE5vaXNlUG9zaXRpb24oZmxvYXQgY29tcG9uZW50KQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyAgdCA9IHZlY1swXSArIFBlcmxpbk47Ci0gICAgICAgICAgICAvLyAgYngwID0gKGludCl0
OwotICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4MCsxOwotICAgICAgICAgICAgLy8gIHJ4MCA9IHQg
LSAoaW50KXQ7Ci0gICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVudCArIHNfcGVy
bGluTm9pc2U7Ci0gICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24p
OwotICAgICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXggKyAxOwotICAgICAgICAgICAgZnJhY3Rp
b24gPSBwb3NpdGlvbiAtIGluZGV4OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lk
IHN0aXRjaChpbnQgc2l6ZSwgaW50IHdyYXBTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBpZiAoYngwID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4MCAt
PSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IHdyYXBTaXpl
KQotICAgICAgICAgICAgICAgIGluZGV4IC09IHNpemU7Ci0KLSAgICAgICAgICAgIC8vIGlmIChi
eDEgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKLSAgICAgICAgICAgIC8vICAgYngxIC09IHBTdGl0
Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAgICBpZiAobmV4dEluZGV4ID49IHdyYXBTaXplKQot
ICAgICAgICAgICAgICAgIG5leHRJbmRleCAtPSBzaXplOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIE5vaXNlUG9zaXRpb24gbm9pc2VYKG5vaXNlVmVjdG9yLngoKSk7Ci0gICAgTm9pc2VQb3Np
dGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKLQotICAgIC8vIElmIHN0aXRjaGluZywgYWRq
dXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7
Ci0gICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0aCwgc3RpdGNoRGF0YS53cmFw
WCk7Ci0gICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5oZWlnaHQsIHN0aXRjaERhdGEu
d3JhcFkpOwotICAgIH0KLQotICAgIC8vIGJ4MCAmPSBCTTsKLSAgICAvLyBieDEgJj0gQk07Ci0g
ICAgLy8gYnkwICY9IEJNOwotICAgIC8vIGJ5MSAmPSBCTTsKLSAgICBub2lzZVguaW5kZXggJj0g
c19ibG9ja01hc2s7Ci0gICAgbm9pc2VYLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBu
b2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLm5leHRJbmRleCAmPSBzX2Js
b2NrTWFzazsKLQotICAgIC8vIGkgPSB1TGF0dGljZVNlbGVjdG9yW2J4MF07Ci0gICAgLy8gaiA9
IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKLSAgICBpbnQgbGF0dGljZUluZGV4ID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVguaW5kZXhdOwotICAgIGludCBuZXh0TGF0dGljZUlu
ZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVgubmV4dEluZGV4XTsKLQot
ICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUocngwKSk7Ci0gICAgLy8gc3kgPSBkb3VibGUoc19j
dXJ2ZShyeTApKTsKLSAgICBmbG9hdCBzeCA9IHNtb290aEN1cnZlKG5vaXNlWC5mcmFjdGlvbik7
Ci0gICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkuZnJhY3Rpb24pOwotCi0gICAgYXV0
byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50IGNoYW5uZWwpIHsKLSAgICAgICAgLy8gYjAwID0g
dUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQotICAgICAgICBpbnQgYjAwID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAv
LyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMF07IHUgPSByeDAgKiBxWzBdICsgcnkw
ICogcVsxXTsKLSAgICAgICAgY29uc3QgZmxvYXQqIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1bYjAwXTsKLSAgICAgICAgZmxvYXQgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0g
KyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwotCi0gICAgICAgIC8vIGIxMCA9IHVMYXR0aWNlU2Vs
ZWN0b3JbaiArIGJ5MF07Ci0gICAgICAgIGludCBiMTAgPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAvLyByeDEg
PSByeDAgLSAxLjBmOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2Ix
MF07IHYgPSByeDEgKiBxWzBdICsgcnkwICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOwotICAgICAgICBmbG9hdCB2ID0gKG5vaXNlWC5mcmFj
dGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0gICAgICAgIC8vIGEg
PSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxvYXQgYSA9IGxpbmVhckludGVycG9sYXRpb24o
c3gsIHUsIHYpOwotCi0gICAgICAgIC8vIGIwMSA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MV07
Ci0gICAgICAgIGludCBiMDEgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJ
bmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwotICAgICAgICAvLyByeTEgPSByeTAgLSAxLjBmOwot
ICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMV07IHUgPSByeDAgKiBx
WzBdICsgcnkxICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFu
bmVsXVtiMDFdOwotICAgICAgICB1ID0gbm9pc2VYLmZyYWN0aW9uICogcVswXSArIChub2lzZVku
ZnJhY3Rpb24gLSAxKSAqIHFbMV07Ci0KLSAgICAgICAgLy8gYjExID0gdUxhdHRpY2VTZWxlY3Rv
cltqICsgYnkxXTsKLSAgICAgICAgaW50IGIxMSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwotICAgICAgICAvLyBxID0g
ZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMV07IHYgPSByeDEgKiBxWzBdICsgcnkxICogcVsx
XTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTFdOwotICAg
ICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIChub2lzZVkuZnJhY3Rpb24g
LSAxKSAqIHFbMV07Ci0gICAgICAgIC8vIGIgPSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxv
YXQgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwotCi0gICAgICAgIC8vIHJldHVy
biBsZXJwKHN5LCBhLCBiKTsKLSAgICAgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ks
IGEsIGIpOwotICAgIH07Ci0KLSAgICByZXR1cm4gewotICAgICAgICBub2lzZUZvckNoYW5uZWwo
MCksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgxKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVs
KDIpLAotICAgICAgICBub2lzZUZvckNoYW5uZWwoMykKLSAgICB9OwotfQotCi0vLyBodHRwczov
L3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50IGRlc2Ny
aWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50cy4KLS8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4oU1JHQkE8ZmxvYXQ+KSB0byBn
ZXQgdGhlIHNhbWUgYmVoYXZpb3IuCi1zdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykKLXsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6
OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1
KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+
KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8
dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAy
NTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRD
b21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fbnVtT2N0YXZlcywgbnVtT2N0YXZlcykgIT0gbV9udW1PY3RhdmVzOwogfQogCi1D
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxl
bmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNo
RGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wgRkVU
dXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNlZWQpCiB7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQ7Ci0gICAgRmxvYXRQb2ludCBub2lzZVZl
Y3Rvcihwb2ludC54KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAq
IHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WSk7Ci0gICAgZmxvYXQgcmF0aW8gPSAxOwotICAg
IGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsK
LSAgICAgICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAg
ICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRh
LCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBz
dGl0Y2hEYXRhLCBub2lzZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKLQotICAgICAgICBub2lzZVZl
Y3Rvci5zZXRYKG5vaXNlVmVjdG9yLngoKSAqIDIpOwotICAgICAgICBub2lzZVZlY3Rvci5zZXRZ
KG5vaXNlVmVjdG9yLnkoKSAqIDIpOwotICAgICAgICByYXRpbyAqPSAyOwotCi0gICAgICAgIGlm
IChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4g
U3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAot
ICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0
aW5nIGl0IG9uY2UuCi0gICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Ci0gICAgICAg
ICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5v
aXNlOwotICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKLSAgICAgICAgICAgIHN0
aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1
KSAvIDIgYnkgZnJhY3RhbE5vaXNlCi0gICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlw
ZTo6RnJhY3RhbE5vaXNlKQotICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKLQotICAgIHJldHVybiB0b0ludEJh
c2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CisgICAgcmV0dXJu
IHN0ZDo6ZXhjaGFuZ2UobV9zZWVkLCBzZWVkKSAhPSBtX3NlZWQ7CiB9CiAKLXZvaWQgRkVUdXJi
dWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkgY29uc3QKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhi
b29sIHN0aXRjaFRpbGVzKQogewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIElu
dFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBmaWx0ZXJSZWdp
b24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRQb2ludCBwb2ludCgw
LCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKLSAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5l
bCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkuaW52
ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgIGZvciAoaW50IHkgPSBz
dGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAx
KTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBw
b2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBv
aW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQb2ludChwb2ludCk7Ci0gICAgICAgICAgICBhdXRv
IHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldFJhbmdl
KHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7Ci0gICAg
ICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
cmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zdGl0Y2hUaWxlcywgc3RpdGNoVGlsZXMpICE9IG1fc3Rp
dGNoVGlsZXM7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxS
ZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQorRmxvYXRSZWN0IEZFVHVyYnVsZW5jZTo6ZHJh
d2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5KSBjb25zdAogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbigq
cGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1l
dGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsK
KyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7CiB9CiAKLXZv
aWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0
b3ImLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1
ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5h
dGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRT
aXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIHJlc3VsdFNp
emUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZElu
dFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKLQotICAgIGZsb2F0IGJh
c2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5
WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0
ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLQot
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1
ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKLQot
ICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgpOwotICAgIGlmIChhcmVhLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGhlaWdodCA9IHJlc3VsdFNpemUu
aGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKLSAg
ICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEg
LyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8RmlsbFJlZ2lv
blBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVn
aW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBw
YXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgYXV0byBudW1Kb2JzID0gcGFyYWxsZWxKb2JzLm51bWJl
ck9mSm9icygpOwotICAgICAgICBpZiAobnVtSm9icyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNw
bGl0IHRoZSBqb2IgaW50byAic3RlcFkiLXNpemVkIGpvYnMsIGRpc3RyaWJ1dGluZyB0aGUgZXh0
cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAiam9ic1dpdGhFeHRyYSIgam9icy4KLSAgICAgICAgICAg
IHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0IC8gbnVtSm9iczsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQgJSBudW1Kb2JzOwotICAgICAgICAgICAgdW5zaWduZWQg
c3RhcnRZID0gMDsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpv
YnM7ICsraSkgewotICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMg
PSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0
ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0
aW9uUGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBh
aW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERh
dGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKLQotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGpvYkhlaWdodCA9IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSAr
IDEgOiBzdGVwWTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkg
KyBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc3RhcnRZICs9IGpvYkhlaWdodDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRw
dXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0g
ICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9v
bSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBm
aWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRh
LCAwLCBoZWlnaHQpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyB9LCBudWxs
cHRyKTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IFR1cmJ1bGVuY2VUeXBlIHR5cGUpCkBAIC00NzYsMTAgKzEwNSw5IEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQogICAg
IHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNlOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlVHVyYnVsZW5jZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiB0eXBlPVwi
IiA8PCB0eXBlKCkgPDwgIlwiICIKICAgICAgICA8PCAiYmFzZUZyZXF1ZW5jeT1cIiIgPDwgYmFz
ZUZyZXF1ZW5jeVgoKSA8PCAiLCAiIDw8IGJhc2VGcmVxdWVuY3lZKCkgPDwgIlwiICIKICAgICAg
ICA8PCAic2VlZD1cIiIgPDwgc2VlZCgpIDw8ICJcIiAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0ZDUz
NmIzN2E4MGFhZGY5MTFlYmZjZTg5Nzc0Y2QzY2NlY2I1Y2ZiLi44ZjcxMmZlZTUzYmMwYTY2MjIy
ZGNkZDVlMDQwYjcwYzMyZDU2ZDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKQEAgLTQsNyArNCw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw5ICsyNCw3IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzgsNyArMzYsNyBAQCBlbnVtIGNsYXNzIFR1cmJ1bGVuY2VUeXBlIHsKIAogY2xhc3MgRkVU
dXJidWxlbmNlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShGaWx0ZXImLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZs
b2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKyAgICBzdGF0aWMgUmVmPEZFVHVyYnVsZW5jZT4gY3Jl
YXRlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAog
ICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBi
b29sIHNldFR5cGUoVHVyYnVsZW5jZVR5cGUpOwpAQCAtNTksNjggKzU3LDE3IEBAIHB1YmxpYzoK
ICAgICBib29sIHNldFN0aXRjaFRpbGVzKGJvb2wpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBj
b25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2Nr
TWFzayA9IHNfYmxvY2tTaXplIC0gMTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFs
UmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3Ig
cGFyYWxsZWwgam9icy4KLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWlu
dGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAg
OiBzZWVkKHBhaW50aW5nU2VlZCkKLSAgICAgICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1Np
emUpCi0gICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAg
ICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIg
KiBzX2Jsb2NrU2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9j
a1NpemUgKyAyXVsyXTsKLSAgICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9h
dCBiYXNlRnJlcXVlbmN5WDsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAg
ICAgaW5saW5lIGxvbmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRh
IHsKLSAgICAgICAgU3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGgg
eyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAg
ICAgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAg
IGludCBoZWlnaHQgeyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2Jz
OwotCi0gICAgc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxl
bmNlKiBmaWx0ZXI7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwotICAg
ICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICAgICAgU3RpdGNoRGF0YSBzdGl0
Y2hEYXRhOwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICB9Owot
Ci0gICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyop
OwotCi0gICAgRkVUdXJidWxlbmNlKEZpbHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxv
YXQsIGludCwgZmxvYXQsIGJvb2wpOworICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZl
cywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KIAotICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwotICAgIFN0aXRjaERhdGEg
Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgs
IGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNh
bGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRj
aERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZpbGxSZWdpb24oVWlu
dDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkgY29uc3Q7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRw
dXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Up
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lk
Kik7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKICAgICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lYOwpAQCAt
MTMxLDQgKzc4LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjMyMmM4NjA4NGQxNWYyNDA5NWU0OTg1NGZmZDkzZjcwNTk5YWYwMWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlci5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmls
dGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyOjpGaWx0ZXIoUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlLCBUeXBlIHR5cGUpCisgICAgOiBtX3JlbmRlcmluZ01vZGUocmVu
ZGVyaW5nTW9kZSkKKyAgICAsIG1fdHlwZSh0eXBlKQoreworfQorCitzdGQ6OnR1cGxlPFJlZlB0
cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gRmlsdGVyOjphcHBseShJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkgY29u
c3QKK3sKKyAgICBGaWx0ZXJSZXN1bHRWZWN0b3Igc3RhY2s7CisgICAgRmlsdGVyT3V0cHV0IG91
dHB1dChXVEZNb3ZlKGdlb21ldHJ5KSwgbV9yZW5kZXJpbmdNb2RlKTsKKworICAgIGF1dG8gcmVz
dWx0ID0gYXBwbHkob3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2UpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQVNTRVJUKHN0YWNrLmlzRW1wdHkoKSk7Cisg
ICAgcmVzdWx0LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOworICAgIHJldHVybiB7IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKSwgcmVzdWx0LT5hYnNv
bHV0ZURyYXdpbmdSZWN0KCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXgg
YTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEwYmMxZi4uYjQ0MWY2ZTgxZDMwNjk2
MDc2YWZjMGNmNmIxY2EzZTMyZmE1OWViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIwLDU5ICsyMSw0MiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0
ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmls
dGVyRnVuY3Rpb24geworICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9uOjphcHBseTsKIAotY2xhc3Mg
RmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVy
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNj
YWxlID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3Jt
KQotICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmly
dHVhbCB+RmlsdGVyKCkgPSBkZWZhdWx0OworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
eyBDU1MsIFNWRyB9OwogCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZm
ZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2Up
OyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFn
ZS5nZXQoKTsgfQotCi0gICAgRmxvYXRTaXplIGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICB2b2lkIHNldEZpbHRlclJlc29sdXRpb24o
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7IG1fZmlsdGVyUmVzb2x1dGlvbiA9
IGZpbHRlclJlc29sdXRpb247IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KIAotICAgIGZsb2F0IGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1
cm4gbV9maWx0ZXJTY2FsZTsgfQotICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUoZmxvYXQgc2NhbGUp
IHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxlOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp0dXBs
ZTxSZWZQdHI8SW1hZ2VCdWZmZXI+LCBGbG9hdFJlY3Q+IGFwcGx5KEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKSBjb25zdDsKIAotICAg
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX2Fic29sdXRlVHJhbnNmb3JtOyB9Citwcm90ZWN0ZWQ6CisgICAgRmlsdGVyKFJlbmRlcmlu
Z01vZGUsIFR5cGUpOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdN
b2RlOyB9CisgICAgdmlydHVhbCBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZp
bHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qg
PSAwOwogCi0gICAgdmlydHVhbCBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIFR5cGUgbV90eXBl
OworfTsKIAotICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihG
bG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbjsg
fQotICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCA9IDA7Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIo
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVz
b2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQotICAgIHsKLSAgICB9CituYW1lc3BhY2UgV1RGIHsK
IAotcHJpdmF0ZToKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7Ci0gICAg
RmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNv
bHV0ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKLSAgICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9
OwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXI6OlR5cGU+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXI6
OlR5cGUsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlcjo6VHlwZTo6Q1NTLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXI6OlR5cGU6OlNWRworICAgID47CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRm
YzViYmNhNTFjMzQ4ZWM3ZjYzZTRjYzkyN2RiMTA4Li5mY2E4NDZkZjE1OGUzZTZhOTNjMGQwNmQ1
YjNhMzliYzNkZjU5MDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNCw2NjAgKzI0LDM3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRp
bGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25l
b24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0
ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlciYg
ZmlsdGVyLCBUeXBlIHR5cGUpCi0gICAgOiBtX2ZpbHRlcihmaWx0ZXIpCi0gICAgLCBtX2ZpbHRl
ckVmZmVjdENsYXNzVHlwZSh0eXBlKQotewotfQotCi1GaWx0ZXJFZmZlY3Q6On5GaWx0ZXJFZmZl
Y3QoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpCi17Ci0gICAgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKLSAgICBm
b3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQotICAgICAgICBtX2Fic29sdXRlUGFp
bnRSZWN0LnVuaXRlKGVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgY2xpcEFic29s
dXRlUGFpbnRSZWN0KCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQYWlu
dFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29u
c3QKIHsKLSAgICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1pdGl2ZSBzdWJyZWdpb24s
IHdoaWxlIENTUyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3VuZHMpCi0gICAgICAgIG1f
YWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RS
ZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVuY2xv
c2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
OworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVu
aXRlKGlucHV0LT5kcmF3aW5nUmVjdCgpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4RHJhd2lu
Z1JlY3QoaW5wdXRzLCBkcmF3aW5nUmVjdCk7CiB9CiAKLUZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0
OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50
KSBjb25zdAorRmlsdGVyUmVzdWx0KiBGaWx0ZXJFZmZlY3Q6OmFwcGx5UGxhdGZvcm0oRmlsdGVy
T3V0cHV0JiBvdXRwdXQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0CiB7Ci0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50
ID0gbWFwUG9pbnQodXNlclNwYWNlUG9pbnQsIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uLCBt
X2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uKTsKLSAgICBhYnNvbHV0ZVBvaW50Lm1vdmVCeSgt
bV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gYWJzb2x1dGVQb2lu
dDsKLX0KLQotSW50UmVjdCBGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihjb25zdCBJbnRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAotewotICAgIEludFBvaW50
IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpOwotICAgIGxvY2F0aW9u
Lm1vdmVCeSgtZWZmZWN0UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gSW50UmVjdChsb2Nh
dGlvbiwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotfQotCi1GbG9hdFJlY3QgRmlsdGVy
RWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIEZsb2F0U2l6ZSBzY2Fs
ZTsKLSAgICBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCksIHNjYWxlKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNm
b3JtLnNjYWxlKHNjYWxlKS50cmFuc2xhdGUoLW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24o
KSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybS5tYXBSZWN0KHNyY1JlY3QpOwotfQotCi1GbG9hdFJl
Y3QgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQotewot
ICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNlLCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZm
ZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSByZWN0LgotICAgIEZsb2F0UmVj
dCBzdWJyZWdpb247Ci0gICAgaWYgKHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gaW5w
dXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAgICAgIHN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KDAp
LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kpIHsKLSAgICAgICAgICAg
IGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdpb24gPSBpbnB1dEVmZmVjdChpKS0+ZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgICAgICAgICBzdWJyZWdpb24udW5pdGUo
aW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAg
IHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCk7Ci0KLSAgICAv
LyBBZnRlciBjYWxsaW5nIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBvbiB0aGUg
dGFyZ2V0IGVmZmVjdCwgcmVzZXQgdGhlIHN1YnJlZ2lvbiBhZ2FpbiBmb3IgPGZlVGlsZT4uCi0g
ICAgaWYgKGZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlVGlsZSkKLSAgICAg
ICAgc3VicmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAg
IGF1dG8gYm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXMoKTsKLSAgICBpZiAoaGFzWCgpKQot
ICAgICAgICBzdWJyZWdpb24uc2V0WChib3VuZGFyaWVzLngoKSk7Ci0gICAgaWYgKGhhc1koKSkK
LSAgICAgICAgc3VicmVnaW9uLnNldFkoYm91bmRhcmllcy55KCkpOwotICAgIGlmIChoYXNXaWR0
aCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0V2lkdGgoYm91bmRhcmllcy53aWR0aCgpKTsKLSAg
ICBpZiAoaGFzSGVpZ2h0KCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRIZWlnaHQoYm91bmRhcmll
cy5oZWlnaHQoKSk7Ci0KLSAgICBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9u
KTsKLQotICAgIGF1dG8gYWJzb2x1dGVTdWJyZWdpb24gPSBtX2ZpbHRlci5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLm1hcFJlY3Qoc3VicmVnaW9uKTsKLSAgICBhdXRvIGZpbHRlclJlc29sdXRpb24gPSBt
X2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCk7Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUo
ZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAgLy8gU2F2ZSB0aGlzIGJlZm9yZSBjbGlwcGluZyBzbyB3
ZSBjYW4gdXNlIGl0IHRvIG1hcCBsaWdodGluZyBwb2ludHMgZnJvbSB1c2VyIHNwYWNlIHRvIGJ1
ZmZlciBjb29yZGluYXRlcy4KLSAgICBzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihhYnNv
bHV0ZVN1YnJlZ2lvbik7Ci0KLSAgICAvLyBDbGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhl
IGZpbHRlciByZWdpb24uCi0gICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IG1f
ZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNj
YWxlKGZpbHRlclJlc29sdXRpb24pOwotICAgIGFic29sdXRlU3VicmVnaW9uLmludGVyc2VjdChh
YnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbik7Ci0KLSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29s
dXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4gc3VicmVnaW9uOwotfQotCi1GaWx0ZXJFZmZlY3Qq
IEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdAotewotICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG51bWJlciA8IG1faW5wdXRFZmZlY3Rz
LnNpemUoKSk7Ci0gICAgcmV0dXJuIG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7Ci19
Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb2xsZWN0RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3QqZWZm
ZWN0LCBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQotewotICAgIGFs
bEVmZmVjdHMuYWRkKGVmZmVjdCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVtYmVy
T2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkpOwot
ICAgICAgICBjb2xsZWN0RWZmZWN0cyhpbiwgYWxsRWZmZWN0cyk7Ci0gICAgfQotICAgIHJldHVy
biBhbGxFZmZlY3RzLnNpemUoKTsKLX0KLQotdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51
bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRlckVm
ZmVjdCo+IGFsbEVmZmVjdHM7Ci0gICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFsbEVm
ZmVjdHMpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6YXBwbHkoKQotewotICAgIGlmIChoYXNS
ZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZm
ZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCk7Ci0g
ICAgICAgIGluLT5hcHBseSgpOwotICAgICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBDb252ZXJ0IGlucHV0IHJlc3VsdHMgdG8gdGhl
IGN1cnJlbnQgZWZmZWN0J3MgY29sb3Igc3BhY2UuCi0gICAgICAgIHRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UoaW4sIGkpOwotICAgIH0KLQotICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCk7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwg
ZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZl
Y3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNs
aXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAg
YWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZm
ZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmls
dGVyLmZpbHRlclJlc29sdXRpb24oKSk7CisgICAgYXV0byBkcmF3aW5nUmVjdCA9IHRoaXMtPmRy
YXdpbmdSZWN0KGlucHV0cywgb3V0cHV0Lmdlb21ldHJ5KCkpOwogCi0gICAgaWYgKG1fYWJzb2x1
dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyht
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChy
ZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29y
cmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7Ci0gICAgfQotICAgIAotICAgIC8vIEFkZCBwbGF0
Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCi0g
ICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3Jj
ZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpCi17Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHBy
ZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBw
aXhlbHMuCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0g
ICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOwotCi0gICAgLy8g
V2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0g
ICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1
aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNm
KTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkg
NjQuCi0gICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBp
eGVsRGF0YSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNp
eHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBz
aXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0
ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZt
aW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAg
ICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAg
cGl4ZWxEYXRhICs9IDY0OwotICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwp
OwotCi0gICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhl
bEFycmF5TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
aW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBv
dmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9u
ZW50cyBpZiBuZWNlc3NhcnkKLSAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAg
ICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEg
PSAqKHBpeGVsRGF0YSArIDMpOwotICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBh
bHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAg
ICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwot
ICAgICAgICB9Ci0gICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhl
bERhdGE7Ci0gICAgfQotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQotewot
ICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBzdGQ6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1
cnNpdmUoKQotewotICAgIC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhl
IGN1cnJlbnQgZWZmZWN0IGhhcwotICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBl
ZmZlY3QgaXMgaW4gYW4gZXJyb25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAg
ICAgICAgY2xlYXJSZXN1bHQoKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0
cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwot
fQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwg
ZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhp
c3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOwotCi0gICAgaWYgKCFoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCk7Ci0KLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5n
TW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVs
Rm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
UmVzdWx0LmdldCgpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVj
dDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVk
U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRP
dmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAg
ICBhdXRvIHJlc3VsdCA9IG91dHB1dC5jcmVhdGVGaWx0ZXJSZXN1bHQoZHJhd2luZ1JlY3QsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJh
eSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgq
cGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19
Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUo
KSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6
ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
YXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7
Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJy
YXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi12b2lk
IEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0
LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRT
aXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUuc2Nh
bGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0
aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkg
dGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgp
IDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNj
YWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1z
ZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAv
LyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNv
dXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFko
KSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNj
YWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJu
OwogCi0gICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAw
OwotICAgIGlmICh4T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAg
ICAgICB4T3JpZ2luID0gMDsKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBpZiAob3V0cHV0LnJl
bmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgeworICAgICAgICBp
ZiAoYXBwbHlDb3JlSW1hZ2UoaW5wdXRzLCBzb3VyY2VJbWFnZSwgKnJlc3VsdCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2Fs
ZWRSZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQot
ICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdp
biA9IHNjYWxlZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4g
PCAwKSB7Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwot
ICAgIH0KLSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4g
c2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXpl
LmhlaWdodCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKLSAgICBp
bnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50
IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OwotICAgIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2Nh
bGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAgY29uc3QgdWludDhfdCogc291cmNl
UGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRo
KCkpICsgeE9yaWdpbikgKiA0OwotCi0gICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAg
ICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNl
UGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsreU9yaWdpbjsKLSAgICB9Ci19Ci0K
LXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6
ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRl
cyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAg
IHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNp
emUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9C
dWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVz
dC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5
dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9u
LmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29t
cG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VD
b21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCog
ZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAo
c291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBv
bmVudFszXTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxp
bnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBh
bHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2Fz
dDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7
Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0K
LXN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRT
aXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5
dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0g
ICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0
U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdl
X0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBk
ZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93
Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRp
b24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291
cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS52YWx1ZSgpOwotICAgIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOwotICAgIHdoaWxl
IChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29t
cG9uZW50WzNdOwotICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1
IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19j
YXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFsyXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzBdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzFdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKLSAgICAg
ICAgfQotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBz
b3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsK
LSAgICB9Ci0jZW5kaWYKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZm
ZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpCi17Ci0g
ICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRvIHBlcmZvcm0gdGhlIGNvbG9yIHNw
YWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNhbiBkbyBpdCBkaXJlY3RseS4KLQot
ICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUo
KSk7Ci0gICAgZGVzdGluYXRpb25SZWN0LnNjYWxlKDEgLyBtX2ZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
ZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRv
IHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVy
LmZpbHRlclNjYWxlKCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4
KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBi
dWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAg
IHJldHVybiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwg
KmJ1ZmZlciwgZGVzdGluYXRpb25SZWN0LCBwaXhlbEJ1ZmZlci5mb3JtYXQoKS5hbHBoYUZvcm1h
dCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFy
Z2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEFscGhhRm9ybWF0KQotewotICAgIC8v
IEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUgZGlyZWN0bHkgdXNpbmcgUGl4ZWxCdWZmZXJD
b252ZXJzaW9uLgotCi0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNs
YW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKLQotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3
aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xv
ciBzcGFjZSBjb252ZXJzaW9uCi0gICAgYXV0byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVy
LmZpbHRlclNjYWxlKCksIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0g
ICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRy
YXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZm
ZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIAot
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IG91dHB1dEFscGhhRm9ybWF0LCBQaXhlbEZv
cm1hdDo6UkdCQTgsIHRhcmdldENvbG9yU3BhY2UgfTsKLSAgICByZXR1cm4gY29udmVydGVkQnVm
ZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KQotewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVy
UmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxC
dWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1h
Z2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkg
fSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEo
KSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlD
b252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29u
dmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBz
YXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZl
cnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAg
aWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFn
ZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVj
dCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhh
c1Jlc3VsdCgpKTsKLSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20g
dGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAg
ICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29s
b3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rl
c3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xv
clNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1
ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7
Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1
dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBp
bnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29s
b3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBp
bnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5n
QWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlv
biwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8
PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAg
Ly8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhl
bEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAg
ICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNv
bG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNT
RVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENv
bG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAg
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0g
ICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlD
cmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5
UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGlu
YXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3Bh
Y2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0K
LQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQot
ewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgpLCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAg
ICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVz
dWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZl
cjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VC
dWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFj
ZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVy
RWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgp
LCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAg
QVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNp
emUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAg
IExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQg
dHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7
Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwot
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsK
LSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVz
dWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1i
b29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0
aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgot
ICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Ig
c3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVy
IGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JT
cGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLSNl
bHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVk
ZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgZGVzdGluYXRp
b25Db2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNw
YWNlIGFkanVzdG1lbnRzIGludGVybmFsbHkuCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9u
Q29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIGlmICghaGFzUmVzdWx0KCkgfHwgZGVzdGluYXRpb25D
b2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdl
QnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3Jt
IHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVm
ZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2Up
OwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0g
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKICNlbmRpZgotfQogCi1UZXh0U3Ry
ZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBkdW1wIHRoZSBzdWJSZWdpb25zIG9mIHRoZSBmaWx0ZXIgcHJpbWl0
aXZlcyBoZXJlIGxhdGVyLiBUaGlzIGlzbid0Ci0gICAgLy8gcG9zc2libGUgYXQgdGhlIG1vbWVu
dCwgYmVjYXVzZSB3ZSBuZWVkIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zIGZyb20gdGhlIHRh
cmdldCBvYmplY3QuCi0gICAgCi0gICAgaWYgKHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNl
bnRhdGlvblR5cGU6OkRlYnVnZ2luZykgewotICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29w
ZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEgaW1hZ2Ui
LCBtX2FscGhhSW1hZ2UpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm9wZXJhdGluZyBjb2xv
cnNwYWNlIiwgbV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJyZXN1bHQgY29sb3JzcGFjZSIsIG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgIHRzIDw8
ICJcbiIgPDwgaW5kZW50OwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19CisgICAgaWYgKGFwcGx5
U29mdHdhcmUoaW5wdXRzLCBzb3VyY2VJbWFnZSwgKnJlc3VsdCkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQubGVha1JlZigpOwogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlcikKLXsKLSAgICAvLyBVc2UgYSBuZXcgc3RyZWFt
IGJlY2F1c2Ugd2Ugd2FudCBtdWx0aWxpbmUgbW9kZSBmb3IgbG9nZ2luZyBmaWx0ZXJzLgotICAg
IFRleHRTdHJlYW0gZmlsdGVyU3RyZWFtOwotICAgIGZpbHRlci5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKGZpbHRlclN0cmVhbSwgRmlsdGVyRWZmZWN0OjpSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVn
Z2luZyk7Ci0gICAgCi0gICAgcmV0dXJuIHRzIDw8IGZpbHRlclN0cmVhbS5yZWxlYXNlKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCmluZGV4IGJmYTg3N2NhYTNlNWY0MjExZjczOWMxYmUzNzY3MDdkZjZlY2QyYTYuLmZiNWJl
MWE5NDg1YmEwNWRiYzYwNzAwOGNiZmY4NTI0NDQ1NmQyNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAt
MjIsMzggKzIyLDE0IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0
RXh0ZW50LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07
Ci19CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlcjsKLWNsYXNzIEZpbHRlckVm
ZmVjdDsKLWNsYXNzIEltYWdlQnVmZmVyOwotCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVy
RWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwotCi1lbnVtIEZpbHRlckVmZmVjdFR5cGUgewot
ICAgIEZpbHRlckVmZmVjdFR5cGVVbmtub3duLAotICAgIEZpbHRlckVmZmVjdFR5cGVJbWFnZSwK
LSAgICBGaWx0ZXJFZmZlY3RUeXBlVGlsZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5w
dXQKLX07CitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKIAotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVi
bGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJs
aWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgogICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4
X3QgewogICAgICAgICBCbGVuZCwKQEAgLTY3LDcgKzQzLDYgQEAgcHVibGljOgogICAgICAgICBG
bG9vZCwKICAgICAgICAgR2F1c3NpYW5CbHVyLAogICAgICAgICBJbWFnZSwKLSAgICAgICAgTGln
aHRpbmcsCiAgICAgICAgIE1lcmdlLAogICAgICAgICBNb3JwaG9sb2d5LAogICAgICAgICBPZmZz
ZXQsCkBAIC03NywxODIgKzUyLDIyIEBAIHB1YmxpYzoKICAgICAgICAgU291cmNlQWxwaGEsCiAg
ICAgICAgIFNvdXJjZUdyYXBoaWMKICAgICB9OwotICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdCgp
OwotCi0gICAgdm9pZCBjbGVhclJlc3VsdCgpOwotICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJz
aXZlKCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwg
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50
UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9w
dCk7Ci0gICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0K
LSAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKLSAgICB1bnNp
Z25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3Rz
LnNpemUoKTsgfQotICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25z
dDsKLSAgICAKLSAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVja3MsIGlmIHRo
ZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBkb25lIGJ5IEZpbHRlckVmZmVjdC4KLSAgICAgICAg
cmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Owot
ICAgIH0KLQotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKLSAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgCi0gICAgLy8gUmVjdXJzZXMgb24gaW5w
dXRzLgotICAgIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsK
LQotICAgIC8vIFNvbGlkIGJsYWNrIGltYWdlIHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVlcy4K
LSAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFJbWFnZTsgfQot
ICAgIHZvaWQgc2V0SXNBbHBoYUltYWdlKGJvb2wgYWxwaGFJbWFnZSkgeyBtX2FscGhhSW1hZ2Ug
PSBhbHBoYUltYWdlOyB9Ci0KLSAgICBJbnRSZWN0IGFic29sdXRlUGFpbnRSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9hYnNvbHV0ZVBhaW50UmVjdDsgfQotICAgIHZvaWQgc2V0QWJzb2x1dGVQYWlu
dFJlY3QoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50
UmVjdCA9IGFic29sdXRlUGFpbnRSZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZm
ZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0
ID0gbWF4RWZmZWN0UmVjdDsgfSAKLQotICAgIHZvaWQgYXBwbHkoKTsKLQotICAgIC8vIENvcnJl
Y3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBm
aWx0ZXIgb3BlcmF0aW9uLgotICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZh
bGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0Lgot
ICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRv
IHBlcmZvcm0gY29ycmVjdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKTsKLQotICAgIHZpcnR1YWwgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBl
KCkgY29uc3QgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVVua25vd247IH0KLQotICAgIHZpcnR1
YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gSW50T3V0c2V0cygpOyB9Ci0K
LSAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2lu
ZyB9OwotICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJlc2VudGF0aW9uVHlw
ZTo6VGVzdE91dHB1dCkgY29uc3Q7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBh
cmUgU1ZHIHNwZWNpZmljIGFuZCB3aWxsIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUuCi0gICAgLy8gU2VlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDU2MTQuCi0gICAgYm9vbCBoYXNYKCkgY29uc3QgeyByZXR1cm4gbV9oYXNYOyB9
Ci0gICAgdm9pZCBzZXRIYXNYKGJvb2wgdmFsdWUpIHsgbV9oYXNYID0gdmFsdWU7IH0KLQotICAg
IGJvb2wgaGFzWSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWTsgfQotICAgIHZvaWQgc2V0SGFzWShi
b29sIHZhbHVlKSB7IG1faGFzWSA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1dpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNXaWR0aDsgfQotICAgIHZvaWQgc2V0SGFzV2lkdGgoYm9vbCB2YWx1
ZSkgeyBtX2hhc1dpZHRoID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNIZWlnaHQ7IH0KLSAgICB2b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVl
KSB7IG1faGFzSGVpZ2h0ID0gdmFsdWU7IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsg
fQotICAgIHZvaWQgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0g
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRh
cmllcygpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQotICAgIHZvaWQgc2V0
RWZmZWN0Qm91bmRhcmllcyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdEJvdW5kYXJpZXMpIHsgbV9l
ZmZlY3RCb3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllczsgfQotICAgIAotICAgIHZvaWQgc2V0
VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fYWJzb2x1
dGVVbmNsaXBwZWRTdWJyZWdpb24gPSByOyB9Ci0gICAgCi0gICAgRmxvYXRQb2ludCBtYXBQb2lu
dEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50KSBjb25zdDsKLSAgICAKLSAgICBUeXBl
IGZpbHRlckVmZmVjdENsYXNzVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Q2xh
c3NUeXBlOyB9Ci0KLSAgICBGaWx0ZXImIGZpbHRlcigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0g
ICAgY29uc3QgRmlsdGVyJiBmaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcjsgfQotCi0g
ICAgYm9vbCBjbGlwc1RvQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwc1RvQm91bmRzOyB9
Ci0gICAgdm9pZCBzZXRDbGlwc1RvQm91bmRzKGJvb2wgdmFsdWUpIHsgbV9jbGlwc1RvQm91bmRz
ID0gdmFsdWU7IH0KLQotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNl
OyB9Ci0gICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXN1bHRDb2xvclNwYWNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNl
KSB7IG1fcmVzdWx0Q29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkg
eyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9
Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYpOwotICAgIAotICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9h
dHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQotICAgIHsKLSAgICAgICAgVmVjdG9yPGZs
b2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRW
YWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKLSAgICAgICAgcmV0dXJuIG5v
cm1hbGl6ZWRWYWx1ZXM7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KEZp
bHRlciYsIFR5cGUpOwotICAgIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0ID0gMDsKLQotICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLQotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIg
d2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCi0g
ICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFs
cGhhXS4KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMo
KSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAvLyBJZiBhIHByZS1tdWx0aXBsaWVkIGltYWdlLCBj
aGVjayBldmVyeSBwaXhlbCBmb3IgdmFsaWRpdHkgYW5kIGNvcnJlY3QgaWYgbmVjZXNzYXJ5Lgot
ICAgIHZvaWQgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLQotICAgIHZvaWQgY2xp
cEFic29sdXRlUGFpbnRSZWN0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsKLQotICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VCdWZm
ZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZv
aWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYsIFBpeGVsQnVmZmVyJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgSW50
UmVjdCYpOwotICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7Ci0gICAgc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24pOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQ
aXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBQaXhl
bEJ1ZmZlciYpOwogICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRyYXdp
bmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYpIGNvbnN0OwogCi0gICAgRmlsdGVyJiBtX2ZpbHRlcjsKLSAgICBGaWx0ZXJFZmZlY3RW
ZWN0b3IgbV9pbnB1dEVmZmVjdHM7Ci0KLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VC
dWZmZXJSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAg
ICAKLSAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZH
IHRoaXMgaXMgdGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBz
cGFjZS4KLSAgICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmln
Z2VyIHRoYW4gbV9tYXhFZmZlY3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7
Ci0gICAgCi0gICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3Jk
aW5nIHRvIHRoZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMu
Ci0gICAgLy8gVGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uOwotCi0gICAgLy8geCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0
dWFsIFNWR0ZFKkVsZW1lbnQuIElzIG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBv
ZiB0aGUKLSAgICAvLyBmaWx0ZXIgcHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9h
dFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOworICAgIHZpcnR1YWwgYm9vbCBhcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0ID0gMDsKICAgICAKLSAgICAvLyBmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24gbWFwcGVkIHRvIGFic29sdXRlIGNvb3JkaW5hdGVzIGJlZm9yZSBjbGlwcGlu
Zy4KLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbjsKLQotICAgIGJv
b2wgbV9hbHBoYUltYWdlIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzWCB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2hhc1kgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNXaWR0aCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2hhc0hlaWdodCB7IGZhbHNlIH07Ci0KLSAgICAvLyBTaG91bGQgdGhlIGVm
ZmVjdCBjbGlwIHRvIGl0cyBwcmltaXRpdmUgcmVnaW9uLCBvciBleHBhbmQgdG8gdXNlIHRoZSBj
b21iaW5lZCByZWdpb24gb2YgaXRzIGlucHV0cy4KLSAgICBib29sIG1fY2xpcHNUb0JvdW5kcyB7
IHRydWUgfTsKLQotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JH
QikKLSAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgfTsKLSNlbHNlCi0gICAgRGVzdGluYXRp
b25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpIH07CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmlydHVhbCBib29sIGFwcGx5
Q29yZUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVy
UmVzdWx0JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgotICAgIERlc3RpbmF0aW9u
Q29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7CisK
KyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5UGxhdGZvcm0oRmlsdGVyT3V0cHV0JiwgY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Q7
CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZmZWN0Jik7Cit1c2luZyBGaWx0ZXJFZmZlY3RWZWN0
b3IgPSBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+OwordXNpbmcgRmlsdGVyRWZmZWN0c0lucHV0
cyA9IEhhc2hNYXA8UmVmPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYTg1NWNkYjk2MzE3YjgyZGUz
NTY3ZmMzMWU1YjllOWE5ZWM2MDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgot
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgot
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgot
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3RSZW5kZXJlci5oIgotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0jaW5jbHVkZSAiRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gRmlsdGVyRWZmZWN0UmVu
ZGVyZXI6OnRyeUNyZWF0ZShib29sIGFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCwg
RmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQotewotI2lmIFVTRShDT1JFX0lNQUdFKQotICAgIGlm
IChhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKGxhc3RFZmZlY3QpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oYWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKTsKLSAg
ICBVTlVTRURfUEFSQU0obGFzdEVmZmVjdCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotCi19IC8vIG5hbXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTI0NzM2MWY1M2IzYzA5ZWNiNTcx
MzIyYjc1YTc1NzNlOWNjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0q
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICAKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiB0cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7Ci0gICAg
dmlydHVhbCBib29sIGhhc1Jlc3VsdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEltYWdlQnVm
ZmVyKiBvdXRwdXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3Qo
Y29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJl
c3VsdCgpID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0g
ZGVmYXVsdDsKLSAgICAKLXByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0g
ZGVmYXVsdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZl
Y3QmKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmY2ZjFiMzNiYWVkN2RmMDhmMDQ1MmM2YzRhYjRhOTdjNWRjYzMwYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRnVuY3Rpb24uaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVy
UmVwcmVzZW50YXRpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNl
IFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVyT3V0cHV0OworCitjbGFzcyBGaWx0ZXJG
dW5jdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckZ1bmN0aW9uPiB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIElu
dE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQorCisgICAgdmlydHVhbCBG
aWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QgPSAwOworICAgIAorICAgIHZpcnR1
YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uID0gRmlsdGVyUmVwcmVzZW50YXRpb246OlRlc3RPdXRw
dXQpIGNvbnN0ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9t
ZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTMyN2NjMmY0YjNlZjgxNDE3NjU0MWQ5M2NiNjE2MGNkMzc0
ZGY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmls
dGVyR2VvbWV0cnk6OkZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkKKyAgICA6IG1fZmlsdGVyUmVnaW9u
KGZpbHRlclJlZ2lvbikKKyAgICAsIG1fc291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCkK
K3sKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjptYXhEcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0KSBjb25zdAor
eworICAgIHJldHVybiBkcmF3aW5nUmVjdDsKKy8vICAgICAgICBhdXRvIG1heERyYXdpbmdSZWN0
ID0gZHJhd2luZ1JlY3Q7CisvLyAgICAgICAgbWF4RHJhd2luZ1JlY3QuaW50ZXJzZWN0KG1heFBy
aW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpKTsKKy8vICAgICAgICByZXR1cm4gbWF4RHJhd2luZ1Jl
Y3Q7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJHZW9tZXRyeTo6cHJpbWl0aXZlU3VicmVnaW9uKGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdAoreworICAgIGlmIChpbnB1dHMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmlsdGVyUmVnaW9uKCk7CisKKyAgICBGbG9hdFJl
Y3Qgc3VicmVnaW9uOworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIHN1
YnJlZ2lvbi51bml0ZShpbnB1dC0+cHJpbWl0aXZlU3VicmVnaW9uKCkpOworCisgICAgcmV0dXJu
IHN1YnJlZ2lvbjsKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjptYXhQcmltaXRpdmVT
dWJyZWdpb24oY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0Cit7CisgICAg
RmxvYXRSZWN0IHN1YnJlZ2lvbiA9IHByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpOworICAgIHN1
YnJlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyUmVnaW9uKCkpOworICAgIHJldHVybiBzdWJyZWdpb247
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgRmlsdGVyR2VvbWV0cnk6OmVu
Y29kZShFbmNvZGVyJikgY29uc3QKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4g
c3RkOjpvcHRpb25hbDxzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+PiBGaWx0ZXJHZW9t
ZXRyeTo6ZGVjb2RlKERlY29kZXImKQoreworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzMzMzM4OWE2ZmZm
ZDQzMTZiOGFmODUyNDc0YWJiNmMwNGE3OWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeSB7CitwdWJsaWM6CisgICAgRmlsdGVyR2Vv
bWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0KTsKKyAgICB2aXJ0dWFsIH5GaWx0ZXJHZW9tZXRyeSgpID0gZGVmYXVsdDsK
KworICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJl
Z2lvbjsgfQorICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZUltYWdlUmVjdDsgfQorCisgICAgdmlydHVhbCBGbG9hdFJlY3QgcHJpbWl0aXZlU3Vi
cmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEZsb2F0UmVjdCB0cmFuc2Zvcm1Ub0Fic29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpIGNvbnN0IHsgcmV0dXJuIHJlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBtYXhEcmF3aW5nUmVj
dChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0
KSBjb25zdDsKKyAgICBGbG9hdFJlY3QgbWF4UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRl
clJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2Vv
bWV0cnk+PiBkZWNvZGUoRGVjb2RlciYpOworCitwcm90ZWN0ZWQ6CisgICAgRmxvYXRSZWN0IG1f
ZmlsdGVyUmVnaW9uOworICAgIEZsb2F0UmVjdCBtX3NvdXJjZUltYWdlUmVjdDsKK307CisgICAg
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNk
NzdlYTVmMDUxZTg0NWE5MzFlYmFjMmJhZmQ5MWY5YjM2YTZjMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNw
cApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIK
KworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQoc3Rk
Ojp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5LCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUpCisgICAgOiBtX2dlb21ldHJ5KFdURk1vdmUoZ2VvbWV0cnkpKQorICAgICwg
bV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCit7Cit9CisKK1JlZlB0cjxGaWx0ZXJSZXN1
bHQ+IEZpbHRlck91dHB1dDo6Y3JlYXRlRmlsdGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgZHJh
d2luZ1JlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHJldHVy
biBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZSgqbV9nZW9tZXRyeSwgZHJhd2luZ1JlY3QsIG1fcmVuZGVy
aW5nTW9kZSwgMSwgY29sb3JTcGFjZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3V0cHV0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxZThjZmYxNzNiMDRlOTkzOTJhYjI3ZTE0MjJhY2I0YmY1
MjM5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck91dHB1dC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKK2NsYXNzIEZpbHRlclJlc3VsdDsK
K2NsYXNzIEZpbHRlckZ1bmN0aW9uOworCitjbGFzcyBGaWx0ZXJPdXRwdXQgeworcHVibGljOgor
ICAgIHVzaW5nIFJlc3VsdHMgPSBIYXNoTWFwPFJlZjxjb25zdCBGaWx0ZXJGdW5jdGlvbj4sIFJl
ZjxGaWx0ZXJSZXN1bHQ+PjsKKworICAgIEZpbHRlck91dHB1dChzdGQ6OnVuaXF1ZV9wdHI8Rmls
dGVyR2VvbWV0cnk+JiYsIFJlbmRlcmluZ01vZGUpOworCisgICAgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KCkgeyByZXR1cm4gKm1fZ2VvbWV0cnk7IH0KKyAgICBSZXN1bHRzJiByZXN1bHRzKCkg
eyByZXR1cm4gbV9yZXN1bHRzOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisKKyAgICBSZWZQdHI8RmlsdGVyUmVz
dWx0PiBjcmVhdGVGaWx0ZXJSZXN1bHQoY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgRGVz
dGluYXRpb25Db2xvclNwYWNlKTsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmls
dGVyR2VvbWV0cnk+IG1fZ2VvbWV0cnk7CisgICAgUmVzdWx0cyBtX3Jlc3VsdHM7CisgICAgUmVu
ZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJSZWZlcmVuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDNhNWFiNzRjMDk0MGVmOGFhZTJmOWNl
ZTliNzVlMmYxZDA2NWFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZWZlcmVuY2UuaApAQCAtMCwwICsxLDM0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlcjsKKwordXNpbmcgRmlsdGVy
UmVmZXJlbmNlID0gUmVmPEZpbHRlcj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVw
cmVzZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyUmVwcmVzZW50YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZGJmZjdkODA0N2NlZjllZjYzYTM2
ZWNjMzVlNWU5YjIwMTFjZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oCkBAIC0wLDAgKzEs
MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEZpbHRlclJlcHJl
c2VudGF0aW9uIDogdWludDhfdCB7CisgICAgVGVzdE91dHB1dCwKKyAgICBEZWJ1Z2dpbmcKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
ZWRlMjJlZGI5NzViMGFiMDBmZTlhZDYzMDQ4N2Q4ZjZkNGUyZTg5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQu
Y3BwCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQu
aCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0
U29mdHdhcmUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFH
RSkKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIKKyNlbmRpZgorCisjaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2luY2x1ZGUgPGFybV9uZW9uLmg+CisjZW5kaWYKKwor
I2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEZpbHRlclJlc3VsdD4gRmls
dGVyUmVzdWx0OjpjcmVhdGUoY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBG
bG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7Cisg
ICAgaWYgKGRyYXdpbmdSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhnZW9tZXRyeS50cmFu
c2Zvcm1Ub0Fic29sdXRlUmVjdChkcmF3aW5nUmVjdCkuc2l6ZSgpKSk7CisjaWYgVVNFKENPUkVf
SU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRlclJlc3VsdENvcmVJbWFnZShn
ZW9tZXRyeSwgZHJhd2luZ1JlY3QsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSkpOworI2VuZGlmCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVyUmVzdWx0
U29mdHdhcmUoZ2VvbWV0cnksIGRyYXdpbmdSZWN0LCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UpKTsKK30KKworRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQoY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVz
dGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2dlb21ldHJ5KGdlb21ldHJ5
KQorICAgICwgbV9kcmF3aW5nUmVjdChkcmF3aW5nUmVjdCkKKyAgICAsIG1fcmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxl
KQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9CisKK0Zsb2F0UmVjdCBGaWx0
ZXJSZXN1bHQ6OmFic29sdXRlRHJhd2luZ1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2dl
b21ldHJ5LnRyYW5zZm9ybVRvQWJzb2x1dGVSZWN0KG1fZHJhd2luZ1JlY3QpOworfQorCitzdGF0
aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlu
cHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBp
bnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMu
d2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhl
aWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsK
KyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRh
KCkpOworCisgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVu
dCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9u
ZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBk
ZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChz
b3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9u
ZW50WzNdOworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFs
cGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0
PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsK
KyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKwor
c3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNp
emUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0
ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAg
ICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRT
aXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRl
c3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dC
eXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlv
bi5kYXRhKCkpOworCisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywg
JmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNl
Q29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3Vy
Y2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdo
aWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNl
Q29tcG9uZW50WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICog
MjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRp
Y19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBv
bmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAg
ICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAg
ICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0g
NDsKKyAgICB9CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRl
clJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhh
Rm9ybWF0KQoreworICAgIHJldHVybiBhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQgPyBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyIDogbV9w
cmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9CisKK1BpeGVsQnVmZmVyKiBGaWx0ZXJSZXN1bHQ6
OnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAg
YXV0byYgcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KTsKKyAg
ICBpZiAocGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsK
KworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1h
dDo6UkdCQTgsIG1fY29sb3JTcGFjZSB9OworICAgIGF1dG8gbG9naWNhbFNpemUgPSBhYnNvbHV0
ZURyYXdpbmdSZWN0KCkuc2l6ZSgpOworCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFn
ZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+
Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIEludFNpemUobG9naWNhbFNpemUp
IH0pOworICAgICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisgICAgCisg
ICAgSW50U2l6ZSBzY2FsZWRTaXplKGxvZ2ljYWxTaXplKTsKKyAgICBBU1NFUlQoIUltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CisgICAgc2NhbGVkU2l6ZS5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBwaXhlbEJ1ZmZlciA9IFBpeGVsQnVmZmVyOjp0
cnlDcmVhdGUoZm9ybWF0LCBzY2FsZWRTaXplKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgIGNvcHlQcmVtdWx0
aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXpl
KTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKHBp
eGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkt
PmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisKKyAgICByZXR1cm4g
JnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmls
dGVyUmVzdWx0OjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9y
bWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkp
OworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUp
KTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGF1dG8g
Y2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAg
IGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIAorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb3B5UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVy
LCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIHBpeGVsQnVmZmVy
OworfQorCitib29sIEZpbHRlclJlc3VsdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VD
b252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNl
KSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMg
d2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNp
b24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNv
bG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAvLyBBTkQgMikgdGhlIGZp
bHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVybiBjb2xvclNwYWNlICYm
IG1fY29sb3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNlCisgICAgLy8gQWRkaXRpb25hbCBj
b2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCisgICAgVU5VU0VE
X1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lk
IEZpbHRlclJlc3VsdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKKyAgICBzY2FsZWRSZWN0
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXpl
KGFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlv
biB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNv
dXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8
fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVz
dGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJs
eSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4K
KyAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAw
IHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAg
IGlmICh4T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4
T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKKyAg
ICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gc2Nh
bGVkUGFpbnRTaXplLndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgp
OworICAgIGludCB5RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlE
ZXN0ID0gLXlPcmlnaW47CisgICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVu
ZCA9IHNjYWxlZFJlY3QubWF4WSgpOworICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpKQorICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOworCisgICAg
aW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2Fu
bGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0g
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4
ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSAr
IHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0
YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0
OworCisgICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5h
dGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwg
Kz0gZGVzdGluYXRpb25TY2FubGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2Nh
bmxpbmU7CisgICAgICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEZpbHRlclJlc3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25z
dCBJbnRSZWN0JiByZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QK
K3sKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
cmVjdC5zaXplKCkpOworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3Jy
ZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252
ZXJzaW9uCisgICAgYXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghY29udmVy
dGVkSW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gQ29s
b3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20g
b25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCisgICAgY29udmVydGVkSW1hZ2VCdWZmZXItPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9y
U3BhY2UgfTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVy
KGZvcm1hdCwgcmVjdCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlclJl
c3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxC
dWZmZXIuc2l6ZSgpKTsKKyAgICByZWN0LnNjYWxlKDEgLyBtX3Jlc29sdXRpb25TY2FsZSk7Cisg
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Qu
c2l6ZSgpKTsKKworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWlu
ZyBQaXhlbEJ1ZmZlcgorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25T
Y2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+
cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0
ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNl
KTsKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBjb2xvclNwYWNlKQoreworICAgIGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4
aXN0cyhhbHBoYUZvcm1hdCkgPyAmcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFs
dWUoKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChy
ZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAg
ICAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVy
LgorICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3Rz
KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJ
bnRTaXplKGFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkpIH07CisgICAgICAgICAgICAgICAg
aWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAg
ICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRl
c3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBwaXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVy
KGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0g
Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9y
U3BhY2UpKQorICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXIt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY29weUltYWdlQnl0ZXMocGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNy
Y1JlY3QpOworfQorCit2b2lkIEZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcigpCit7CisgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3Vs
dHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFt
X3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhD
bGFtcGVkQXJyYXkmIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0
YSgpOworICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGlu
dCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11
c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFT
U0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJ
TlNJQ1MpCisgICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhf
dCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7Cisg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0Lgor
ICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERh
dGEpOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVu
UGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVl
blBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBp
eGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91
OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAg
ICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVs
RGF0YSArPSA2NDsKKyAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKwor
ICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJh
eUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBu
dW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBl
YWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMg
aWYgbmVjZXNzYXJ5CisgICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8g
QWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihw
aXhlbERhdGEgKyAzKTsKKyAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEs
IGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAg
ICAgICAgICAgKnBpeGVsRGF0YSA9IGE7CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRh
OworICAgIH0KK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8g
Q0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNF
RF9QQVJBTShjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9jb2xv
clNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRo
aXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRp
bmcKKyAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59
bXVsdGlwbGllZCBhcnJheXMuCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFn
ZUJ1ZmZlcigpKQorICAgICAgICBpbWFnZUJ1ZmZlci0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX2Nv
bG9yU3BhY2UsIGNvbG9yU3BhY2UpOworCisgICAgbV9jb2xvclNwYWNlID0gY29sb3JTcGFjZTsK
KyAgICBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworICAgIG1f
cHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworI2VuZGlmCit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1YjlkYTkxNTIz
YTY4OGM0MmY2M2QyNWRhN2MzOGM5Y2UwMzMzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCkBAIC0wLDAg
KzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVsQnVm
ZmVyOworCitjbGFzcyBGaWx0ZXJSZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJSZXN1
bHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlclJlc3VsdD4gY3JlYXRlKGNv
bnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgUmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwor
CisgICAgdmlydHVhbCB+RmlsdGVyUmVzdWx0KCkgPSBkZWZhdWx0OworICAgIAorICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ1JlY3Q7IH0KKyAgICBG
bG9hdFJlY3QgYWJzb2x1dGVEcmF3aW5nUmVjdCgpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IHBy
aW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9
CisgICAgCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9yZW5kZXJpbmdNb2RlOyB9CisgICAgCisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KKyAgICB2b2lkIHNldElzQWxwaGFJbWFnZShib29sIGFs
cGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFnZTsgfQorCisgICAgdmlydHVhbCBS
ZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgPSAwOworICAgIHZpcnR1
YWwgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgPSAwOworCisgICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7
CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwor
CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0
IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51
bGxvcHQpOworICAgIAorICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigp
OworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7
CisKK3Byb3RlY3RlZDoKKyAgICBGaWx0ZXJSZXN1bHQoY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBj
b25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKKyAgICBib29sIHJlcXVpcmVzUGl4
ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4pIGNvbnN0OworICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVy
dGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25z
dCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisKKyAg
ICBGbG9hdFJlY3QgbV9wcmltaXRpdmVTdWJyZWdpb247CisgICAgYm9vbCBtX2FscGhhSW1hZ2Ug
eyBmYWxzZSB9OworICAgIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBtX2dlb21ldHJ5OworCisgICAg
RmxvYXRSZWN0IG1fZHJhd2luZ1JlY3Q7CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01v
ZGU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgRGVzdGluYXRpb25Db2xvclNw
YWNlIG1fY29sb3JTcGFjZTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5w
cmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
bV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9OworCit1c2luZyBGaWx0ZXJSZXN1bHRWZWN0
b3IgPSBWZWN0b3I8UmVmPEZpbHRlclJlc3VsdD4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAppbmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2YTc1
MDM4NzkxMjhmNTRiNDRiLi40YmM2YmM3MWM4NWRmYjFhZTM5MWRlYjI0M2RjODE0NTc1ZGIwYzFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM2LDEyICszNiwxMiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0
YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQg
UG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQ
YWludGluZ0RhdGEmKQogewotICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0
Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkp
OwotICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNl
UG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBwZWRa
ID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3Bh
Y2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3Np
dGlvbi55KCkgfSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9i
dWZmZXJQb3NpdGlvbi54KCkpOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJF
ZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54
eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3Vz
ZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2lu
dCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsg
bV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2Vy
U3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVk
Wi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRl
ZExpZ2h0aW5nRGF0YSBQb2ludExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkw
OTBhZDZjZjNhMy4uMWUwNjlmOTI2YTgwM2ZjYzJjMTQ2OTZjZmFlNmIyNTUzNTEwODlkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIw
LDE5ICsyMSwxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNvdXJjZUFscGhh
LmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVJlZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZShGaWx0ZXJFZmZl
Y3QmIHNvdXJjZUVmZmVjdCkKK1JlZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZSgp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoKSk7CiB9CiAKIGNvbnN0IEF0
b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKQEAgLTQxLDM5ICszOSwyMSBAQCBj
b25zdCBBdG9tU3RyaW5nJiBTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpCiAgICAgcmV0dXJuIHNf
ZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQorRmlsdGVyUmVzdWx0KiBTb3VyY2VBbHBoYTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBv
dXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsK
LSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci19Ci0KLXZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAg
ICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0
JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBBU1NFUlQoIXN0
YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBJ
bWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1
dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKIAotICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFn
ZVJlY3QsIENvbG9yOjpibGFjayk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25J
bik7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwog
fQogCi1UZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUFscGhhXVxu
IjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJF
ZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3QuZmls
dGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uo
c291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3RzKCku
YXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4uY2Nk
MWRiZjRmZWVjNTBlNWRhN2Y5OTUxZThhN2IzZGM2NTNhNmIwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTcsOCArMTgsNyBAQAogICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0j
ZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCiAKQEAgLTI2LDIxICsyNiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAg
ICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CisgICAgc3Rh
dGljIFJlZjxTb3VyY2VBbHBoYT4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0
cmluZyYgZWZmZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUFscGhh
KEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQor
ICAgIHVzaW5nIEZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0OwogCiAgICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0Jiwg
RmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25z
dCBvdmVycmlkZTsKKworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBj
b25zdCBvdmVycmlkZTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7CiB9OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNvdXJjZUFscGhh
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IDg4YTM2YTQxMDI2YmQzYTU4NTQ0NzgyMDI3NGMx
MTA3ZDc4MzkyZTkuLjRlMTdkZWZlODQyYjBiZjlhZDJjODExNTcyNTk1ZDYyZTE4MTVhOWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjAsMTggKzIxLDE2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNl
R3JhcGhpYy5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVm
PFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1Jl
ZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKQogewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU291cmNlR3JhcGhpYygpKTsKIH0KIAogY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSgpCkBAIC00MCwyNyArMzksMjAgQEAgY29uc3QgQXRvbVN0cmluZyYg
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCiAgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0K
IAotdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9h
dFJlY3QgU291cmNlR3JhcGhpYzo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRl
ci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBwYWludFJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclJl
c29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsK
LSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwor
ICAgIHJldHVybiBnZW9tZXRyeS5zb3VyY2VJbWFnZVJlY3QoKTsKIH0KIAotdm9pZCBTb3VyY2VH
cmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBTb3VyY2VHcmFw
aGljOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhp
cy0+ZmlsdGVyKCk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQo
eyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFn
ZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlc3VsdEltYWdlLT5j
b250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAg
cmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IH0sIHNvdXJjZUltYWdlKTsKIH0KIAotVGV4
dFN0cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNlR3JhcGhp
Yzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbU291cmNlR3JhcGhpY11cbiI7
CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCAzMGNkNTRmMjQ1M2JiYThhMzc3
NjMyMTMyOGVmMjEwNmI3ZmNhNWJmLi4xMzVjN2MwNzQyNzdjMWM4YWY2MDU3YTljZjk1Mjk0OWIz
NTU1Njk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTE4LDQxICsxOSwzNCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNl
R3JhcGhpY19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2lu
Y2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdy
YXBoaWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRp
YyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8U291
cmNlR3JhcGhpYz4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZm
ZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIFNvdXJjZUdyYXBoaWMoRmlsdGVyJiBmaWx0ZXIp
Ci0gICAgICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6U291cmNlR3JhcGhpYykKLSAg
ICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOwotICAgIH0KKyAgICB1c2luZyBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdDsK
IAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291
cmNlR3JhcGhpYyI7IH0KIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZm
ZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJ
bnB1dDsgfQotfTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRl
clJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKLX0gLy9uYW1lc3BhY2UgV2ViQ29yZQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdl
LCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19CRUdJTihXZWJDb3JlOjpTb3VyY2VHcmFwaGljKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRl
ckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNl
R3JhcGhpYzsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorI2lmIFVTRShDT1JFX0lN
QUdFKQorICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBp
bnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3Zl
cnJpZGU7CisjZW5kaWYKIAorICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7Cit9OwogCi0jZW5kaWYgLy8gU291cmNlR3JhcGhpY19oCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKaW5kZXggNzE2MDdhYjAwZmY5ZDZhNmQwMTY5MWQ5
YmJiODU1M2QxZjM0OGQwMC4uZDFiZWMxMjAyMDZhNTM2ZTEwYjEwYmYyYzExMzBmNGYzNDJiYmEx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
cG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcApAQCAtNDEsMzYgKzQxLDM2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIC8vIGFjY29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNz
aW9uIHRlc3RzCiBzdGF0aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7
CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVm
ZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgU3Bv
dExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFw
UG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0g
ICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3Np
dGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBm
aWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBv
c2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9u
LnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZl
clBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9
IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOwotICAgIHBhaW50aW5n
RGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXplKCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdD
b25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7
Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xk
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1p
dGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAg
ICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAg
ICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29u
ZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBj
b3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRp
bmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50
aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0gICAgLy8gT3B0aW1pemF0aW9uIGZvciBjb21tb24g
c3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAgICBpZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1f
c3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJF
eHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAyOworLy8gICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
bV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBw
b2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBi
eSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJv
bVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFj
ZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZl
clBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisvLwor
Ly8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQg
LSBtX3VzZXJTcGFjZVBvc2l0aW9uOworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rv
ci5ub3JtYWxpemUoKTsKKy8vCisvLyAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKKy8v
ICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsKKy8vICAgICAgICBw
YWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IC1hbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0g
ZWxzZSB7CisvLyAgICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29u
ZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA8IDAuMGYpCisvLyAgICAg
ICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAg
IGlmIChsaW1pdGluZ0NvbmVBbmdsZSA+IDkwLjBmKQorLy8gICAgICAgICAgICBsaW1pdGluZ0Nv
bmVBbmdsZSA9IDkwLjBmOworLy8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQg
PSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKKy8vICAgICAgICBw
YWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQg
LSBhbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0KKy8vCisvLyAgICAvLyBPcHRpbWl6YXRpb24g
Zm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZhbHVlcworLy8gICAgaWYgKCFtX3NwZWN1bGFy
RXhwb25lbnQpCisvLyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOwor
Ly8gICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEuMGYpCisvLyAgICAgICAgcGFp
bnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAxOworLy8gICAgZWxzZSAvLyBJdCBpcyBuZWl0
aGVyIDAuMGYgbm9yIDEuMGYKKy8vICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVu
dCA9IDI7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBTcG90TGlnaHRT
b3VyY2U6OmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdh
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUJsZW5kU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2NjNlZjFhNGU4YjkyNWQ3ZDEyY2Ni
ZDkwOWJkYzAyOTM2MDZjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQmxlbmQuaCIKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmQ6OmFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVy
KiwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMik7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW4y
ID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVm
ZmVyKCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlcjIgPSBpbjIuaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAo
IXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKy8vICAgIEdyYXBoaWNzQ29u
dGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisvLyAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworLy8gICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6
ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKworICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hOWI0OTkwMWU3YTMyZWM4ODVhMDQ2YjRkM2VmMzBjNDgzNmQyMzU3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8
QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitpbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1
ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgZmxv
YXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7Cisg
ICAgZmxvYXQgYSA9IGFscGhhOworCisgICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFs
dWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0
XSAqIDI1NTsKKyAgICBncmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyAr
IHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OworICAg
IGJsdWUgICAgPSB2YWx1ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAq
IGIgKyB2YWx1ZXNbMTNdICogYSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9IHZh
bHVlc1sxNV0gKiByICsgdmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sx
OF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1NTsKK30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRI
dWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxv
YXQqIGNvbXBvbmVudHMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3Jl
ZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisKKyAgICByZWQgICAgID0gciAqIGNvbXBvbmVudHNb
MF0gKyBnICogY29tcG9uZW50c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOworICAgIGdyZWVuICAg
PSByICogY29tcG9uZW50c1szXSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVudHNb
NV07CisgICAgYmx1ZSAgICA9IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNbN10g
KyBiICogY29tcG9uZW50c1s4XTsKK30KKworLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0aGUg
bHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2b2lk
IGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYg
YWxwaGEpCit7CisgICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAu
MDcyMSAqIGJsdWU7CisgICAgcmVkID0gMDsKKyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9IDA7
Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0
ZXJUeXBlPgorYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBw
aXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNb
OV0sIEludFNpemUgYnVmZmVyU2l6ZSkKK3sKKyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgo
KSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOworICAgIAorICAgIGlmIChmaWx0ZXJUeXBlID09
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4TXVs
dGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxh
c3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8gaXMg
bm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2YWx1
ZXNbNF0gfHwgdmFsdWVzWzldIHx8IHZhbHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAy
NTY7CisgICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOworCisgICAgdkltYWdl
X0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIHNy
Yy5oZWlnaHQgPSBidWZmZXJTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZl
clNpemUud2lkdGgoKSAqIDQ7CisgICAgc3JjLmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJbWFn
ZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAg
IGRlc3QuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0g
YnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAgICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAgc3dp
dGNoIChmaWx0ZXJUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7
CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSks
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRp
dmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
MTVdICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKworICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29y
KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbMTJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNv
cikpLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgm
c3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9G
bGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewor
ICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNv
cikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNb
Nl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBk
aXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoY29tcG9uZW50c1syXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29y
KSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICBkaXZpc29yLAorICAgICAgICB9OworICAgICAgICB2
SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29y
LCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7CisgICAg
ICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZigwLjcxNTQgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZigwLjA3MjEgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAgIHZJ
bWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3Is
IG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTxD
b2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KK3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRB
cnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1
ZmZlclNpemUpCit7CisgICAgZmxvYXQgY29tcG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0ZXJU
eXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1hdHJp
eDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Cisg
ICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQor
ICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBv
bmVudHMsIHZhbHVlc1swXSk7CisKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4
ZWxBcnJheS5sZW5ndGgoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZlY3RB
cHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50
cywgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGJ1ZmZlclNpemUpOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4
ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4
ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOworICAgICAgICAgICAgZmxvYXQg
YWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgICAg
ICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJy
YXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhl
bEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhl
bEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJy
YXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBw
aXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBh
bHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAg
IHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOworICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VU
T0FMUEhBOgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVs
Qnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Cisg
ICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsK
KyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVt
KHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNl
dCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEs
IGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIs
IGJsdWUpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywg
YWxwaGEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYm9vbCBGRUNv
bG9yTWF0cml4OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VS
VChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOwor
CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHJlc3VsdEltYWdl
ID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QgPSB7IHsgfSwgaW4u
YWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUoKSB9OworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0
KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlY3QpOworICAgIAorICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSB9OworICAgIAorICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdElt
YWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2Ut
PmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1
ZmZlci0+c2l6ZSgpOworCisgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBtX3ZhbHVlczsKKwor
ICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9X
TjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgor
ICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXks
IHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9S
TUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVu
c2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVS
T1RBVEU6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4o
cGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAg
IGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJy
YXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICByZXN1bHQuc2V0SXNB
bHBoYUltYWdlKHRydWUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXN1bHRJbWFn
ZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFu
c2ZlclNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ZTNmMmRkZGJkNWZlNDkxMDE0MGMwZWM4ODBjMTQ2NDFiYWQ1YWQyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9u
ZW50VHJhbnNmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VC
dWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0
ZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjg2ZmNjNTZmMzM0MThlY2I1MDMxN2NiYzBlYTM1
MGRhNjY2ZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApAQCAtMCwwICsx
LDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBG
RUNvbXBvc2l0ZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFn
ZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzA5YjMzNGMyYmQ1OGI5YWU0
ODg0OTA0NWZhZDc5YmFjZjBjY2M0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdh
cmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworYm9vbCBGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFj
ZW1lbnRNYXBTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFjYjM0MWYwZTU3NmRmM2JkMTM2ZjZhMWM3N2UzZWEyOTAyMGJhNmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRGlzcGxh
Y2VtZW50TWFwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRURpc3BsYWNlbWVu
dE1hcDo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZl
ciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dT
b2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzE2ZmNmYjlmYjllNTZhNGMwZDRkYTg3OTZhNmQ0ZTNl
YWRjYThlNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEs
ODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVE
cm9wU2hhZG93LmgiCisKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgorI2luY2x1ZGUgIkZp
bHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgi
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIEZFRHJvcFNoYWRvdzo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IGlucHV0cywgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5n
ZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOworICAgIGlm
ICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0
SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKy8vICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVy
KCk7CisvLworLy8gICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5
RmlsdGVyUmVzb2x1dGlvbih7IG1fc3RkWCwgbV9zdGRZIH0pOworLy8gICAgYmx1clJhZGl1cy5z
Y2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisvLyAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmls
dGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7CisvLworLy8gICAg
RmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKKy8vICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9m
ZnNldChkcmF3aW5nUmVnaW9uKTsKKy8vICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUo
b2Zmc2V0KTsKKy8vCisvLyAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworLy8gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRv
d09wYWNpdHkpOworLy8gICAgcmVzdWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldCk7CisvLyAgICByZXN1bHRDb250ZXh0LnNldEFs
cGhhKDEpOworLy8KKy8vICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBv
ZmZzZXQsIG1fc2hhZG93Q29sb3IpOworLy8KKy8vICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07CisvLyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworLy8gICAgYXV0byBwaXhlbEJ1
ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwor
Ly8gICAgaWYgKCFwaXhlbEJ1ZmZlcikKKy8vICAgICAgICByZXR1cm4gbnVsbHB0cjsKKy8vCisv
LyAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKy8vICAg
IGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBp
eGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworLy8K
Ky8vICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0Fy
ZWEpOworLy8KKy8vICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBv
c2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CisvLyAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFk
b3dDb2xvcik7CisvLyAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKKy8vCisvLyAgICByZXN1bHRJbWFnZS0+
Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb24pOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVG
bG9vZFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWVjYWJhMDExYTJm
YmFlY2M5ZjIyZGJmZjIzZTkwYmUzNDJhYWIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUu
Y3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFRmxvb2QuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIEZFRmxvb2Q6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAg
ICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1
bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb2xvciA9IG1fY29s
b3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkobV9vcGFjaXR5KTsKKyAgICBhdXRvIGltYWdl
UmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVzdWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXpl
KCkgfTsKKyAgICAKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KGltYWdlUmVj
dCwgY29sb3IpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44M2Q3MGE2ODBkOGVjMWM1YzdjOTQ5MjdiNGJiNmQ5YjQzMmYyNjhhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OmFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1
bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZWNjMTIwMTA5OWJkOTU5ZGZhY2IxMmY5NzEwNmE1YmI1MmJmZWFlMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Wm9sdGFuIEhlcmN6ZWcKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZFTGlnaHRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFTGlnaHRpbmc6
OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBG
aWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44NWY4MjViZGE4ZWMyMzUwYmJjMTUzMDk0ZTQzMGZhNWMyOGM1N2JiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU1lcmdlLmgiCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNZXJnZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3Vs
dCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlucHV0cy5pc0VtcHR5KCkpOworCisgICAgYXV0byBy
ZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2Up
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29u
dGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0IDog
aW5wdXRzKSB7CisgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC0+aW1hZ2VCdWZmZXIo
KTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGlu
cHV0LT5hYnNvbHV0ZURyYXdpbmdSZWN0KCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVN
b3JwaG9sb2d5U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjMzhjYTQ0ZTVhYWIxYjcyMjJjZTZh
Nzc4YWFjNzkwNWY2NmM4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgRkVNb3JwaG9sb2d5OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNv
ZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYxNWNiYjgzNGJiNGU4OTZk
OGJkNzhmNjNmM2Q2MGRlOGIzZmIyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAK
QEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2Jvb2wgRkVPZmZzZXQ6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0u
Z2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlc3Vs
dEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0LnNldElzQWxwaGFJbWFnZShpbi5pc0Fs
cGhhSW1hZ2UoKSk7CisKKyAgICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVz
dWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkgfTsKKyAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdh
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRVRpbGVTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFlNTBjZWJiODZlNjg5YzYwYWYzMGMz
YTRjMWY4NjNlMTA2YTBmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNz
ZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUaWxl
LmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5j
bHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFVGlsZTo6YXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNv
bnN0Cit7CisvLyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKy8vICAgIGF1dG8mIGlu
ID0gaW5wdXRzWzBdLmdldCgpOworLy8KKy8vICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQu
aW1hZ2VCdWZmZXIoKTsKKy8vICAgIGF1dG8gaW5CdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOwor
Ly8gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCisvLyAgICAgICAgcmV0dXJuIGZh
bHNlOworLy8KKy8vICAgIHJlc3VsdC5zZXRJc0FscGhhSW1hZ2UoaW4uaXNBbHBoYUltYWdlKCkp
OworLy8KKy8vICAgIC8vIFNvdXJjZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFz
IHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQorLy8gICAgLy8gc2l6
ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3Bl
Y2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgorLy8gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0g
aW4ubWF4RWZmZWN0UmVjdCgpOworLy8gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9u
ID0gdGlsZVJlY3QubG9jYXRpb24oKTsKKy8vICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRp
b24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKKy8vICAgIGlmIChpbi5maWx0ZXJFZmZl
Y3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0KSB7CisvLyAgICAgICAgRmls
dGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKy8vICAgICAgICB0aWxlUmVjdCA9IGZpbHRl
ci5maWx0ZXJSZWdpb24oKTsKKy8vICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVy
UmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkp
OworLy8gICAgfQorLy8KKy8vICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKKy8vICAgIGlmICghdGls
ZUltYWdlKQorLy8gICAgICAgIHJldHVybiBudWxscHRyOworLy8KKy8vICAgIEdyYXBoaWNzQ29u
dGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOworLy8gICAgdGls
ZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhF
ZmZlY3RMb2NhdGlvbi55KCkpOworLy8gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmluQnVmZmVyLCBpbi5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOworLy8KKy8v
ICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KFdURk1vdmUodGlsZUltYWdlKSk7CisvLyAgICBpZiAoIXRpbGVJbWFnZUNvcHkpCisvLyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisvLworLy8gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFu
c2Zvcm07CisvLyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0
aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOworLy8KKy8vICAgIGF1dG8gcGF0dGVybiA9IFBhdHRl
cm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwg
cGF0dGVyblRyYW5zZm9ybSB9KTsKKy8vCisvLyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNv
bnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworLy8gICAgZmlsdGVyQ29udGV4dC5zZXRG
aWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKKy8vICAgIGZpbHRlckNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
VHVyYnVsZW5jZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJi
NGFkN2MxMDg4ZjJhNTBkZDYwOWRmNjQ2ODA5MDUxNmM5ZGVmMDgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVy
YnVsZW5jZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworYm9vbCBGRVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRl
clJlc3VsdFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMWQx
NjAwM2M0NmZmODczYWRmNjc5ZTYxZTc3ZTk3MDY1NTU4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJl
c3VsdFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlciogRmlsdGVyUmVzdWx0U29mdHdhcmU6
OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBhdXRvIGxvZ2ljYWxTaXplID0gYWJzb2x1dGVE
cmF3aW5nUmVjdCgpLnNpemUoKTsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0
aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1f
aW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCByZWN0
IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShsb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChw
aXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
KQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4
aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAg
ZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4
ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
LCByZWN0KTsKKworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3
YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjM4YzQ1NjhmNTFjMzYyYjlmY2E5NmI0YWZiNDM1YjQzM2U5OTEy
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuaApAQCAtMCwwICsxLDQ3IEBACisv
KgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
KgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
KgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyUmVz
dWx0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyUmVzdWx0U29mdHdh
cmUgOiBwdWJsaWMgRmlsdGVyUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1
bHQ6OkZpbHRlclJlc3VsdDsKKyAgICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVmZmVy
PiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92ZXJyaWRlIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXI7
IH0KKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsKKworICAgIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJSZXN1bHRT
b2Z0d2FyZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyUmVz
dWx0JiByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkgPT0gV2ViQ29yZTo6
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19F
TkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzlhY2E3MGVhNGY1MGNhM2I0NDhmZjE3ZTAzN2M3NDMzOTVjMWNmOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJl
c3VsdCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOwor
ICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9
IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOwor
ICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
aW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCByZXN1bHQuYWJzb2x1dGVEcmF3aW5nUmVjdCgp
LnNpemUoKSB9OworCisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChpbWFnZVJl
Y3QsIENvbG9yOjpibGFjayk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGlu
YXRpb25Jbik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ3MTY0ZWI1ZDVlOGE0NDY0OGMzZjMxNTI0MTMxMjY3YWVlMTgyYjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIFNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmIHJl
c3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc291cmNlSW1hZ2UpOworCisgICAgYXV0byByZXN1
bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5jcHAKaW5kZXggNjRlOTgzODRhZjAwNGVmNjk5YmM2MmU2YTZjOTc3NTZmNTljNjZmZi4uNzVm
Mzc3NTM1MTQxYzI5ZDIxM2Q1N2U0Y2YzZmQyYjJmNDBlYjczMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNyw0MTEgKzI4LDMwMSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkVs
ZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKICNpbmNsdWRlICJG
RUNvbXBvbmVudFRyYW5zZmVyLmgiCiAjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCiAjaW5jbHVk
ZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNpbmNsdWRlICJGRU1lcmdlLmgiCi0jaW5jbHVkZSAiRmls
dGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRmls
dGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
RmlsdGVyQnVpbGRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oIgotI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVy
LmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUg
PGQyZDEuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxDU1NGaWx0ZXI+
IENTU0ZpbHRlcjo6Y3JlYXRlKCkKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRp
b25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKG5ldyBDU1NGaWx0
ZXIob3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSkpOworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxk
RnVuY3Rpb25zKHJlbmRlcmVyLCBvcGVyYXRpb25zKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgCisgICAgcmV0dXJuIGZpbHRlcjsKIH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQot
ICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEsIDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhT
b3VyY2VHcmFwaGljOjpjcmVhdGUoKnRoaXMpKQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KQorICAgIDogRmlsdGVyKHJlbmRlcmluZ01vZGUsIFR5cGU6OkNTUykKIHsKKyAgICBtX2hhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
KCk7CisgICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdp
biA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlP
cmlnaW4oKTsKIH0KIAotQ1NTRmlsdGVyOjp+Q1NTRmlsdGVyKCkgPSBkZWZhdWx0Oworc3RhdGlj
IFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihGaWx0ZXImIGZpbHRlciwgUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCAmcHJldmlvdXNFZmZlY3QsIGNvbnN0IFJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQoreworICAgIGF1dG8mIHJl
ZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3Vy
Y2VzKCk7CisgICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMu
cmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0
aW9uKTsKKworICAgIGlmICghZmlsdGVyRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gU1ZHRmlsdGVyOjpjcmVhdGUoKmZpbHRlckVsZW1lbnQsIGZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksICZwcmV2aW91c0VmZmVjdCk7Cit9CiAKLUdyYXBoaWNzQ29udGV4dCog
Q1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNy
ZWF0ZUdyYXlTY2FsZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
JiBjb2xvck1hdHJpeE9wZXJhdGlvbikKIHsKLSAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZz
b3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOworICAgIGRvdWJsZSBvbmVNaW51c0Ft
b3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEu
MCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3Rp
cC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZv
cm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRl
cnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAw
LjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAw
LAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAu
Mjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAs
CisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVN
aW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43
MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAu
MDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwK
KworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAg
ICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JN
QVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGNyZWF0ZVNlcGlhRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQogewotICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSBy
ZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCkucmVmZXJlbmNlZEZpbHRlckVs
ZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKLSAgICBpZiAoIWZp
bHRlckVsZW1lbnQpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8
PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQg
dG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmls
dGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOwotICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90
IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUg
ZG9jdW1lbnQuCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJP
YmplY3RzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMxMDg1PgotICAgICAgICAvLyBGSVhNRTog
VW5jbGVhciBpZiB0aGlzIGRvZXMgYW55dGhpbmcuCi0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGZpbHRlck9wZXJhdGlvbi5m
cmFnbWVudCgpLCAqZWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAg
ICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlv
bi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcv
aGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAor
ICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkz
ICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAor
ICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0
OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4
NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAg
IDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41
MzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4x
MzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKwor
ICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAw
LAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRS
SVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAgICBhdXRv
IGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KCZwcmV2aW91c0VmZmVjdCk7
Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoU291cmNlQWxwaGE6
OmVmZmVjdE5hbWUoKSk7CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJh
dGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRy
aXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAg
IHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
LCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0OwotICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0
czsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoY29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24p
Cit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNo
aWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRl
ckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoYnVpbGRl
ci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAi
IGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVpbGQgZWZmZWN0IGZyb20gIiA8PCBl
ZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Citz
dGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlSW52ZXJ0RWZmZWN0KGNvbnN0IEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElO
RUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSAxIC0gMiAqIGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3Vu
dDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJl
dHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KIAotICAgICAg
ICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAg
ICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFU
SU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVy
YXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHls
ZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246Okxp
bmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3Bl
cmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYK
LSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwg
ZWZmZWN0KTsKLSAgICAgICAgcmVmZXJlbmNlRWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAg
fQotICAgIAotICAgIG1fZWZmZWN0cy5hcHBlbmRWZWN0b3IoV1RGTW92ZShyZWZlcmVuY2VFZmZl
Y3RzKSk7Ci0gICAgcmV0dXJuIGVmZmVjdDsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBj
cmVhdGVPcGFjaXR5RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkp
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5j
dGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxs
RnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShudWxsRnVu
Y3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKIH0K
IAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKK3N0
YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uKQogewotICAgIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKLSAgICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJl
c3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxk
QmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOworICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3Vu
dCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CiAKLSAgICBtX2VmZmVjdHMuY2xlYXIoKTsK
LSAgICBtX291dHNldHMgPSB7IH07CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRl
Q29udHJhc3RFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Cisg
ICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7CisKKyAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVh
dGVCbHVyRWZmZWN0KGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24pCit7
CisgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0
aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgLypjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1l
cjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDoqLyBFREdFTU9ERV9EVVBMSUNBVEUp
OworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVj
dChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQor
eworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7Cisg
ICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0
aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29s
b3IoKSwgMSk7Cit9CisKK2Jvb2wgQ1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKK3sKKyAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKTsK
KyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CiAgICAgZm9y
IChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlv
biA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkg
ewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAgICAgICAg
ICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVy
ZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24p
OworICAgICAgICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7CisKKyAgICAgICAgQVNTRVJUKGVm
ZmVjdCk7CisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAgICAgICAgIGZpbHRlciA9IGNyZWF0
ZVNWR0ZpbHRlcigqdGhpcywgcmVuZGVyZXIsICplZmZlY3QsIGRvd25jYXN0PFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZWZmZWN0ID0gbnVsbHB0
cjsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0
aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAt
IGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAg
IC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMv
aW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3Jt
YXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBh
cmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2
ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNB
bW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUy
ICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIy
ICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNy
ZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFt
ZXRlcnMpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkdSQVlTQ0FMRToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChk
b3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0VQSUE6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsK
LSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBo
dHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRt
bCNzZXBpYUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJh
bWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25l
TWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43
NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4x
NjggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAg
ICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAu
MjcyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCi0g
ICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgMSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
ZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9y
TWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJh
bWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91
bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhp
cywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykp
OworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJB
VEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTYXR1cmF0ZUVmZmVjdChkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JP
VEFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZm
ZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVF
Uk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSHVlUm90
YXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlw
ZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBh
bW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
LmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAq
IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50
OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsK
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywg
dHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
SU5WRVJUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNv
bG9yLWZpbHRlci4KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6T1BBQ0lUWTogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3Qg
PSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIG51bGxGdW5jdGlvbiwgbnVsbEZ1
bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24pOworCisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlT3Bh
Y2l0eUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgYXV0byYgY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVu
Y3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRy
YW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRuZXNz
RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlv
bi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZs
b2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFt
b3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFt
b3VudCArIDAuNTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRy
YW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24s
IHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24g
PSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0
aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5C
bHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9
PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1P
REVfRFVQTElDQVRFKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKKyAg
ICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBh
dXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNoYWRv
dzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCBkcm9w
U2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRyb3BTaGFk
b3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJh
dGlvbi5jb2xvcigpLCAxKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9T
SEFET1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGRvd25j
YXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGVmZmVjdCkgewotICAgICAgICAgICAgLy8gVW5s
aWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMgb24g
dGhlIGZpbHRlcgotICAgICAgICAgICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBu
b3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3VicmVnaW9ucy4KLSAgICAgICAgICAgIGVmZmVj
dC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVu
Y3Rpb24pOwotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KGZpbHRlck9wZXJhdGlvbi50eXBlKCkgIT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsK
LSAgICAgICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZp
b3VzRWZmZWN0KSB9OwotICAgICAgICAgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZm
ZWN0KTsKKyAgICAgICAgaWYgKGZpbHRlcikgeworICAgICAgICAgICAgZWZmZWN0ID0gZmlsdGVy
LT5sYXN0RWZmZWN0KCk7CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJl
bGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVy
IHdlIGFyZSBub3QgdmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIG1fZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBp
ZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNldE1heEVmZmVj
dFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7Ci0jaWYgVVNFKENPUkVfSU1BR0UpCi0gICAg
aWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVy
RWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFj
Y2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsK
LSNlbmRpZgorICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOworICAgIH0K
KyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KQorSW50T3V0c2V0cyBDU1NG
aWx0ZXI6Om91dHNldHMoKSBjb25zdAogewotICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8
fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyB8
fCAhbV9vdXRzZXRzLmlzWmVybygpKQorICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwogCi0gICAg
aWYgKGZpbHRlclJlY3QgPT0gc291cmNlSW1hZ2VSZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIG1fb3V0
c2V0cyArPSBmdW5jdGlvbi0+b3V0c2V0cygpOwogCi0gICAgc2V0U291cmNlSW1hZ2VSZWN0KGZp
bHRlclJlY3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENTU0ZpbHRlcjo6YWxsb2Nh
dGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRl
eHQpCi17Ci0gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZWZmZWN0IGNoYWluIGhhcyBiZWVuIGJ1
aWx0LCBhbmQgdGhlCi0gICAgLy8gc291cmNlIGltYWdlIHNpemVzIHNldC4gV2UganVzdCBuZWVk
IHRvIGF0dGFjaCB0aGUgZ3JhcGhpYwotICAgIC8vIGJ1ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQg
ZG9uZSBzby4KLQotICAgIGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEludFNpemUgbG9naWNhbFNpemUgeyBtX3NvdXJjZURyYXdpbmdSZWdpb24u
c2l6ZSgpIH07Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSgpIHx8IHNvdXJjZUltYWdlKCktPmxvZ2lj
YWxTaXplKCkgIT0gbG9naWNhbFNpemUpIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHNl
dFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01v
ZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRlclNjYWxlKCksIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXRDb250ZXh0KTsKLSAgICAgICAgUmVuZGVyaW5nTW9kZSBtb2RlID0gbV9maWx0
ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogcmVuZGVyaW5nTW9kZSgp
OwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXpl
LCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4
ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0
dGFjaGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbigpCi17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0
KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC5tYXhFZmZlY3RSZWN0
KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdl
IHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9y
cy4KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHND
bGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAgc2V0RmlsdGVyUmVz
b2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCk7Ci0gICAgfQorICAgIHJldHVybiBtX291dHNldHM7CiB9CiAKLXZvaWQg
Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQorRmlsdGVyUmVzdWx0KiBDU1NG
aWx0ZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0
YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0CiB7Ci0gICAgbV9zb3VyY2VHcmFw
aGljLT5jbGVhclJlc3VsdCgpOwotICAgIGlmIChtX3NvdXJjZUFscGhhKQotICAgICAgICBtX3Nv
dXJjZUFscGhhLT5jbGVhclJlc3VsdCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZl
Y3RzKQotICAgICAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7Ci19CisgICAgZm9yIChhdXRvJiBm
dW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuY3Rpb24t
PmFwcGx5KG91dHB1dCwgc3RhY2ssIHNvdXJjZUltYWdlKTsKKyAgICAgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkK
LXsKLSAgICBhdXRvJiBlZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGlmICht
X2ZpbHRlclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0
cyhlZmZlY3QpOwotICAgICAgICBpZiAobV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsK
LSAgICAgICAgICAgIGVmZmVjdC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAg
ICAgICBzdGFjay5hcHBlbmQoeyAqcmVzdWx0IH0pOworICAgICAgICBvdXRwdXQucmVzdWx0cygp
LmFkZChmdW5jdGlvbiwgUmVmPEZpbHRlclJlc3VsdD4oKnJlc3VsdCkpOwogICAgIH0KLSAgICBl
ZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci19Ci0KLUxheW91dFJlY3QgQ1NTRmlsdGVyOjpj
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRl
ckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICAvLyBUaGUgcmVz
dWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGFyZWEgaW4gdGhlICJmaWx0ZXJCb3hSZWN0IiB0
aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZCwgc28gdGhhdCB3ZSBmdWxseSBjb3ZlciB0aGUgImRp
cnR5UmVjdCIuCi0gICAgYXV0byByZWN0Rm9yUmVwYWludCA9IGRpcnR5UmVjdDsKLSAgICBpZiAo
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCi0gICAgICAgIHJlY3RGb3JSZXBhaW50ICs9IG91
dHNldHMoKTsKLSAgICByZWN0Rm9yUmVwYWludC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7Ci0g
ICAgcmV0dXJuIHJlY3RGb3JSZXBhaW50OwotfQotCi1JbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpv
dXRwdXQoKSBjb25zdAotewotICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVu
ZGVyZXItPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm4gbV9maWx0ZXJSZW5kZXJlci0+b3V0
cHV0KCk7Ci0gICAgCi0gICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0KCktPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci19Ci0KLXZvaWQgQ1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCi17Ci0gICAgbV9zb3VyY2VEcmF3aW5nUmVnaW9uID0g
c291cmNlSW1hZ2VSZWN0OwotICAgIHNldE1heEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCk7
Ci0gICAgc2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgbV9ncmFwaGljc0J1
ZmZlckF0dGFjaGVkID0gZmFsc2U7Ci19CiAKLXZvaWQgQ1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RS
ZWN0cyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdFJlY3QpCi17Ci0gICAgZm9yIChhdXRvJiBlZmZl
Y3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIGVmZmVjdC0+c2V0TWF4RWZmZWN0UmVjdChlZmZlY3RS
ZWN0KTsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID09IDEpOworICAgIGF1dG8gcmVzdWx0ID0g
c3RhY2sudGFrZUxhc3QoKTsKKyAgICByZXN1bHQtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgcmV0dXJuICZyZXN1bHQubGVha1JlZigp
OwogfQogCi1JbnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0CitUZXh0U3RyZWFt
JiBDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIGF1dG8mIGxhc3RF
ZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIAotICAgIGlmIChsYXN0RWZmZWN0
Lmhhc1Jlc3VsdCgpIHx8IChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhh
c1Jlc3VsdCgpKSkKLSAgICAgICAgcmV0dXJuIGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKLSAgICAKLSAgICBy
ZXR1cm4geyB9OwotfQotCi1JbnRPdXRzZXRzIENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscykKLSAgICAgICAgcmV0dXJuIHsg
fTsKLQotICAgIGlmICghbV9vdXRzZXRzLmlzWmVybygpKQotICAgICAgICByZXR1cm4gbV9vdXRz
ZXRzOwotCi0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0
c2V0cyArPSBlZmZlY3QtPm91dHNldHMoKTsKLSAgICByZXR1cm4gbV9vdXRzZXRzOworICAgIGZv
ciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAgZnVuY3Rpb24tPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICByZXR1cm4gdHM7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
aAppbmRleCAwMGI5MTkxN2I4MDRjOTJkOTQwOGI3NThlMzc1YzI1MmYyOWRiMGM1Li5iZDNmOGE3
ZWM4M2ZlYTlmOWVlZTQzZmVmNTIxNjk4YTJjZjcwMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsODYgKzI2LDU0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKLSNpbmNsdWRlICJMYXlv
dXRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFz
cyBGaWx0ZXJFZmZlY3RSZW5kZXJlcjsKLWNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Ci1jbGFzcyBH
cmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBS
ZW5kZXJFbGVtZW50OwotY2xhc3MgU291cmNlQWxwaGE7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwot
Ci1lbnVtIGNsYXNzIEZpbHRlckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0
aW9uIH07CiAKIGNsYXNzIENTU0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRl
cnM7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOwotCi0gICAg
dm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRG
aWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdp
b24gPSBmaWx0ZXJSZWdpb247IH0KIAotICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdDsK
LQotICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
LCBGaWx0ZXJDb25zdW1lcik7Ci0gICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsK
LSAgICB2b2lkIGFwcGx5KCk7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+
IGNyZWF0ZShSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmlu
Z01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIAogICAgIGJvb2wgaGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3Vy
aXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmlj
dGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBDU1NGaWx0ZXIoKTsKLSAgICB2aXJ0dWFsIH5DU1NGaWx0ZXIoKTsKLQotICAgIGJv
b2wgaXNDU1NGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBGbG9h
dFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2VEcmF3
aW5nUmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5V
c2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorICAgIElu
dE91dHNldHMgb3V0c2V0cygpIGNvbnN0IGZpbmFsOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdCYgcHJl
dmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZWY8Q1NTRmlsdGVyPj4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZv
aWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQqIGlucHV0Q29udGV4dCgpOwotCi0gICAgYm9vbCB1cGRhdGVCYWNraW5nU3RvcmVSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworcHJpdmF0ZToKKyAgICBDU1NG
aWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01vZGUpOwogCi0gICAgSW50
UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7CisgICAgYm9vbCBidWlsZEZ1bmN0aW9ucyhSZW5kZXJF
bGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogCi0gICAgTGF5b3V0UmVjdCBjb21w
dXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJv
eFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCk7CisgICAgRmlsdGVyUmVzdWx0KiBh
cHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UpIGNvbnN0IGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJh
d2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisgICAgVGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0IGZpbmFsOwogCi0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVj
dHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBoaWM+IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBtX3NvdXJjZUFscGhhOworICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07CiAKKyAgICBWZWN0b3I8UmVmPEZpbHRl
ckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CiAgICAgbXV0YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0
czsKK307CiAKLSAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2Ug
fTsKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgQ1NTRmlsdGVyOjplbmNvZGUoRW5j
b2RlciYpIGNvbnN0Cit7CiAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJl
bmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOwotfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVj
b2Rlcj4gc3RkOjpvcHRpb25hbDxSZWY8Q1NTRmlsdGVyPj4gQ1NTRmlsdGVyOjpkZWNvZGUoRGVj
b2RlciYpCit7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNTU0ZpbHRl
cikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIp
IHsgcmV0dXJuIGZpbHRlci5pc0NTU0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIudHlwZSgpID09
IFdlYkNvcmU6OkZpbHRlcjo6VHlwZTo6Q1NTOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDFiZjIyZTQyYzM1
MTg2MTg3OWVmNWFmMGNmMWVjMGI0NzE0OWI1ZWEuLjAwZjY2ZThhYjIxOGJlNGYwMWZhNzJiY2Nj
YWU5MWU3ZTg2M2EzNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBA
IC02Miw3ICs2Miw2IEBAIGNsYXNzIFRleHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgQ2xpcFJlY3RzOwogY2xhc3MgQ2xpcFJlY3RzQ2Fj
aGU7CiBjbGFzcyBFdmVudFJlZ2lvbkNvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCmluZGV4IDI1MGE3ZDVjMGJhYTBhYzc0MWE5MGM4
MThiNjFhMDVmOTViOTY0YTQuLmEyZWU3ODkwYzRhN2VkZmRhYTNlYmRiYjdmNDQ1ZGIwNzk2MTcy
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMu
Y3BwCkBAIC0zMSw5ICszMSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyRmlsdGVycy5oIgogCi0jaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVkZSAi
Q2FjaGVkU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgi
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC0xMTYsMzkgKzExNyw1MSBAQCB2
b2lkIFJlbmRlckxheWVyRmlsdGVyczo6cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpCiAg
ICAgbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXll
ckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBzY2Fs
ZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQordm9pZCBSZW5kZXJMYXllckZp
bHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewotICAgIGlmICghbV9maWx0ZXIpIHsKLSAgICAgICAg
bV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOwotICAgICAgICBtX2ZpbHRlci0+c2V0Rmls
dGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICBtX2ZpbHRlci0+c2V0UmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9IGVsc2UgaWYgKG1fZmlsdGVyLT5maWx0ZXJTY2FsZSgp
ICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2Fs
ZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsK
LSAgICB9CisgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVy
ZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSk7Cit9CisKK0dyYXBoaWNzQ29udGV4
dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnB1dENvbnRleHQoKQoreworICAgIHJldHVybiBtX3Nv
dXJjZUltYWdlID8gJm1fc291cmNlSW1hZ2UtPmNvbnRleHQoKSA6IG51bGxwdHI7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKK3sK
KyAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSB7IG1fc291cmNlSW1hZ2VSZWN0LnNpemUoKSB9Owor
ICAgIG1fc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtX2Zp
bHRlci0+cmVuZGVyaW5nTW9kZSgpLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVp
bGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCi0g
ICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBi
dXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCi0gICAgLy8gRklYTUU6IHRoaXMgcmVidWlsZHMgdGhl
IGVudGlyZSBlZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hh
bmdlLgotICAgIGlmICghbV9maWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgp
LmZpbHRlcigpLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkpKQotICAgICAgICBtX2Zp
bHRlciA9IG51bGxwdHI7CisgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKIH0K
IAotR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0
KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBm
aWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJl
Y3QmIGxheWVyUmVwYWludFJlY3QpCitHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYg
ZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRS
ZWN0JiBsYXllclJlcGFpbnRSZWN0KQogewogICAgIGlmICghbV9maWx0ZXIpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgYXV0byYgZmlsdGVyID0gKm1fZmlsdGVyOwotICAgIGF1dG8g
ZmlsdGVyU291cmNlUmVjdCA9IGZpbHRlci5jb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KGZpbHRlckJveFJlY3QsIGRpcnR5UmVjdCk7CisgICAgCisgICAgYXV0byBmaWx0ZXJTb3Vy
Y2VSZWN0ID0gZGlydHlSZWN0OworICAgIGlmIChmaWx0ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzKCkpCisgICAgICAgIGZpbHRlclNvdXJjZVJlY3QgKz0gZmlsdGVyLm91dHNldHMoKTsKKyAg
ICBmaWx0ZXJTb3VyY2VSZWN0LmludGVyc2VjdChmaWx0ZXJCb3hSZWN0KTsKKwogICAgIGlmIChm
aWx0ZXJTb3VyY2VSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBib29sIGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUgPSBmaWx0ZXIudXBkYXRlQmFja2luZ1N0b3Jl
UmVjdChmaWx0ZXJTb3VyY2VSZWN0KTsKKyAgICAKKyAgICBpZiAoZmlsdGVyU291cmNlUmVjdCAh
PSBtX3NvdXJjZUltYWdlUmVjdCkgeworICAgICAgICBtX3NvdXJjZUltYWdlUmVjdCA9IGZpbHRl
clNvdXJjZVJlY3Q7CisgICAgICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IGZhbHNlOwor
ICAgIH0KKyAgICAKICAgICBpZiAoIWZpbHRlci5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkK
ICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGRpcnR5UmVjdDsKICAgICBlbHNlIHsKLSAgICAgICAg
aWYgKGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUpCisgICAgICAgIGlmICghbV9ncmFwaGljc0J1ZmZl
ckF0dGFjaGVkKQogICAgICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGZpbHRlclNvdXJjZVJlY3Q7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGRpcnR5UmVjdDsK
QEAgLTE1OSwxMSArMTcyLDkgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6
OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXQKICAgICBtX3BhaW50
T2Zmc2V0ID0gZmlsdGVyU291cmNlUmVjdC5sb2NhdGlvbigpOwogICAgIHJlc2V0RGlydHlTb3Vy
Y2VSZWN0KCk7CiAKLSAgICBmaWx0ZXIuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KCk7Ci0KLSAgICBmaWx0ZXIuYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChkZXN0aW5hdGlv
bkNvbnRleHQpOwotICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9IGZpbHRlci5pbnB1
dENvbnRleHQoKTsKLSAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4dCB8fCBmaWx0ZXIuZmls
dGVyUmVnaW9uKCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhm
aWx0ZXIuZmlsdGVyUmVnaW9uKCkuc2l6ZSgpKSkKKyAgICBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKCk7CisgICAgYXV0byogc291cmNlR3JhcGhpY3NDb250ZXh0ID0gaW5wdXRDb250ZXh0
KCk7CisgICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgLy8gVHJhbnNsYXRlIHRoZSBjb250ZXh0IHNvIHRoYXQgdGhlIGNvbnRlbnRz
IG9mIHRoZSBsYXllciBpcyBjYXB0dXJlZCBpbiB0aGUgb2Zmc2NyZWVuIG1lbW9yeSBidWZmZXIu
CkBAIC0xNzcsMjUgKzE4OCwyNiBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdAogCiB2b2lkIFJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0
aW5hdGlvbkNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKG1fZmlsdGVyLT5pbnB1dENvbnRleHQoKSk7
CisgICAgQVNTRVJUKGlucHV0Q29udGV4dCgpKTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIlxuUmVuZGVyTGF5ZXJGaWx0ZXJzICIgPDwgdGhpcyA8PCAiIGFwcGx5
RmlsdGVyRWZmZWN0Iik7CiAKICAgICBhdXRvJiBmaWx0ZXIgPSAqbV9maWx0ZXI7Ci0gICAgZmls
dGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7Ci0KLSAgICBmaWx0ZXIuYXBwbHkoKTsKLQot
ICAgIC8vIEdldCB0aGUgZmlsdGVyZWQgb3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgotICAg
IExheW91dFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIub3V0cHV0UmVjdCgpOwotICAgIGRlc3RSZWN0
Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKLQotICAgIGlmIChh
dXRvKiBvdXRwdXRCdWZmZXIgPSBmaWx0ZXIub3V0cHV0KCkpCi0gICAgICAgIGRlc3RpbmF0aW9u
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91dHB1dEJ1ZmZlciwgc25hcFJlY3RUb0RldmljZVBp
eGVscyhkZXN0UmVjdCwgbV9sYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSkpOwotCi0gICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJGaWx0ZXJz
ICIgPDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOworICAgIGlucHV0Q29u
dGV4dCgpLT5yZXN0b3JlKCk7CisKKyAgICBhdXRvIGdlb21ldHJ5ID0gc3RkOjptYWtlX3VuaXF1
ZTxGaWx0ZXJHZW9tZXRyeT4obV9zb3VyY2VJbWFnZVJlY3QsIG1fc291cmNlSW1hZ2VSZWN0KTsK
KyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKGZpbHRlciwgbV9z
b3VyY2VJbWFnZS5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOworCisvLworLy8gICAgLy8gR2V0
IHRoZSBmaWx0ZXJlZCBvdXRwdXQgYW5kIGRyYXcgaXQgaW4gcGxhY2UuCisvLyAgICBMYXlvdXRS
ZWN0IGRlc3RSZWN0ID0gZmlsdGVyLm91dHB1dFJlY3QoKTsKKy8vICAgIGRlc3RSZWN0Lm1vdmUo
bV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKKy8vCisvLyAgICBkZXN0aW5h
dGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKGZpbHRlciwgbV9zb3VyY2VJbWFnZS5n
ZXQoKSk7CisvLworLy8gICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOworLy8K
Ky8vICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyRmls
dGVycyAiIDw8IHRoaXMgPDwgIiBhcHBseUZpbHRlckVmZmVjdCBkb25lXG4iKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4ZjE1NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDVi
ZjcuLjJhZjZmYjQ3ZTE4NGY2OTQwNDdjMGU3MTUyNzNhYzE0MmFhNWJmYjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKQEAgLTM3LDggKzM3LDEw
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZFNWR0RvY3VtZW50OworY2xh
c3MgQ1NTRmlsdGVyOwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Citj
bGFzcyBJbWFnZUJ1ZmZlcjsKIAogY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzIGZpbmFsIDogcHJp
dmF0ZSBDYWNoZWRTVkdEb2N1bWVudENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CkBAIC02OSwxNCArNzEsMTkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIG5vdGlm
eUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikgZmlu
YWw7CiAgICAgdm9pZCByZXNldERpcnR5U291cmNlUmVjdCgpIHsgbV9kaXJ0eVNvdXJjZVJlY3Qg
PSBMYXlvdXRSZWN0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOwor
ICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOwogCiAgICAgUmVuZGVyTGF5
ZXImIG1fbGF5ZXI7CiAKICAgICBWZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiBtX2ludGVybmFsU1ZH
UmVmZXJlbmNlczsKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9j
dW1lbnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJlbmNlczsKIAorICAgIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gbV9zb3VyY2VJbWFnZTsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7CiAgICAg
UmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7CiAgICAgTGF5b3V0UmVjdCBtX2RpcnR5U291cmNl
UmVjdDsKKyAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAgICAg
CiAgICAgLy8gRGF0YSB1c2VkIHBlciBwYWludAogICAgIExheW91dFBvaW50IG1fcGFpbnRPZmZz
ZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDQxNjJiODFmZjNiYWM4Y2MxYzJkOGY0ODkxODE0OTkx
ZWM3NTU3YTEuLmE1MjgwYTdiZjcwMzA0NzY5OGUyM2EyYTEyYmNhYjIxODVkMzVjMTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0zNSw2ICszNiw4IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2lu
Y2x1ZGUgIlNWR0ZpbHRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckdlb21ldHJ5LmgiCiAjaW5j
bHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCkBAIC04MCw2MiAr
ODMsMjcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVtb3ZlQ2xpZW50RnJvbUNh
Y2hlKFJlbmRlckVsZW1lbnQmIGNsaWVudCwgYm9vbAogICAgIG1hcmtDbGllbnRGb3JJbnZhbGlk
YXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlv
biA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHRmls
dGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyhTVkdG
aWx0ZXImIGZpbHRlcikgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291
bnRDaGlsZE5vZGVzID0gMjAwOwotICAgIGlmIChmaWx0ZXJFbGVtZW50KCkuY291bnRDaGlsZE5v
ZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94
KCk7Ci0KLSAgICAvLyBBZGQgZWZmZWN0cyB0byB0aGUgYnVpbGRlcgotICAgIGF1dG8gYnVpbGRl
ciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oU291cmNlR3JhcGhpYzo6Y3JlYXRlKGZp
bHRlcikpOwotICAgIGJ1aWxkZXItPnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1lbnQoKS5w
cmltaXRpdmVVbml0cygpKTsKLSAgICBidWlsZGVyLT5zZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJn
ZXRCb3VuZGluZ0JveCk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogY2hpbGRyZW5P
ZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50
KCkpKSB7Ci0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWxlbWVudC5idWlsZChidWlsZGVyLmdldCgp
LCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgYnVpbGRlci0+
Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQot
ICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNv
cHlSZWYoKSwgZWxlbWVudC5yZW5kZXJlcigpKTsKLSAgICAgICAgZWxlbWVudC5zZXRTdGFuZGFy
ZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RCb3Vu
ZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWxlbWVudCwgZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2
ZVVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KSk7Ci0gICAgICAgIGlmIChlbGVtZW50LnJlbmRl
cmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0Ip
Ci0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWxlbWVudC5yZW5k
ZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09
IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpM
aW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAg
ICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChl
bGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVp
bGRlcjsKLX0KLQogYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1v
ZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2VN
b2RlLCAhcmVzb3VyY2VNb2RlKTsKIAotICAgIExPRyhGaWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIgJXAgYXBwbHlSZXNvdXJjZSByZW5kZXJlciAlcCIsIHRoaXMsICZyZW5kZXJlcik7
Ci0KLSAgICBpZiAobV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSkg
ewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0gbV9yZW5kZXJlckZpbHRlckRhdGFN
YXAuZ2V0KCZyZW5kZXJlcik7Ci0gICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0
ZXJEYXRhOjpQYWludGluZ1NvdXJjZSB8fCBmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRh
OjpBcHBseWluZykKLSAgICAgICAgICAgIGZpbHRlckRhdGEtPnN0YXRlID0gRmlsdGVyRGF0YTo6
Q3ljbGVEZXRlY3RlZDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBbHJlYWR5IGJ1aWx0LCBv
ciB3ZSdyZSBpbiBhIGN5Y2xlLCBvciB3ZSdyZSBtYXJrZWQgZm9yIHJlbW92YWwuIFJlZ2FyZGxl
c3MsIGp1c3QgZG8gbm90aGluZyBtb3JlIG5vdy4KLSAgICB9Ci0KKyAgICAvLyBCdWlsZCB0aGUg
U1ZHRmlsdGVyCiAgICAgYXV0byBmaWx0ZXJEYXRhID0gbWFrZVVuaXF1ZTxGaWx0ZXJEYXRhPigp
OwotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IHJlbmRlcmVyLm9iamVjdEJvdW5k
aW5nQm94KCk7CisgICAgYXV0byByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5h
Y2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAKLSAgICBmaWx0ZXJEYXRhLT5ib3VuZGFy
aWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50
PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0
Qm91bmRpbmdCb3gpOwotICAgIGlmIChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1wdHkoKSkK
KyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50
KCksIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmlsdGVyRGF0YS0+ZmlsdGVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0g
cmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVz
ID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50Pigm
ZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91
bmRpbmdCb3gpOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2VJbWFnZVJlY3QKKyAgICBm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsK
KyAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3Vu
ZGFyaWVzKTsKIAotICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRy
aXggZm9yIGZpbHRlci4gCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZVRyYW5zZm9ybQog
ICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJl
bmRlcmVyKTsKICAgICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDMsNjUgKzExMSwyMiBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25z
dCBSZW5kZQogICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3Jt
YXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2Vz
IGZvciBmZVRpbGUuCiAgICAgZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0g
PSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAsIDAsIGFic29s
dXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKIAotICAgIC8vIERldGVybWluZSBhYnNvbHV0
ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4KLSAgICBm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsK
LSAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3Vu
ZGFyaWVzKTsKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZpbHRlciByZXNvbHV0aW9uCiAgICAgRmxv
YXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbik7CisgICAgZmls
dGVyRGF0YS0+c2NhbGUgPSB7IDEsIDEgfTsKKyAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUoKSwgZmlsdGVyRGF0YS0+c2NhbGUpOwog
Ci0gICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgotICAgIGJvb2wgcHJpbWl0aXZl
Qm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZH
VW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRlckRh
dGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBm
aWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpOwotCi0gICAg
Ly8gQ3JlYXRlIGFsbCByZWxldmFudCBmaWx0ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRh
LT5idWlsZGVyID0gYnVpbGRQcmltaXRpdmVzKCpmaWx0ZXJEYXRhLT5maWx0ZXIpOwotICAgIGlm
ICghZmlsdGVyRGF0YS0+YnVpbGRlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
RGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlh
dGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4K
LSAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247Ci0g
ICAgRmxvYXRTaXplIHNjYWxlKDEsIDEpOwotICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxlKTsKLSAgICB0ZW1wU291cmNlUmVjdC5z
Y2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBTZXQgdGhlIHNj
YWxlIGxldmVsIGluIFNWR0ZpbHRlci4KLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRl
clJlc29sdXRpb24oc2NhbGUpOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFs
T2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmls
dGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBs
YXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0
SW5wdXRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmls
dGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZVxu
IiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpKTsKLQotICAgIGxhc3RFZmZl
Y3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEZsb2F0UmVjdCBz
dWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qg
b25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsCi0gICAgLy8gcmVjYWxj
dWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmIChJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7
Ci0gICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7
Ci0gICAgICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
OwotICAgIH0KLQotICAgIC8vIElmIHRoZSBkcmF3aW5nUmVnaW9uIGlzIGVtcHR5LCB3ZSBoYXZl
IHNvbWV0aGluZyBsaWtlIDxnIGZpbHRlcj0iLi4iLz4uCi0gICAgLy8gRXZlbiBpZiB0aGUgdGFy
Z2V0IG9iamVjdEJvdW5kaW5nQm94KCkgaXMgZW1wdHksIHdlIHN0aWxsIGhhdmUgdG8gZHJhdyB0
aGUgbGFzdCBlZmZlY3QgcmVzdWx0IGltYWdlIGluIHBvc3RBcHBseVJlc291cmNlLgotICAgIGlm
IChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQo
IW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwotICAgICAgICBm
aWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtX3JlbmRlcmVyRmls
dGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZpbHRlckRhdGEpKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoYW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFu
c2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBmaWx0ZXJlZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhl
IHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4KKyAgICAvLyBDYWxjdWxhdGUgZWZmZWN0aXZlVHJh
bnNmb3JtCiAgICAgQWZmaW5lVHJhbnNmb3JtIGVmZmVjdGl2ZVRyYW5zZm9ybTsKLSAgICBlZmZl
Y3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOworICAg
IGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShmaWx0ZXJEYXRhLT5zY2FsZSk7CiAgICAgZWZmZWN0
aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNm
b3JtKTsKIAotICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNj
ZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xP
Ul9TUEFDRV9MSU5FQVJfU1JHQikKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OkxpbmVhclNSR0IoKTsKICNlbHNlCiAgICAgYXV0byBjb2xvclNwYWNlID0gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAjZW5kaWYKKwogICAgIGF1dG8gc291cmNlR3Jh
cGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEt
PmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgcmVuZGVyaW5n
TW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VS
VCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CkBAIC0yMTAs
MTkgKzEzNSwxNSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIAotICAgIC8vIFNldCB0aGUgcmVuZGVyaW5nIG1vZGUgZnJvbSB0aGUg
cGFnZSdzIHNldHRpbmdzLgotICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0UmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKTsKLQorICAgIC8vIFNldCB0aGUgd29ya2luZyBHcmFwaGljQ29udGV4
dCB0byB0aGUgZmlsdGVyIHNvdXJjZUdyYXBoaWMKICAgICBHcmFwaGljc0NvbnRleHQmIHNvdXJj
ZUdyYXBoaWNDb250ZXh0ID0gc291cmNlR3JhcGhpYy0+Y29udGV4dCgpOwotICAKKyAgICAKICAg
ICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyID0gV1RGTW92ZShzb3VyY2VHcmFwaGlj
KTsKICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwotCisgICAgCiAgICAg
Y29udGV4dCA9ICZzb3VyY2VHcmFwaGljQ29udGV4dDsKIAotICAgIEFTU0VSVCghbV9yZW5kZXJl
ckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgbV9yZW5kZXJlckZpbHRl
ckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShmaWx0ZXJEYXRhKSk7Ci0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMjY3LDM4ICsxODgsMTggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBo
aWMKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0
ID0gZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0KLSAgICBpZiAobGFzdEVmZmVj
dCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+Zmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMg
dGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUgY2Fs
bGVkIG9uIHRoZQotICAgICAgICAvLyBpbml0aWFsIGZpbHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0
IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9uIGEKLSAgICAgICAgLy8gc2Vjb25kIGRy
YXdpbmcuCi0gICAgICAgIGlmIChmaWx0ZXJEYXRhLnN0YXRlICE9IEZpbHRlckRhdGE6OkJ1aWx0
KQotICAgICAgICAgICAgZmlsdGVyRGF0YS5maWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUo
ZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyKSk7Ci0KLSAgICAgICAgLy8gQWx3YXlzIHRy
dWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0IChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0
ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlmICghbGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkpIHsK
LSAgICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKLSAg
ICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5j
b3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwot
ICAgICAgICB9CisgICAgaWYgKCFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKIAotICAgICAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNh
dENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1
ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotCi0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShG
bG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgo
KSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGxhc3RF
ZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUo
ZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7CisgICAgICAgIGNvbnRleHQt
PmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2Uo
KS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgICAgICBjb250ZXh0LT5zY2FsZShG
bG9hdFNpemUoMSAvIGZpbHRlckRhdGEuc2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuc2Nh
bGUuaGVpZ2h0KCkpKTsKIAotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRh
dGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgICAgICB9CisgICAgICAgIGF1dG8g
Z2VvbWV0cnkgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZpbHRlckdlb21ldHJ5PihmaWx0ZXJEYXRh
LmJvdW5kYXJpZXMsIGZpbHRlckRhdGEuZHJhd2luZ1JlZ2lvbiwgZmlsdGVyRGF0YS5zaGVhckZy
ZWVBYnNvbHV0ZVRyYW5zZm9ybSwgZmlsdGVyRGF0YS5zY2FsZSk7CisgICAgICAgIGNvbnRleHQt
PmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcigqZmlsdGVyRGF0YS5maWx0ZXIsIGZpbHRlckRhdGEuc291
cmNlR3JhcGhpY0J1ZmZlci5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgIAorICAgICAg
ICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLnNjYWxlKTsKKyAgICAgICAgY29udGV4dC0+Y29u
Y2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIH0KLSAg
ICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOwotCi0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8
PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9uZVxuIik7CiB9CiAKIEZsb2F0UmVjdCBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCkKQEAgLTMwNiwxMCArMjA3LDggQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpyZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYgb2Jq
ZWMKICAgICByZXR1cm4gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0
ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMo
KSwgb2JqZWN0Lm9iamVjdEJvdW5kaW5nQm94KCkpOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCit2b2lkIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
b25zdCBRdWFsaWZpZWROYW1lJikKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwotCiAgICAgTE9HKEZpbHRlcnMsICJSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlciAlcCBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkIHJlbmRlcmVy
ICVwIiwgdGhpcywgb2JqZWN0KTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgb2JqZWN0RmlsdGVy
RGF0YVBhaXIgOiBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcCkgewpAQCAtMzE3LDE2ICsyMTYsNiBA
QCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2Vk
KFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAgICBpZiAoZmlsdGVyRGF0YS0+c3RhdGUg
IT0gRmlsdGVyRGF0YTo6QnVpbHQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBT
VkdGaWx0ZXJCdWlsZGVyKiBidWlsZGVyID0gZmlsdGVyRGF0YS0+YnVpbGRlci5nZXQoKTsKLSAg
ICAgICAgRmlsdGVyRWZmZWN0KiBlZmZlY3QgPSBidWlsZGVyLT5lZmZlY3RCeVJlbmRlcmVyKG9i
amVjdCk7Ci0gICAgICAgIGlmICghZWZmZWN0KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIC8vIFNpbmNlIGFsbCBlZmZlY3RzIHNoYXJlcyB0aGUgc2FtZSBhdHRyaWJ1dGUgdmFsdWUs
IGFsbAotICAgICAgICAvLyBvciBub25lIG9mIHRoZW0gd2lsbCBiZSBjaGFuZ2VkLgotICAgICAg
ICBpZiAoIXByaW1pdHZlLT5zZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1
dGUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNS
ZWN1cnNpdmUoZWZmZWN0KTsKLQogICAgICAgICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUg
c2NyZWVuLgogICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKCpvYmplY3RGaWx0ZXJE
YXRhUGFpci5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAppbmRl
eCA1NjRhYWFkNDhhMjJlM2M0NTA3ZWVmNTBhZGM2NDQwMWQ4NzAzZjgzLi4xNDhhYzA4YjM5ZTgx
Y2YyOTZjNjRmY2JkZWQ4MzE5NmUxYTg5ZDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCkBAIC0yMywxMCArMjMs
OSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKLSNp
bmNsdWRlICJTVkdGaWx0ZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5j
bHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAgLTQyLDggKzQxLDcgQEAgcHVibGljOgogCiAgICAg
RmlsdGVyRGF0YSgpID0gZGVmYXVsdDsKIAotICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRlcjsKKyAgICBSZWZQ
dHI8RmlsdGVyPiBmaWx0ZXI7CiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGlj
QnVmZmVyOwogICAgIEdyYXBoaWNzQ29udGV4dCogc2F2ZWRDb250ZXh0IHsgbnVsbHB0ciB9Owog
ICAgIEFmZmluZVRyYW5zZm9ybSBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybTsKQEAgLTcxLDgg
KzY5LDYgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goY29u
c3QgUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmls
dGVyQnVpbGRlcj4gYnVpbGRQcmltaXRpdmVzKFNWR0ZpbHRlciYpIGNvbnN0OwotCiAgICAgU1ZH
VW5pdFR5cGVzOjpTVkdVbml0VHlwZSBmaWx0ZXJVbml0cygpIGNvbnN0IHsgcmV0dXJuIGZpbHRl
ckVsZW1lbnQoKS5maWx0ZXJVbml0cygpOyB9CiAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlw
ZSBwcmltaXRpdmVVbml0cygpIGNvbnN0IHsgcmV0dXJuIGZpbHRlckVsZW1lbnQoKS5wcmltaXRp
dmVVbml0cygpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGI0NzM5NDM4YzVmM2UyYzY5MWVmM2IwMmJiYmVj
OWQyOTIwNzAzYjcuLmQyZTU5ZDEzOWQ4YzlmNDJjNTdiMDRjYzlhYzczMWY3NGFlYThlMGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQu
aCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgorI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVy
U3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgpAQCAtNDksNiArNTAsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHRWxsaXBzZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNp
bmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgpAQCAtNDI4LDEzICs0MzAsOSBAQCB2b2lkIHdy
aXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyJgogICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwcmltaXRp
dmVVbml0cyIsIGZpbHRlci5wcmltaXRpdmVVbml0cygpKTsKICAgICAgICAgdHMgPDwgIlxuIjsK
ICAgICAgICAgLy8gQ3JlYXRpbmcgYSBwbGFjZWhvbGRlciBmaWx0ZXIgd2hpY2ggaXMgcGFzc2Vk
IHRvIHRoZSBidWlsZGVyLgotICAgICAgICBGbG9hdFJlY3QgZHVtbXlSZWN0OwotICAgICAgICBh
dXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoQWZmaW5lVHJhbnNmb3JtKCksIGR1
bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIHRydWUpOwotICAgICAgICBpZiAoYXV0byBi
dWlsZGVyID0gZmlsdGVyLmJ1aWxkUHJpbWl0aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsKKyAg
ICAgICAgaWYgKFJlZlB0cjxGaWx0ZXI+IGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUo
ZmlsdGVyLmZpbHRlckVsZW1lbnQoKSkpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW06OkluZGVu
dFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLQotICAgICAgICAgICAgaWYgKEZpbHRlckVmZmVjdCog
bGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RFZmZlY3QoKSkKLSAgICAgICAgICAgICAgICBsYXN0
RWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICAgICAgICAgIGR1bW15Rmls
dGVyLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBp
ZiAocmVzb3VyY2UucmVzb3VyY2VUeXBlKCkgPT0gQ2xpcHBlclJlc291cmNlVHlwZSkgewogICAg
ICAgICBjb25zdCBhdXRvJiBjbGlwcGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyJj4ocmVzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQmxlbmRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxl
bWVudC5jcHAKaW5kZXggN2JjZjA0MTgwMGY3OTlmMTE3NGNmZTA0YjgyMmQ2ZDA2NDMxZjY4Ni4u
MTYwZTAwZGNiZWQ2OTVmYjQwNzFlNjE3MWVjZjEyZjJlMTk2NGZjNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRl
ICJGRUJsZW5kLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmls
dGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTAwLDIwICsxMDAs
MTUgQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUJsZW5kRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
Lm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGZpbHRlci5uYW1lZEVmZmVj
dChpbjIoKSk7CiAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKGZpbHRlciwgbW9k
ZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5w
dXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBp
bnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1
dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9OworCisgICAg
cmV0dXJuIHsgRkVCbGVuZDo6Y3JlYXRlKG1vZGUoKSksIHsgeyAqaW5wdXQxIH0sIHsgKmlucHV0
MiB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxl
bmRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAppbmRl
eCA5MDM3Y2IxMjFmOTM2N2I3ODhkOTIxNmUwYjk0MWZjOGIwNmRlYzY2Li4yN2E4MmY1Y2NiNDcw
ZTYzMDZjNTViNDllYWU4MjY0MzNkZThkMmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVu
ZEVsZW1lbnQuaApAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVj
dCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCmluZGV4IDA1MjQ4NTc4YzI3NGM4
ZmEyYjNlMWYyNDRlNDM2Nzg2OGY0MmJhOWMuLjhhYjgwYTI2OGU5ZmMzZDAyMWVkNDIzMzg5YmM0
YjgwOTJjOGExMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0
cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50LmNwcApAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgIlNWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50LmgiCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0
ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xMDAsMTIgKzEwMCwx
MSBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8
UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29s
b3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBh
dXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQx
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZl
Y3RvcjxmbG9hdD4gZmlsdGVyVmFsdWVzOwogICAgIENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBl
ID0gdHlwZSgpOwpAQCAtMTM1LDE1ICsxMzQsMTMgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWwK
ICAgICAgICAgaWYgKChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVggJiYg
c2l6ZSAhPSAyMCkKICAgICAgICAgICAgIHx8IChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEUgJiYgc2l6ZSAhPSAxKQogICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUg
PT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFICYmIHNpemUgIT0gMSkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIAogICAg
ICAgICBmaWx0ZXJWYWx1ZXMgPSB2YWx1ZXMoKTsKICAgICAgICAgZmlsdGVyVmFsdWVzLnNocmlu
a1RvRml0KCk7CiAgICAgfQogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVh
dGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBXVEZNb3ZlKGZpbHRlclZhbHVlcykpOwotICAgIGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAg
cmV0dXJuIHsgRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVy
VmFsdWVzKSksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5oCmluZGV4IDdhYjRhYTQxODFlN2FiMTk4YjEyZTc3YmUyMDZiOWM1YzQxMDIzZmQuLmNhN2E3
ZDVmNTdkNjVhOGNiN2ViOTFmM2JkZDU0NjIyOWQzOTRmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCos
IGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lz
dHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3Ry
aW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCmlu
ZGV4IGU4OTI2N2NlN2QzNDE0NmQyYTY1ZDZmMDFkY2U1ZGVmNDljODJmNzguLjZiMTUxY2FiMjBh
NDg5ODIzNTA5MDdmMzY1YTczY2Y0OGM2M2Q5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNyBA
QAogI2luY2x1ZGUgIlNWR0ZFRnVuY0JFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRkVGdW5jR0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGRUZ1bmNSRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTYyLDEyICs2Miwx
MSBAQCB2b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjbwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1SZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdG
RUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgp
KTsKLSAgICAKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAg
ICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
eyB9OwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWQ7CiAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBncmVlbjsKQEAgLTg1LDkgKzg0LDcgQEAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqIGZpbHQKICAgICAgICAgICAgIGFscGhhID0gZG93bmNhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQ+
KGNoaWxkKS50cmFuc2ZlckZ1bmN0aW9uKCk7CiAgICAgfQogICAgIAotICAgIGF1dG8gZWZmZWN0
ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJl
dHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSwgeyB7ICppbnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKaW5k
ZXggYmI1ODkzNDdkODgyNmRmYjM2MDllZGFjNmU4Yjk5M2E0ZGQ1NDg2My4uZjIyZDUxYTJiZDhj
MjM3NjVkYTk4YmZjMjVlNmEyOThhOGVmMmVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKQEAgLTQzLDcgKzQzLDcgQEAgcHJp
dmF0ZToKICAgICAvLyBGSVhNRTogc3ZnQXR0cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgogICAgIHZv
aWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcm
KSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXIm
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb3NpdGVFbGVtZW50LmNwcAppbmRleCAzY2E5OWI4NzU3MDhiYmQ4YTZiYWY2NTNkYzA2ZmUy
MDVhYzk4MjM1Li42MzA2OTY3YzgzY2E2NDVmMGQ4ZjY1YThhMzE5OThkMjc1ODNkMzAyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcApAQCAtMjMsNyAr
MjMsNyBAQAogI2luY2x1ZGUgIlNWR0ZFQ29tcG9zaXRlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUg
IlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KIApAQCAtNDAsNyArNDAsNyBAQCBpbmxpbmUgU1ZHRkVDb21wb3NpdGVF
bGVtZW50OjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZQogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVn
aXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluQXR0ciwgJlNWR0ZFQ29tcG9zaXRl
RWxlbWVudDo6bV9pbjE+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJv
cGVydHk8U1ZHTmFtZXM6OmluMkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1faW4yPigp
OwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpv
cGVyYXRvckF0dHIsIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUsICZTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVy
UHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgRkVDb21wb3NpdGVPcGVyYXRvciwgJlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9jb21wb3NpdGVPcGVyYXRvcj4oKTsKICAgICAgICAgUHJv
cGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6azFBdHRyLCAmU1ZHRkVD
b21wb3NpdGVFbGVtZW50OjptX2sxPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdp
c3RlclByb3BlcnR5PFNWR05hbWVzOjprMkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1f
azI+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFt
ZXM6OmszQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMz4oKTsKQEAgLTU2LDkgKzU2
LDkgQEAgUmVmPFNWR0ZFQ29tcG9zaXRlRWxlbWVudD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGEKIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3Ry
aW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7
Ci0gICAgICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3Bl
cnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAg
ICAgICAgRkVDb21wb3NpdGVPcGVyYXRvciBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFp
dHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmZyb21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAo
cHJvcGVydHlWYWx1ZSA+IDApCi0gICAgICAgICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFs
SW50ZXJuYWw8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAg
ICAgICBtX2NvbXBvc2l0ZU9wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8RkVDb21wb3NpdGVP
cGVyYXRvcj4ocHJvcGVydHlWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk5
LDcgKzk5LDcgQEAgYm9vbCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QKIHsKICAgICBGRUNvbXBvc2l0ZSog
Y29tcG9zaXRlID0gc3RhdGljX2Nhc3Q8RkVDb21wb3NpdGUqPihlZmZlY3QpOwogICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAgICAgICByZXR1cm4gY29tcG9z
aXRlLT5zZXRPcGVyYXRpb24oc3ZnT3BlcmF0b3IoKSk7CisgICAgICAgIHJldHVybiBjb21wb3Np
dGUtPnNldENvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdG9yKCkpOwogICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6azFBdHRyKQogICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5z
ZXRLMShrMSgpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikKQEAgLTEz
MSwyMCArMTMxLDE1IEBAIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6
OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewot
ICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0g
ICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKLSAg
ICAKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0
byBpbnB1dDIgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4yKCkpOworCiAgICAgaWYgKCFpbnB1dDEg
fHwgIWlucHV0MikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGVmZmVjdCA9
IEZFQ29tcG9zaXRlOjpjcmVhdGUoZmlsdGVyLCBzdmdPcGVyYXRvcigpLCBrMSgpLCBrMigpLCBr
MygpLCBrNCgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsK
LSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVu
ZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9Owor
CisgICAgcmV0dXJuIHsgRkVDb21wb3NpdGU6OmNyZWF0ZShjb21wb3NpdGVPcGVyYXRvcigpLCBr
MSgpLCBrMigpLCBrMygpLCBrNCgpKSwgeyB7ICppbnB1dDEgfSwgeyAqaW5wdXQyIH0gfSB9Owog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKaW5kZXgg
ODFhNzhjODY1N2EwZmEzMDQ0ZGY1YjdjNWEwODBkNmU3Nzk3MjJmNi4uZGM5NTQ3OWI1NmFkOTU4
ZTM2Y2VjZWFhM2JmNGJhNTYxNGI2NmJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuaApAQCAtMjcsMTUgKzI3LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHRlbXBsYXRlPD4KLWlubGluZSB1bnNpZ25lZCBTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0
ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZFQ09N
UE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KK2lubGluZSB1bnNpZ25lZCBTVkdJRExFbnVt
TGltaXRzPENvbXBvc2l0ZU9wZXJhdG9yPjo6aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUoKSB7IHJl
dHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CiAKIHRlbXBsYXRlPD4KLXN0
cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPiB7CitzdHJ1Y3Qg
U1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj4gewogICAgIHN0YXRpYyB1bnNp
Z25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfTElH
SFRFUjsgfQogCi0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhDb21wb3NpdGVPcGVyYXRpb25U
eXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhGRUNvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yKQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0b3IpIHsKICAgICAgICAgY2FzZSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAg
ICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKQEAgLTU4LDcgKzU4LDcgQEAg
c3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+IHsKICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgfQogCi0gICAgc3RhdGljIENvbXBvc2l0ZU9w
ZXJhdGlvblR5cGUgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHN0YXRpYyBG
RUNvbXBvc2l0ZU9wZXJhdG9yIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIGlmICh2YWx1ZSA9PSAib3ZlciIpCiAgICAgICAgICAgICByZXR1cm4gRkVDT01Q
T1NJVEVfT1BFUkFUT1JfT1ZFUjsKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogCiAgICAgU3Ry
aW5nIGluMSgpIGNvbnN0IHsgcmV0dXJuIG1faW4xLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIFN0
cmluZyBpbjIoKSBjb25zdCB7IHJldHVybiBtX2luMi0+Y3VycmVudFZhbHVlKCk7IH0KLSAgICBD
b21wb3NpdGVPcGVyYXRpb25UeXBlIHN2Z09wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdmdP
cGVyYXRvci0+Y3VycmVudFZhbHVlPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+KCk7IH0KKyAgICBG
RUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b21wb3NpdGVPcGVyYXRvci0+Y3VycmVudFZhbHVlPEZFQ29tcG9zaXRlT3BlcmF0b3I+KCk7IH0K
ICAgICBmbG9hdCBrMSgpIGNvbnN0IHsgcmV0dXJuIG1fazEtPmN1cnJlbnRWYWx1ZSgpOyB9CiAg
ICAgZmxvYXQgazIoKSBjb25zdCB7IHJldHVybiBtX2syLT5jdXJyZW50VmFsdWUoKTsgfQogICAg
IGZsb2F0IGszKCkgY29uc3QgeyByZXR1cm4gbV9rMy0+Y3VycmVudFZhbHVlKCk7IH0KQEAgLTkz
LDcgKzkzLDcgQEAgcHVibGljOgogCiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIGluMUFuaW1hdGVk
KCkgeyByZXR1cm4gbV9pbjE7IH0KICAgICBTVkdBbmltYXRlZFN0cmluZyYgaW4yQW5pbWF0ZWQo
KSB7IHJldHVybiBtX2luMjsgfQotICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIHN2Z09wZXJh
dG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX3N2Z09wZXJhdG9yOyB9CisgICAgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbiYgY29tcG9zaXRlT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fY29tcG9z
aXRlT3BlcmF0b3I7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazFBbmltYXRlZCgpIHsgcmV0
dXJuIG1fazE7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazJBbmltYXRlZCgpIHsgcmV0dXJu
IG1fazI7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazNBbmltYXRlZCgpIHsgcmV0dXJuIG1f
azM7IH0KQEAgLTEwOSwxMiArMTA5LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUm
KSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8Rmls
dGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3Ry
eSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1h
dGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1f
aW4yIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwotICAgIFJlZjxTVkdBbmlt
YXRlZEVudW1lcmF0aW9uPiBtX3N2Z09wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6
Y3JlYXRlKHRoaXMsIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIpIH07CisgICAgUmVmPFNWR0Fu
aW1hdGVkRW51bWVyYXRpb24+IG1fY29tcG9zaXRlT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1l
cmF0aW9uOjpjcmVhdGUodGhpcywgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUikgfTsKICAgICBS
ZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazEgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRo
aXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2syIHsgU1ZHQW5pbWF0ZWROdW1i
ZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMyB7IFNW
R0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKaW5kZXggNzhlNDAyMDdmNWIwMmY2NzBmMDQwYjI5Mzc1
ZWFkN2MyYjQ1MmRlMC4uZmM2NzBjOWVjNTZjNDFjMTA5Mjg1NDg0MjdjNWY2YThlMTg1YjFhNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKQEAgLTM4
LDcgKzM4LDcgQEAKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAg
ICAgIGluMTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRTdHJpbmcgICAgICBp
bjI7Ci0gICAgW0ltcGxlbWVudGVkQXM9c3ZnT3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBT
VkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOworICAgIFtJbXBsZW1lbnRlZEFzPWNvbXBv
c2l0ZU9wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBv
cGVyYXRvcjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBr
MTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBrMjsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBrMzsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCmluZGV4IGY3
NTA1ODE1ZGVjYWJiNGVhMzRiNDM1YjQ3ZWE1YTgwYzZhMjZkZjEuLjA4YTkxNDYwNDU3YWY1MWJi
NGQwY2U5NzE4ZjNiOTA5MTIwOGY3MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFNpemUu
aCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgi
CiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpAQCAtMTkxLDEyICsxOTEsMTEgQEAg
dm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmEKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0
MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBp
bnQgb3JkZXJYVmFsdWUgPSBvcmRlclgoKTsKICAgICBpbnQgb3JkZXJZVmFsdWUgPSBvcmRlclko
KTsKQEAgLTIwNiwyMiArMjA1LDIyIEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgfQog
ICAgIC8vIFNwZWMgc2F5cyBvcmRlciBtdXN0IGJlID4gMC4gQmFpbCBpZiBpdCBpcyBub3QuCiAg
ICAgaWYgKG9yZGVyWFZhbHVlIDwgMSB8fCBvcmRlcllWYWx1ZSA8IDEpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIGF1dG8mIGtlcm5lbE1hdHJpeCA9
IHRoaXMtPmtlcm5lbE1hdHJpeCgpOwogICAgIGludCBrZXJuZWxNYXRyaXhTaXplID0ga2VybmVs
TWF0cml4Lml0ZW1zKCkuc2l6ZSgpOwogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhpcyBpcyBhIHJl
cXVpcmVtZW50LCBhbmQgc2hvdWxkIGJhaWwgb3V0IGlmIGZhaWxzCiAgICAgaWYgKG9yZGVyWFZh
bHVlICogb3JkZXJZVmFsdWUgIT0ga2VybmVsTWF0cml4U2l6ZSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpbnQgdGFyZ2V0WFZhbHVlID0gdGFy
Z2V0WCgpOwogICAgIGludCB0YXJnZXRZVmFsdWUgPSB0YXJnZXRZKCk7CiAgICAgaWYgKGhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WEF0dHIpICYmICh0YXJnZXRYVmFsdWUgPCAwIHx8IHRh
cmdldFhWYWx1ZSA+PSBvcmRlclhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4geyB9OwogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhlIGRlZmF1bHQgdmFsdWUg
aXM6IHRhcmdldFggPSBmbG9vciAoIG9yZGVyWCAvIDIgKSkKICAgICBpZiAoIWhhc0F0dHJpYnV0
ZShTVkdOYW1lczo6dGFyZ2V0WEF0dHIpKQogICAgICAgICB0YXJnZXRYVmFsdWUgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGZsb29yZihvcmRlclhWYWx1ZSAvIDIpKTsKICAgICBpZiAoaGFzQXR0cmlidXRl
KFNWR05hbWVzOjp0YXJnZXRZQXR0cikgJiYgKHRhcmdldFlWYWx1ZSA8IDAgfHwgdGFyZ2V0WVZh
bHVlID49IG9yZGVyWVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpczogdGFy
Z2V0WSA9IGZsb29yICggb3JkZXJZIC8gMiApKQogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05h
bWVzOjp0YXJnZXRZQXR0cikpCiAgICAgICAgIHRhcmdldFlWYWx1ZSA9IHN0YXRpY19jYXN0PGlu
dD4oZmxvb3JmKG9yZGVyWVZhbHVlIC8gMikpOwpAQCAtMjM0LDExICsyMzMsMTEgQEAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqIGZpbHRlckIKICAgICAgICAga2VybmVsVW5pdExlbmd0aFlWYWx1ZSA9IDE7CiAg
ICAgfQogICAgIGlmIChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlIDw9IDAgfHwga2VybmVsVW5pdExl
bmd0aFlWYWx1ZSA8PSAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAogICAgIGZsb2F0IGRpdmlzb3JWYWx1ZSA9IGRpdmlzb3IoKTsKICAgICBpZiAoaGFz
QXR0cmlidXRlKFNWR05hbWVzOjpkaXZpc29yQXR0cikgJiYgIWRpdmlzb3JWYWx1ZSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgaWYgKCFoYXNBdHRy
aWJ1dGUoU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKSkgewogICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGtlcm5lbE1hdHJpeFNpemU7ICsraSkKICAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSArPSBr
ZXJuZWxNYXRyaXguaXRlbXMoKVtpXS0+dmFsdWUoKTsKQEAgLTI0Niw5ICsyNDUsMTggQEAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSA9IDE7CiAgICAg
fQogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBJ
bnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllWYWx1ZSksIGRpdmlzb3JWYWx1ZSwgYmlhcygpLCBJ
bnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdldFlWYWx1ZSksIGVkZ2VNb2RlKCksIEZsb2F0UG9p
bnQoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSksIHByZXNl
cnZlQWxwaGEoKSwga2VybmVsTWF0cml4KTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0g
eyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7CisgICAgICAgIEZF
Q29udm9sdmVNYXRyaXg6OmNyZWF0ZSgKKyAgICAgICAgICAgIEludFNpemUob3JkZXJYVmFsdWUs
IG9yZGVyWVZhbHVlKSwKKyAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSwKKyAgICAgICAgICAgIGJp
YXMoKSwKKyAgICAgICAgICAgIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwK
KyAgICAgICAgICAgIGVkZ2VNb2RlKCksCisgICAgICAgICAgICBGbG9hdFBvaW50KGtlcm5lbFVu
aXRMZW5ndGhYVmFsdWUsIGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUpLAorICAgICAgICAgICAgcHJl
c2VydmVBbHBoYSgpLAorICAgICAgICAgICAga2VybmVsTWF0cml4KSwKKyAgICAgICAgeyB7ICpp
bnB1dDEgfSB9CisgICAgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAppbmRleCA4NWMwMDI2
OThjNjI3N2UwNDM3MGQzNTk4MmE5NWI4ZDkwNDliMzM5Li44NDI1OTAyMGE4Njk5Njg5MDkwZDIz
NWE2OTAyZTRhMzMxYzk3ZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQuaApAQCAtMTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAog
ICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1
YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBs
ZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQo
U1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJv
cGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2lu
MSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggMTUyYzk4NWZk
OGU5NWFlOTk1N2U2ZTIxZDZiZjJhMTBjNDU0YmRkNS4uNzFkOGM3ZjM5MGRiYmY1MTkyM2VmMDQx
MzhjOTQ1Yjc2NjVmOTk1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFTGln
aHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTg5LDE0ICs4
OSwxNCBAQCBib29sIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0
QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LAogICAgICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKICAg
ICAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xv
ckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0g
ICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNldExpZ2h0aW5nQ29sb3IoY29sb3IpOwor
ICAgICAgICByZXR1cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXRDb2xvcihjb2xvcik7CiAgICAgfQog
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikKICAgICAgICAg
cmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsK
ICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCiAgICAg
ICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNldERpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29u
c3RhbnQoKSk7CiAKLSAgICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3Vy
Y2UmPihkaWZmdXNlTGlnaHRpbmctPmxpZ2h0U291cmNlKCkpOworICAgIGF1dG8mIGxpZ2h0U291
cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KGRpZmZ1c2VMaWdodGluZy0+c291cmNlKCkp
OwogICAgIGNvbnN0IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0
RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKICAgICBBU1NFUlQobGlnaHRFbGVtZW50
KTsKIApAQCAtMTUxLDI4ICsxNTEsMjUgQEAgdm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdodEUKICAgICBw
cmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRy
PEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0
byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1
dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZWZQ
dHIgbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhp
cyk7CiAgICAgaWYgKCFsaWdodEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4geyB9OwogICAgIAotICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1l
bnQtPmxpZ2h0U291cmNlKCpmaWx0ZXJCdWlsZGVyKTsKKyAgICBhdXRvIGxpZ2h0U291cmNlID0g
bGlnaHRFbGVtZW50LT5saWdodFNvdXJjZShmaWx0ZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBDb2xvciBjb2xvciA9
IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5z
dHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0g
RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwg
ZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZ
KCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0g
eyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFRGlmZnVzZUxp
Z2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwg
a2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNv
dXJjZSkpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCmluZGV4IDY4OTk5NjA5ZjRiNmI1NmE3
NmM4OGVhNTY5NWYxZTBlOWUyMDU1ODAuLjdkOTk0MzFlMTVlY2I2YjNiZjQwYmUyYWUyMjFmNjhk
NTYwNmY2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXIm
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAppbmRleCAwYzVlODI1YmM4MjU2MGYzNmEy
NjllYTZkNzIyZGZkMDUxNzNkOGMyLi45MjdiMzRmMzdhZDU2MjQxZTkwNzc2MjcyOTgxMWE4NWFj
YjUxYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50LmNwcApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgIlNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAi
U1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNW
R05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTE1LDIw
ICsxMTUsMTUgQEAgdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck4KICAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQog
Ci1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAor
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikg
Y29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAg
IGF1dG8gaW5wdXQyID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMigpKTsKICAgICAKICAgICBpZiAo
IWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8g
ZWZmZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShmaWx0ZXIsIHhDaGFubmVsU2VsZWN0
b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBzY2FsZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZl
Y3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7
Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0
OworICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgRkVEaXNwbGFjZW1lbnRNYXA6
OmNyZWF0ZSh4Q2hhbm5lbFNlbGVjdG9yKCksIHlDaGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSks
IHsgeyAqaW5wdXQxIH0sIHsgKmlucHV0MiB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCmluZGV4IGFhOTFkZjM4YjM2
Mjk4ZjEyMWExNDExYzRkMGFlNWVjZDU4NjY1ZDMuLjEyMzc4MDkwODVhZWQyMjc1YjViMDEwZjQ5
OGNmZjZjYjViZTZkZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3Bs
YWNlbWVudE1hcEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50LmgKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6
OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBi
dWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkg
bV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+
IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAppbmRleCBhNjg2YmI4ZmEz
OGQ5ZGRmYTI4ZTAyYWVkOTVlNDFiMDhhMzZmMmY3Li40YzE1M2JlYTE4ZDc3ZWNiNmMwZjIyZDdh
MWIxZTAxMDQxYmI5NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0
YW50TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50
TGlnaHRFbGVtZW50LmNwcApAQCAtMzYsNyArMzYsNyBAQCBSZWY8U1ZHRkVEaXN0YW50TGlnaHRF
bGVtZW50PiBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudCh0YWdO
YW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0
RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CitSZWY8TGlnaHRT
b3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmls
dGVyJikgY29uc3QKIHsKICAgICByZXR1cm4gRGlzdGFudExpZ2h0U291cmNlOjpjcmVhdGUoYXpp
bXV0aCgpLCBlbGV2YXRpb24oKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0
YW50TGlnaHRFbGVtZW50LmgKaW5kZXggZmJkZjcxYzBlY2JkOWY5OTdkNjllYTY1NGI5ZjViYTAz
MTdkNzFjYy4uNDE2ZmU2MGJlN2IxNmQ5MTgxNWNiMzllZjUyM2E5ZjRlNGVhMWViMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaApAQCAtMzAsNyAr
MzAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4g
bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxM
aWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KSA9PSBz
aXplb2YoU1ZHRkVMaWdodEVsZW1lbnQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4IDIyYmNlMWQzMzMxN2M5NTcxZmU1ZDc5ZjRiMzI2
YTg5YmZjNWI2ODEuLjc5NTRlYzI3MDFiM2E4NjhkOGQ2MGRlOWM1ZTQzNDM4Yzk1YmY0NjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKQEAgLTIy
LDcgKzIyLDcgQEAKICNpbmNsdWRlICJTVkdGRURyb3BTaGFkb3dFbGVtZW50LmgiCiAKICNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNs
dWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1Bh
cnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCkBAIC05NywyNyAr
OTcsMjUgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBs
ZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVE
cm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7CiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5k
ZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBpZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGNvbnN0IFNWR1Jl
bmRlclN0eWxlJiBzdmdTdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAg
CiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xv
ckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdT
dHlsZS5mbG9vZE9wYWNpdHkoKTsKIAotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZl
Y3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVh
dGUoZmlsdGVyLCBzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwg
Y29sb3IsIG9wYWNpdHkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9
OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVEcm9wU2hhZG93OjpjcmVhdGUo
c3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGR4KCksIGR5KCksIGNvbG9yLCBvcGFj
aXR5KSwgeyAqaW5wdXQxIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50LmgKaW5kZXggOWI2MmQyNGI0NTRiYjdkMjc1OGU3MTJiNjIxYjhjYmU0
MmY3NDUxZC4uNTI3NWIxZmNhMDBlYmY1NTFlYTBkZGFiYjQwYjU1ZGJkMjAyMTBjOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCkBAIC01Myw3ICs1Myw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJF
ZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0
eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1h
dGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCmluZGV4IGMyMjhlMjJkNTY1ZDBl
MTYzZmY4N2QwYjRiY2FiZDIyNDQ3NThmYzIuLmU2YjhhMjMxOGVjZjU0MmRkYzQ4YWQwZjI5Y2Nk
MzQ3Zjc3MjZhODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcApA
QCAtNTAsMjYgKzUwLDI2IEBAIGJvb2wgU1ZHRkVGbG9vZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVj
dEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhCiAgICAgRkVGbG9vZCog
Zmxvb2QgPSBzdGF0aWNfY2FzdDxGRUZsb29kKj4oZWZmZWN0KTsKIAogICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6Zmxvb2RfY29sb3JBdHRyKQotICAgICAgICByZXR1cm4gZmxvb2QtPnNl
dEZsb29kQ29sb3Ioc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZENvbG9yKCkpOworICAgICAgICByZXR1
cm4gZmxvb2QtPnNldENvbG9yKHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RDb2xvcigpKTsKICAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZsb29kX29wYWNpdHlBdHRyKQotICAgICAgICByZXR1
cm4gZmxvb2QtPnNldEZsb29kT3BhY2l0eShzdHlsZS5zdmdTdHlsZSgpLmZsb29kT3BhY2l0eSgp
KTsKKyAgICAgICAgcmV0dXJuIGZsb29kLT5zZXRPcGFjaXR5KHN0eWxlLnN2Z1N0eWxlKCkuZmxv
b2RPcGFjaXR5KCkpOwogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQ
dHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVGbG9vZEVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgCisgICAgICAgIHJldHVybiB7IH07CisKICAgICBjb25zdCBTVkdS
ZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpOwogCiAg
ICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZp
bHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHls
ZS5mbG9vZE9wYWNpdHkoKTsKIAotICAgIHJldHVybiBGRUZsb29kOjpjcmVhdGUoZmlsdGVyLCBj
b2xvciwgb3BhY2l0eSk7CisgICAgcmV0dXJuIHsgRkVGbG9vZDo6Y3JlYXRlKGNvbG9yLCBvcGFj
aXR5KSwgeyB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUZsb29kRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgK
aW5kZXggYjk2YTQzYWEzMTNlNzVlNGEzMTY3MjQ4YTFiNmY1Y2Y1MWZlZTkxMS4uNDgwNWUyM2Ex
YzczMGEyY2IxYWNmN2NjMzdlZDkzZmE4YTVjYjEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Rmxvb2RFbGVtZW50LmgKQEAgLTM2LDcgKzM2LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBTVkdQ
cm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lzdHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHAKaW5kZXggN2E5OTgyMjRjOTIxOTU1NTI0NGE4NjljYTc4YTgzMGQ1NjNjNTk5ZC4uOWI2ZWUw
NTI5MjM5OGM1NTFkYjc2Njg5NDczYTRlYjJkOGQyZTMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKQEAgLTIzLDcgKzIzLDcgQEAKICNp
bmNsdWRlICJTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0
ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGll
cy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC05NSwxOCArOTUsMTYg
QEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxS
ZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBh
dXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1
dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAo
c3RkRGV2aWF0aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVH
YXVzc2lhbkJsdXI6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9u
WSgpLCBlZGdlTW9kZSgpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEg
fTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFR2F1c3NpYW5CbHVyOjpjcmVh
dGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpLCB7ICppbnB1
dDEgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50LmgKaW5kZXggZDg5ZTFhNzQ4ZmIyYzUwOWUyMTRmZTk0YWU0MTAwMWNlNDhlZTBiMi4u
ZWZkYmYwMDk1MDViMzBmODE5ZWQwYTJiNDIyYjgzYzJhNWQ1MDU4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaApAQCAtNTMsNyArNTMsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNv
bnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0
cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAppbmRleCBlMTQ2ODhhNWViMTc2ZjAyYTE2
YzA1NTBmMDgxMTk1ZDNjMjdlYzRmLi42MzgzNjEyMDFhNWM0Nzc0MjA2MDlkNGM1YTA3MjVkNGQw
Mjg0ZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKQEAgLTE3
NCwxNiArMTc0LDE3IEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENh
Y2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzCiAgICAgUmVuZGVyU1ZHUmVz
b3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbigqcGFyZW50
UmVuZGVyZXIpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUltYWdlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBs
ZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVJ
bWFnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0CiB7CiAgICAgaWYgKG1fY2FjaGVk
SW1hZ2UpCi0gICAgICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UoZmlsdGVyLCBt
X2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpLCBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKCkpOworICAgICAgICByZXR1cm4geyBGRUltYWdlOjpjcmVhdGUoeyAqbV9jYWNoZWRJ
bWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcigpKSB9LCBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KCkpLCB7IH0gfTsKIAogICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRF
bGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIHRyZWVTY29wZSgpKTsKICAgICBpZiAoaXNEZXNj
ZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50T2YodGFyZ2V0LmVsZW1lbnQuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVm
ZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygp
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4geyB9OworLy8gICAgcmV0
dXJuIHsgRkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZShmaWx0ZXIsIHRyZWVTY29wZSgp
LCBocmVmKCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSksIHsgfSB9OwogfQogCiB2b2lkIFNWR0ZF
SW1hZ2VFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJM
PiYgdXJscykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKaW5kZXgg
ZDkzZTBkMGRiOGI4ODY2NTQ4MGYyMTAxNWEyNTZiYWRhMTU0YzVjNy4uZWUxMzk5YTYwN2MzNTFm
NWVhZTkxYWI1NzA4ZTk4NjRkYWRjZTA5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VF
bGVtZW50LmgKQEAgLTU1LDcgKzU1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkRmluaXNo
SW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6
dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1
aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBjbGVhclJlc291cmNl
UmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVxdWVzdEltYWdlUmVzb3VyY2UoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKaW5kZXggY2QwYmZiOWVkY2ZkN2I0ZTFhZjM5YjU1
ZWRiYmJkNzg0YWFlYTg5ZC4uM2ZmZTQ4ZjQ0MDk3NGVlN2E5MWRmZGZlYTEyNDRmYTc0NmZkNTMy
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKQEAgLTI3LDEyICsyNywx
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7Citj
bGFzcyBTVkdGaWx0ZXI7CiAKIGNsYXNzIFNWR0ZFTGlnaHRFbGVtZW50IDogcHVibGljIFNWR0Vs
ZW1lbnQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoU1ZHRkVMaWdodEVsZW1lbnQpOwog
cHVibGljOgotICAgIHZpcnR1YWwgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0
ZXJCdWlsZGVyJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmPExpZ2h0U291cmNlPiBsaWdo
dFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBjb25zdCA9IDA7CiAgICAgc3RhdGljIFNWR0ZFTGln
aHRFbGVtZW50KiBmaW5kTGlnaHRFbGVtZW50KGNvbnN0IFNWR0VsZW1lbnQqKTsKIAogICAgIGZs
b2F0IGF6aW11dGgoKSBjb25zdCB7IHJldHVybiBtX2F6aW11dGgtPmN1cnJlbnRWYWx1ZSgpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAppbmRleCBhNTcyYWQ1M2Q5
ZjFkNjVkYTNkZWY0ZDUxMTNkNTBhNDI1MjE4ODhhLi5kNGEyOTY0NjhjMjA2MmY0ZmRkY2UyYjcw
YTdiYmIyMWM3OGI1YmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJn
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5j
cHAKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtNDQsMjQgKzQzLDIyIEBAIFJlZjxTVkdGRU1l
cmdlRWxlbWVudD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBECiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVNZXJnZUVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJn
ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYg
ZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmls
dGVyKSBjb25zdAogewotICAgIGF1dG8gZWZmZWN0ID0gRkVNZXJnZTo6Y3JlYXRlKGZpbHRlcik7
Ci0gICAgYXV0byYgbWVyZ2VJbnB1dHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOworICAgIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gbWVyZ2VJbnB1dHM7CiAKICAgICBmb3IgKGF1dG8mIG1l
cmdlTm9kZSA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZFTWVyZ2VOb2RlRWxlbWVudD4oKnRoaXMpKSB7
Ci0gICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlk
KG1lcmdlTm9kZS5pbjEoKSk7CisgICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXIubmFt
ZWRFZmZlY3QobWVyZ2VOb2RlLmluMSgpKTsKICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQoV1RG
TW92ZShtZXJnZUVmZmVjdCkpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgbWVy
Z2VJbnB1dHMuYXBwZW5kKG1lcmdlRWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAog
ICAgIG1lcmdlSW5wdXRzLnNocmlua1RvRml0KCk7Ci0KICAgICBpZiAobWVyZ2VJbnB1dHMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVNZXJnZTo6Y3JlYXRlKG1lcmdlSW5w
dXRzLnNpemUoKSksIFdURk1vdmUobWVyZ2VJbnB1dHMpIH07CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKaW5kZXggNzQ1MDg2ODE2ZjY5NzZjNjY5N2RjNTEwNzU4
MDJkMjgzY2Y0ZTNjMi4uZjRkNTA4OGEzMjJhZmRjOTNlNDU2YzEwYzM1YTZiOTQ0Yjc0MDBmYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKQEAgLTM1LDcgKzM1LDcgQEAg
cHJpdmF0ZToKICAgICB1c2luZyBQcm9wZXJ0eVJlZ2lzdHJ5ID0gU1ZHUHJvcGVydHlPd25lclJl
Z2lzdHJ5PFNWR0ZFTWVyZ2VFbGVtZW50LCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM+OwogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0cnko
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KIAotICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBv
dmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKaW5kZXggZDZmYjk1
YzhlMzc3NmU2ZDIwOTNiZWFjZTM1ZTJlZDE3OTVkMzIxYi4uNmE5NGE1ZGUxNjRkNDdlZTYxMmU1
ZmI5ZTc3MjE3Mjg4ODFiMTRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmNwcApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgIlNWR0ZFTW9ycGhv
bG9neUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNW
R0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zOSw3ICszOSw3IEBAIGlubGluZSBTVkdGRU1vcnBob2xv
Z3lFbGVtZW50OjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwogICAgIHN0ZDo6Y2FsbF9v
bmNlKG9uY2VGbGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJv
cGVydHk8U1ZHTmFtZXM6OmluQXR0ciwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1faW4xPigp
OwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpv
cGVyYXRvckF0dHIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsICZTVkdGRU1vcnBob2xvZ3lFbGVt
ZW50OjptX3N2Z09wZXJhdG9yPigpOworICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3Rl
clByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIE1vcnBob2xvZ3lPcGVyYXRvciwgJlNW
R0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fbW9ycGhvbG9neU9wZXJhdG9yPigpOwogICAgICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpyYWRpdXNBdHRyLCAm
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9yYWRpdXNYLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dDo6bV9yYWRpdXNZPigpOwogICAgIH0pOwogfQpAQCAtNTksOSArNTksOSBAQCB2b2lkIFNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQ6OnNldFJhZGl1cyhmbG9hdCB4LCBmbG9hdCB5KQogdm9pZCBTVkdG
RU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1l
czo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgcHJvcGVy
dHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+Ojpmcm9t
U3RyaW5nKHZhbHVlKTsKKyAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yIHByb3BlcnR5VmFsdWUg
PSBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpmcm9tU3RyaW5nKHZhbHVl
KTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQotICAgICAgICAgICAgbV9zdmdPcGVy
YXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+KHByb3BlcnR5
VmFsdWUpOworICAgICAgICAgICAgbV9tb3JwaG9sb2d5T3BlcmF0b3ItPnNldEJhc2VWYWxJbnRl
cm5hbDxNb3JwaG9sb2d5T3BlcmF0b3I+KHByb3BlcnR5VmFsdWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zCiB7CiAg
ICAgRkVNb3JwaG9sb2d5KiBtb3JwaG9sb2d5ID0gc3RhdGljX2Nhc3Q8RkVNb3JwaG9sb2d5Kj4o
ZWZmZWN0KTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKLSAg
ICAgICAgcmV0dXJuIG1vcnBob2xvZ3ktPnNldE1vcnBob2xvZ3lPcGVyYXRvcihzdmdPcGVyYXRv
cigpKTsKKyAgICAgICAgcmV0dXJuIG1vcnBob2xvZ3ktPnNldE1vcnBob2xvZ3lPcGVyYXRvciht
b3JwaG9sb2d5T3BlcmF0b3IoKSk7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyYWRp
dXNBdHRyKSB7CiAgICAgICAgIC8vIEJvdGggc2V0UmFkaXVzIGZ1bmN0aW9ucyBzaG91bGQgYmUg
ZXZhbHVhdGVkIHNlcGFyYXRlbHkuCiAgICAgICAgIGJvb2wgaXNSYWRpdXNYQ2hhbmdlZCA9IG1v
cnBob2xvZ3ktPnNldFJhZGl1c1gocmFkaXVzWCgpKTsKQEAgLTExNCwyMSArMTE0LDE4IEBAIHZv
aWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZp
bHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQx
ID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CiAgICAgZmxvYXQgeFJhZGl1
cyA9IHJhZGl1c1goKTsKICAgICBmbG9hdCB5UmFkaXVzID0gcmFkaXVzWSgpOworICAgIGlmICh4
UmFkaXVzIDwgMCB8fCB5UmFkaXVzIDwgMCkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgIGF1
dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoeFJhZGl1cyA8IDAgfHwgeVJhZGl1
cyA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0g
ICAgYXV0byBlZmZlY3QgPSBGRU1vcnBob2xvZ3k6OmNyZWF0ZShmaWx0ZXIsIHN2Z09wZXJhdG9y
KCksIHhSYWRpdXMsIHlSYWRpdXMpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlu
cHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVNb3JwaG9sb2d5Ojpj
cmVhdGUobW9ycGhvbG9neU9wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRpdXMpLCB7IHsgKmlucHV0
MSB9IH0gfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKaW5kZXggMWE5MDg4Yjc1Y2Y4ZDg1YWUzOGYyOTNl
MTExOThhNjZmNjZhYTY2OS4uY2JmOTViOTNkYjNiYThlYTVjY2MxNWRlZmQzNTVhZDYyNDE0ODhh
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCkBAIC0y
NiwxMiArMjYsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8Pgotc3RydWN0
IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+IHsKK3N0cnVjdCBTVkdQ
cm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+IHsKICAgICBzdGF0aWMgdW5zaWduZWQg
aGlnaGVzdEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU7
IH0KIAotICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0
eXBlKQorICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBo
b2xvZ3lPcGVyYXRvcikKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBz
d2l0Y2ggKG1vcnBob2xvZ3lPcGVyYXRvcikgewogICAgICAgICBjYXNlIEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9VTktOT1dOOgogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAg
ICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFOgpAQCAtNDQsNyArNDQsNyBAQCBz
dHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4gewogICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIE1v
cnBob2xvZ3lPcGVyYXRvciBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAodmFsdWUgPT0gImVyb2RlIikKICAgICAgICAgICAgIHJldHVybiBGRU1PUlBI
T0xPR1lfT1BFUkFUT1JfRVJPREU7CkBAIC02MiwxMiArNjIsMTIgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0UmFkaXVzKGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCiAgICAgU3RyaW5n
IGluMSgpIGNvbnN0IHsgcmV0dXJuIG1faW4xLT5jdXJyZW50VmFsdWUoKTsgfQotICAgIE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgc3ZnT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3N2Z09wZXJh
dG9yLT5jdXJyZW50VmFsdWU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4oKTsgfQorICAgIE1vcnBo
b2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX21vcnBo
b2xvZ3lPcGVyYXRvci0+Y3VycmVudFZhbHVlPE1vcnBob2xvZ3lPcGVyYXRvcj4oKTsgfQogICAg
IGZsb2F0IHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1gtPmN1cnJlbnRWYWx1ZSgp
OyB9CiAgICAgZmxvYXQgcmFkaXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWS0+Y3VycmVu
dFZhbHVlKCk7IH0KIAogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiBpbjFBbmltYXRlZCgpIHsgcmV0
dXJuIG1faW4xOyB9Ci0gICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmlt
YXRlZCgpIHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3I7IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0
aW9uJiBtb3JwaG9sb2d5T3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fbW9ycGhvbG9neU9w
ZXJhdG9yOyB9CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXImIHJhZGl1c1hBbmltYXRlZCgpIHsgcmV0
dXJuIG1fcmFkaXVzWDsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiByYWRpdXNZQW5pbWF0ZWQo
KSB7IHJldHVybiBtX3JhZGl1c1k7IH0KIApAQCAtODEsMTEgKzgxLDExIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
YnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5n
PiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKLSAgICBSZWY8U1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRp
b246OmNyZWF0ZSh0aGlzLCBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpIH07CisgICAgUmVm
PFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fbW9ycGhvbG9neU9wZXJhdG9yIHsgU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVzWCB7IFNWR0FuaW1hdGVkTnVt
YmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVz
WSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwKaW5kZXggYTJjMTgxZjJlNjM3Y2Qz
OTA5OGViZTY5ZTYwOThhYmUzYzM4NWNkMS4uMmQyMWYyYTFkODg4ZDAyZWMxNzlkZjEwZTJkZTQz
ZmM2NTI5N2Q1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmlkbApAQCAtMzMsNyArMzMsNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNWR19N
T1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAgID0gMjsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMTsKLSAgICBbSW1wbGVtZW50ZWRBcz1zdmdPcGVy
YXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gb3BlcmF0b3I7
CisgICAgW0ltcGxlbWVudGVkQXM9bW9ycGhvbG9neU9wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1
dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICByYWRpdXNYOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIHJhZGl1c1k7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFT2Zmc2V0RWxlbWVudC5jcHAKaW5kZXggMDM4MjY4Yjg5YjJmMTlmOWJlNTY4NzM5ZDEyMzAz
NTQxMDBhNWVlNy4uZGM2OTJkYWJiYWZjNGQ2YjZhZjNlNDQyZWNjODVjMTU4Y2QwMTI2MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKQEAgLTI0LDcgKzI0LDcg
QEAKIAogI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0j
aW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApA
QCAtODEsMTYgKzgxLDEzIEBAIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdG
RU9mZnNldEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1
dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBh
dXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0
byBlZmZlY3QgPSBGRU9mZnNldDo6Y3JlYXRlKGZpbHRlciwgZHgoKSwgZHkoKSk7Ci0gICAgZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAg
ICByZXR1cm4geyBGRU9mZnNldDo6Y3JlYXRlKGR4KCksIGR5KCkpLCB7IHsgKmlucHV0MSB9IH0g
fTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCmluZGV4IDU3
NDczZGNjNzJkYjY3YjEyNWVhMmVkNDY1ZTM1YjU3MzcwNDliZWUuLjNlZTg4Y2VmZGQyNTJlNzIw
YmNjNDA2Y2E2NTExNzQxZDA2ZWQxNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU9mZnNldEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRF
bGVtZW50LmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJp
bmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
UG9pbnRMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdo
dEVsZW1lbnQuY3BwCmluZGV4IDlmZjg0NzMzOGExYjZhNTVmY2RiODIxYTA5ZjBhY2MzYzIwN2Vh
ODEuLmRiOTM3Y2ExNTBiODQ0MWI5NDViNGIwNWU3MjBhZmJkNzdhYTU5MzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKQEAgLTIyLDcgKzIyLDYg
QEAKIAogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUG9pbnRMaWdo
dFNvdXJjZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKQEAgLTM5LDE5ICszOCwxOSBA
QCBSZWY8U1ZHRkVQb2ludExpZ2h0RWxlbWVudD4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6Y3Jl
YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3Vy
Y2U+IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXIm
IGJ1aWxkZXIpIGNvbnN0CitSZWY8TGlnaHRTb3VyY2U+IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6
OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlciYpIGNvbnN0CiB7CiAgICAgRmxvYXRQb2ludDNE
IHBvc2l0aW9uOwotICAgIGlmIChidWlsZGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5
cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAgICAgIEZsb2F0UmVj
dCByZWZlcmVuY2VCb3ggPSBidWlsZGVyLnRhcmdldEJvdW5kaW5nQm94KCk7Ci0gICAgICAgIAot
ICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VC
b3gud2lkdGgoKSk7Ci0gICAgICAgIHBvc2l0aW9uLnNldFkocmVmZXJlbmNlQm94LnkoKSArIHko
KSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMu
b3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6
Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdl
Ci0gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNl
Qm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNx
cnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50
M0QoeCgpLCB5KCksIHooKSk7CisvLyAgICBpZiAoZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0g
U1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7CisvLyAgICAg
ICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgpOwor
Ly8KKy8vICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZl
cmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAgICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gu
eSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKKy8vCisvLyAgICAgICAgLy8gaHR0
cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0
ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9y
dF9wZXJjZW50YWdlCisvLyAgICAgICAgcG9zaXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0
YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZ
Q29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOworLy8gICAgfSBlbHNlCisvLyAgICAgICAgcG9z
aXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7CiAgICAgCiAgICAgcmV0dXJuIFBv
aW50TGlnaHRTb3VyY2U6OmNyZWF0ZShwb3NpdGlvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaAppbmRleCAzM2E1YmQ3NDkyMDgyOGM5OTg2NDViNzIy
ZjcyYTc0NWU0OGRhNzllLi5jZGViZTQ3NjE4NDczMTViMmI5Yjg2NmMyMDE0YzBkMzgyOWVjMWZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgKQEAgLTMw
LDcgKzMwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRVBvaW50TGlnaHRFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNl
PiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVm
PExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlk
ZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihTVkdGRVBvaW50TGlnaHRFbGVtZW50KSA9PSBz
aXplb2YoU1ZHRkVMaWdodEVsZW1lbnQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCmluZGV4IDliN2NlNDBhYjk3MTZhZTRm
MzM1ZjU0YjI0Y2RhNDU5YTg0MjlhNTkuLmMxMTY0MWIwZTIwYjZiNjUwYzliZDY3YjlkZDQ2ODI4
YjlkNmRkNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRl
ci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTk2LDcgKzk2LDcgQEAg
Ym9vbCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1
dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgICAgIEFTU0VSVChyZW5kZXJlcik7CiAgICAgICAgIENv
bG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIo
cmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwotICAgICAgICBy
ZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0TGlnaHRpbmdDb2xvcihjb2xvcik7CisgICAgICAg
IHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRDb2xvcihjb2xvcik7CiAgICAgfQogICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikKICAgICAgICAgcmV0dXJu
IHNwZWN1bGFyTGlnaHRpbmctPnNldFN1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUoKSk7CkBAIC0x
MDUsNyArMTA1LDcgQEAgYm9vbCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QKICAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKQogICAgICAgICByZXR1cm4gc3BlY3Vs
YXJMaWdodGluZy0+c2V0U3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KCkpOwogCi0g
ICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25zdF9jYXN0PExpZ2h0U291cmNlJj4oc3BlY3VsYXJM
aWdodGluZy0+bGlnaHRTb3VyY2UoKSk7CisgICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25zdF9j
YXN0PExpZ2h0U291cmNlJj4oc3BlY3VsYXJMaWdodGluZy0+c291cmNlKCkpOwogICAgIGNvbnN0
IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6Zmlu
ZExpZ2h0RWxlbWVudCh0aGlzKTsKICAgICBBU1NFUlQobGlnaHRFbGVtZW50KTsKIApAQCAtMTYw
LDI4ICsxNjAsMzEgQEAgdm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpsaWdodEVs
ZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFNWR0ZFTGlnaHQKICAgICBwcmltaXRpdmVBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9
IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEg
PSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxl
bWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKLSAgICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0
RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgICAgICByZXR1cm4geyB9
OwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAg
aWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgCi0gICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBw
bHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29s
b3IoKSk7Ci0KLSAgICBhdXRvIGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGZp
bHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIHNwZWN1bGFy
RXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RG
TW92ZShsaWdodFNvdXJjZSkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0
MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgUmVmUHRyIGxpZ2h0RWxlbWVudCA9IFNWR0ZF
TGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOworICAgIGlmICghbGlnaHRFbGVt
ZW50KQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiB7CisgICAgICAgIEZF
U3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKAorICAgICAgICAgICAgcmVuZGVyZXItPnN0eWxlKCku
Y29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5s
aWdodGluZ0NvbG9yKCkpLAorICAgICAgICAgICAgc3VyZmFjZVNjYWxlKCksCisgICAgICAgICAg
ICBzcGVjdWxhckNvbnN0YW50KCksCisgICAgICAgICAgICBzcGVjdWxhckV4cG9uZW50KCksCisg
ICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWCgpLAorICAgICAgICAgICAga2VybmVsVW5pdExl
bmd0aFkoKSwKKyAgICAgICAgICAgIGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoZmlsdGVyKSks
CisgICAgICAgIHsgeyAqaW5wdXQxIH0gfQorICAgIH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCmluZGV4IDg5N2I4ZGUx
NTZkMWM3OWExZDNmZDhiMzExOGUyYWI2M2I0N2IxNDYuLjUyZDAxMzI1NzIxOGEyZDA1OWQzNTg5
NTU0YjJhNzJmYTUzZTVlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAK
ICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBR
dWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVw
bGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxk
KFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3By
b3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9p
bjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCmluZGV4IGQ2ZGEzMTA2NGNiMWIzN2U4Y2M5
Mzg3NGVhNGFhOWNmMmRmYmZmZWUuLjkwNGM4YWJhMTQ0ZGQ0YWUzYTg2YzAwYTdkOTQ4ZGQxOTRi
YTU5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3Bw
CkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgiCiAK
ICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNwb3RMaWdodFNvdXJjZS5o
IgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0zOSwyNyArMzgsMjcgQEAgUmVmPFNW
R0ZFU3BvdExpZ2h0RWxlbWVudD4gU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGEKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRVNwb3RMaWdo
dEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmPExpZ2h0U291cmNlPiBTVkdG
RVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIp
IGNvbnN0CitSZWY8TGlnaHRTb3VyY2U+IFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3Vy
Y2UoY29uc3QgU1ZHRmlsdGVyJikgY29uc3QKIHsKICAgICBGbG9hdFBvaW50M0QgcG9zaXRpb247
CiAgICAgRmxvYXRQb2ludDNEIHBvaW50c0F0OwotCi0gICAgaWYgKGJ1aWxkZXIucHJpbWl0aXZl
VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gp
IHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGJ1aWxkZXIudGFyZ2V0Qm91bmRp
bmdCb3goKTsKLSAgICAgICAgCi0gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94Lngo
KSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKLSAgICAgICAgcG9zaXRpb24uc2V0WShy
ZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKLSAgICAgICAg
Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0
dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192
aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFu
RGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhY
TWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLQotICAgICAgICBwb2ludHNBdC5zZXRY
KHJlZmVyZW5jZUJveC54KCkgKyBwb2ludHNBdFgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsK
LSAgICAgICAgcG9pbnRzQXQuc2V0WShyZWZlcmVuY2VCb3gueSgpICsgcG9pbnRzQXRZKCkgKiBy
ZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIv
U1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53
My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAg
ICAgcG9pbnRzQXQuc2V0Wihwb2ludHNBdFooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5j
ZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBz
cXJ0T2ZUd29GbG9hdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBv
aW50M0QoeCgpLCB5KCksIHooKSk7Ci0gICAgICAgIHBvaW50c0F0ID0gRmxvYXRQb2ludDNEKHBv
aW50c0F0WCgpLCBwb2ludHNBdFkoKSwgcG9pbnRzQXRaKCkpOwotICAgIH0KKy8vCisvLyAgICBp
ZiAoZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YKSB7CisvLyAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9
IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgpOworLy8KKy8vICAgICAgICBwb3NpdGlvbi5zZXRY
KHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAg
ICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94Lmhl
aWdodCgpKTsKKy8vICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMu
aHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZH
L2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb3NpdGlv
bi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNvcm5l
cigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7Cisv
LworLy8gICAgICAgIHBvaW50c0F0LnNldFgocmVmZXJlbmNlQm94LngoKSArIHBvaW50c0F0WCgp
ICogcmVmZXJlbmNlQm94LndpZHRoKCkpOworLy8gICAgICAgIHBvaW50c0F0LnNldFkocmVmZXJl
bmNlQm94LnkoKSArIHBvaW50c0F0WSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKKy8vICAg
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGln
aHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1Vu
aXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb2ludHNBdC5zZXRaKHBvaW50c0F0
WigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJl
ZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vICAgIH0g
ZWxzZSB7CisvLyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7
CisvLyAgICAgICAgcG9pbnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRYKCksIHBvaW50c0F0
WSgpLCBwb2ludHNBdFooKSk7CisvLyAgICB9CiAKICAgICByZXR1cm4gU3BvdExpZ2h0U291cmNl
OjpjcmVhdGUocG9zaXRpb24sIHBvaW50c0F0LCBzcGVjdWxhckV4cG9uZW50KCksIGxpbWl0aW5n
Q29uZUFuZ2xlKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3Bv
dExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVu
dC5oCmluZGV4IDNmNzcxN2MxMjY1YzRmMzFmNTMwODg2OGQ0N2M5Nzg3OTdhNzMyMTEuLmJlOThm
YmVkODY2YzViY2UyZjk5NzU3M2Y3NTliYTQyMzMyNWM3NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBTVkdGRVNwb3RMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1
aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNl
KGNvbnN0IFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKFNWR0ZFU3BvdExpZ2h0RWxlbWVudCkgPT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAppbmRleCAzOWJkY2M3NzM1
OTY2NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3MzcwLi43ZGYyNTJkYWE2NjNkMGIwYWVjMTViODE0
YWUyMzBlMzYxNzQxYWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxl
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3Bw
CkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNsdWRlICJGRVRpbGUuaCIKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZH
RmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC03MCwxNiArNzAsMTMg
QEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWls
ZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5h
bWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFVGlsZTo6Y3Jl
YXRlKGZpbHRlcik7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0g
ICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRVRpbGU6OmNyZWF0ZSgpLCB7ICppbnB1
dDEgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxl
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAppbmRleCA0
NWIzMjcxODUxZDdmYzBkYzJkM2JjYzg3OWEyMmRjNDJhMzNhOTFmLi43MWE5NzQ2ODM3NjBhZGMw
MTZjYzZkZWJlZTM1YTE5MTM1MmVkYzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUaWxlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVt
ZW50LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsK
IAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQuY3BwCmluZGV4IDExNTYxMTE5ZDgzZTNmYzc4OGE0MmIxNDg2N2M2NTY0MTIzMzRhNGQu
LmNmZDRhZDIxNmZhNGE5ZDRkM2JiZDAyMDc3OWRhYTY4ZTg1YzdmZTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKQEAgLTExNywxMSArMTE3LDEx
IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXImKSBjb25zdAogewogICAgIGlmIChiYXNlRnJlcXVlbmN5WCgpIDwgMCB8
fCBiYXNlRnJlcXVlbmN5WSgpIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKGZpbHRlciwgdHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgp
LCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9
PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOworICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVy
biB7IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKHR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgoKSwgYmFzZUZy
ZXF1ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBzZWVkKCksIHN0aXRjaFRpbGVzKCkgPT0gU1ZHX1NU
SVRDSFRZUEVfU1RJVENIKSwgeyB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVUdXJidWxlbmNlRWxlbWVudC5oCmluZGV4IGJmOWRhMjJhZDQyZTQxMGExMDQzNWUwYTQwZTM0
MjY3NzY5ZTE5OGEuLmI5MTRkZjM4Y2JhMDBmZDc4YjM4ZjQyYzNiMGZiMDAyZTgyMmE1OWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaApAQCAtMTE5LDcg
KzExOSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlk
ZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmls
dGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlz
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2Jhc2VGcmVxdWVuY3lYIHsgU1ZHQW5p
bWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVs
ZW1lbnQuY3BwCmluZGV4IDgxM2JjYmQwODIwY2FjNjc3YTc5N2YyN2JjY2U4Y2UxMDkxMmJjNDcu
LmRmNjA0YmEyYTZjZDc2ODYyYzkzMzIyZDZjN2RjODkzZGI3ZTllZGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJT
VkdGaWx0ZXJFbGVtZW50LmgiCiAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5o
IgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAppbmRleCBmZjUy
MjMwOTQ2NmIwNDBiZWYwODlkMTU3YjM4NmRmZmJiMDVjNjE5Li43NzFhNDE2ZWYwZWYwNTU4MmQ3
Mjk4MWEzMGNjOWQ2MmU2NTI5ZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcApAQCAtMjUsOSAr
MjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgi
CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05MywyMiArOTEsNiBAQCB2
b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y2hpbGRyZW5DaGFuZ2Vk
KGNvbnN0IENoaWxkQ2hhbmdlJiBjaAogICAgIGludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmlidXRlcyhG
aWx0ZXJFZmZlY3QqIGZpbHRlckVmZmVjdCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZmlsdGVyRWZm
ZWN0KTsKLSAgICBpZiAoIWZpbHRlckVmZmVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNl
dEhhc1godHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQotICAg
ICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1kodHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6d2lkdGhBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNXaWR0aCh0
cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKLSAgICAg
ICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNIZWlnaHQodHJ1ZSk7Ci19Ci0KIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmNyZWF0ZUVs
ZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRp
b24mKQogewogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZT4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRl
eCBjOThiMTNlZDk2Mjc2YWY5ZTE0ZjY0MjgxMWE2ZmQ3NDY3NzJhY2E3Li5lYzI2OWYwM2M0MzYx
NzI4NWMyY2UwNjc4NTIxNGFkN2FhZjA1Zjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCkBAIC0zMSwx
NyArMzEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGaWx0ZXI7CiBjbGFzcyBG
aWx0ZXJFZmZlY3Q7Ci1jbGFzcyBTVkdGaWx0ZXJCdWlsZGVyOworY2xhc3MgU1ZHRmlsdGVyOwog
CiBjbGFzcyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMgOiBwdWJsaWMgU1ZH
RWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMpOwogcHVibGljOgotICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKEZpbHRlckVmZmVjdCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3QgPSAwOwotICAgIC8v
IFJldHVybnMgdHJ1ZSwgaWYgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xk
IG9uZS4KLSAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVm
ZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKLQogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0
cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLCBTVkdFbGVtZW50PjsKIAogICAgIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB4KCkg
Y29uc3QgeyByZXR1cm4gbV94LT5jdXJyZW50VmFsdWUoKTsgfQpAQCAtNTYsNiArNTAsMTAgQEAg
cHVibGljOgogICAgIFNWR0FuaW1hdGVkTGVuZ3RoJiBoZWlnaHRBbmltYXRlZCgpIHsgcmV0dXJu
IG1faGVpZ2h0OyB9CiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIHJlc3VsdEFuaW1hdGVkKCkgeyBy
ZXR1cm4gbV9yZXN1bHQ7IH0KIAorICAgIHZpcnR1YWwgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVy
RWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29u
c3QgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSwgaWYgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJl
bnQgZnJvbSB0aGUgb2xkIG9uZS4KKyAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKwogcHJvdGVjdGVk
OgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyhjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRleCAzODVhZjI5MDg0OGEzZDBiODNmMTJhYzk2
MTllNmJmOTZjOWYyMzk2Li5iZGM1YmU1YjBjZTc5ZDhiYzcxMGNhZmM0NTM3NTZlZWMwYTk3MGUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmNwcApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTMwICsyNCw3MSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZFSW1hZ2UuaCIKIAotI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlck91
dHB1dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlckVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHRWxl
bWVudC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJTVkdV
UklSZWZlcmVuY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRy
PEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2UpCi0g
ICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZl
QXNwZWN0UmF0aW8pCitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlKFJlZjxJbWFnZT4gaW1h
Z2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRp
bykKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKFdURk1vdmUoaW1hZ2UpLCBw
cmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBmaWx0
ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKLSAgICA6IEZpbHRl
ckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQotICAgICwgbV90cmVlU2NvcGUoJnRyZWVTY29w
ZSkKLSAgICAsIG1faHJlZihocmVmKQorRkVJbWFnZTo6RkVJbWFnZShSZWY8SW1hZ2U+IGltYWdl
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8p
CisgICAgOiBtX2ltYWdlKFdURk1vdmUoaW1hZ2UpKQogICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJh
dGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7CiB9CiAKLVJlZjxGRUltYWdlPiBGRUltYWdlOjpj
cmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKK0Zsb2F0
UmVjdCBGRUltYWdlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJ
bWFnZShmaWx0ZXIsIGltYWdlLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CisgICAgcmV0dXJuIHsg
fTsKKy8vICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9y
bSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOworLy8KKy8vICAgIEZsb2F0
UmVjdCBzcmNSZWN0ID0geyB7IH0sIG1faW1hZ2UtPnNpemUoKSB9OworLy8gICAgbV9wcmVzZXJ2
ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QocGFpbnRSZWN0LCBzcmNSZWN0KTsKKy8vCisvLyAg
ICBpZiAoY2xpcHNUb0JvdW5kcygpKQorLy8gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4
RWZmZWN0UmVjdCgpKTsKKy8vICAgIGVsc2UKKy8vICAgICAgICBwYWludFJlY3QudW5pdGUobWF4
RWZmZWN0UmVjdCgpKTsKKy8vCisvLyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChwYWludFJl
Y3QpOwogfQogCi1SZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZShG
aWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQor
Ym9vbCBGRUltYWdlOjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIElt
YWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRUltYWdlKGZpbHRlciwgdHJlZVNjb3BlLCBocmVmLCBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KSk7Ci19Ci0KLXZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewot
ICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1h
cFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0
OwotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIHNyY1JlY3Quc2V0U2l6ZShtX2ltYWdlLT5z
aXplKCkpOwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChwYWlu
dFJlY3QsIHNyY1JlY3QpOwotICAgIH0gZWxzZSBpZiAoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIg
PSByZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29s
dXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSk7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3Qu
aW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3Qu
dW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KHBhaW50UmVjdCkpOworLy8gICAgQVNTRVJUKHNvdXJjZUltYWdlKTsKKy8vCisv
LyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisvLyAgICBpZiAo
IXJlc3VsdEltYWdlKQorLy8gICAgICAgIHJldHVybiBmYWxzZTsKKy8vCisvLyAgICBGbG9hdFJl
Y3QgZGVzdFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCkpOworLy8gICAgRmxvYXRSZWN0IHNyY1JlY3QgPSBGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOworLy8gICAgbV9wcmVzZXJ2ZUFzcGVj
dFJhdGlvLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOworLy8KKy8vICAgIEludFBv
aW50IHBhaW50TG9jYXRpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CisvLyAg
ICBkZXN0UmVjdC5tb3ZlKC1wYWludExvY2F0aW9uLngoKSwgLXBhaW50TG9jYXRpb24ueSgpKTsK
Ky8vCisvLyAgICByZXN1bHRJbWFnZS5jb250ZXh0KCkuZHJhd0ltYWdlKCptX2ltYWdlLCBkZXN0
UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlbmRlckVsZW1lbnQqIEZF
SW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFSW1hZ2U6
OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1
ZmZlciopIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3RyZWVTY29wZSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRG
cm9tSVJJU3RyaW5nKG1faHJlZiwgKm1fdHJlZVNjb3BlKTsKLSAgICBpZiAoIWlzPFNWR0VsZW1l
bnQ+KHRhcmdldC5lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IHRhcmdldC5lbGVtZW50LT5yZW5kZXJlcigpOwotfQotCi12b2lkIEZFSW1hZ2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVu
Y2VkUmVuZGVyZXIoKTsKLSAgICBpZiAoIW1faW1hZ2UgJiYgIXJlbmRlcmVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKQotICAgIHNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCkpOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOwotCi0gICAgRmxvYXRS
ZWN0IHNyY1JlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVy
KCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgc3JjUmVjdCA9IEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgICAgIG1fcHJlc2VydmVBc3Bl
Y3RSYXRpby50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAgICB9Ci0KLSAgICBJ
bnRQb2ludCBwYWludExvY2F0aW9uID0gYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwot
ICAgIGRlc3RSZWN0Lm1vdmUoLXBhaW50TG9jYXRpb24ueCgpLCAtcGFpbnRMb2NhdGlvbi55KCkp
OwotCi0gICAgYXV0byYgY29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0KLSAgICBp
ZiAocmVuZGVyZXIpIHsKLSAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRy
YW5zZm9ybSA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCk7Ci0gICAgICAgIGNvbnRleHQu
Y29uY2F0Q1RNKGFic29sdXRlVHJhbnNmb3JtKTsKLQotICAgICAgICBSZWZQdHIgY29udGV4dE5v
ZGUgPSBkb3duY2FzdDxTVkdFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVudCgpKTsKLSAgICAgICAg
aWYgKGNvbnRleHROb2RlLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgewotICAgICAgICAgICAgU1ZH
TGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KGNvbnRleHROb2RlLmdldCgpKTsKLSAgICAgICAg
ICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemU7Ci0KLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIHJl
ZmVyZW5jaW5nIGFuIGVsZW1lbnQgd2l0aCBwZXJjZW50YWdlIHVuaXRzLCBlZy4gPHJlY3Qgd2l0
aD0iMzAlIj4gdGhvc2UgdmFsdWVzIHdlcmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgdmlld3BvcnQu
Ci0gICAgICAgICAgICAvLyBCdWlsZCB1cCBhIHRyYW5zZm9ybWF0aW9uIHRoYXQgbWFwcyBmcm9t
IHRoZSB2aWV3cG9ydCBzcGFjZSB0byB0aGUgZmlsdGVyIHByaW1pdGl2ZSBzdWJyZWdpb24uCi0g
ICAgICAgICAgICBpZiAobGVuZ3RoQ29udGV4dC5kZXRlcm1pbmVWaWV3cG9ydCh2aWV3cG9ydFNp
emUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG1ha2VNYXBCZXR3ZWVuUmVj
dHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdmlld3BvcnRTaXplKSwgZGVzdFJlY3QpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZW50VHJhbnNmb3JtYXRpb247
Ci0gICAgICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0NvbnRleHQoY29u
dGV4dCwgKnJlbmRlcmVyLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRo
aXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBjb250ZXh0LmRyYXdJbWFnZSgq
bV9pbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91
dHB1dCwgeyB9LCBudWxscHRyKTsKIH0KIAotVGV4dFN0cmVhbSYgRkVJbWFnZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2Vu
dGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgRmxv
YXRTaXplIGltYWdlU2l6ZTsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgaW1hZ2VTaXplID0g
bV9pbWFnZS0+c2l6ZSgpOwotICAgIGVsc2UgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBy
ZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAgICAgICAgaW1hZ2VTaXplID0gZW5jbG9zaW5nSW50UmVj
dChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkuc2l6ZSgpOworICAg
IEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlLT5zaXplKCk7CiAgICAgdHMgPDwgaW5kZW50
IDw8ICJbZmVJbWFnZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBpbWFnZS1zaXplPVwiIiA8PCBpbWFn
ZVNpemUud2lkdGgoKSA8PCAieCIgPDwgaW1hZ2VTaXplLmhlaWdodCgpIDw8ICJcIl1cbiI7CiAg
ICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGR1bXAgYWxzbyBvYmplY3QgcmV0dXJuZWQgYnkgU1ZH
RkVJbWFnZTo6aW1hZ2UoKSA/CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGFjMTYwZWRjZTdjMGUwYTA2
N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLmE4MTQ0Zjc2N2NiZDg3NGNlZjQ1MDY5NWFjMGJhZjUw
ZDJjZDFjNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDM2ICsyOCwyNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50OwogY2xhc3MgSW1hZ2U7Ci1j
bGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgVHJlZVNjb3BlOwogCiBjbGFzcyBGRUltYWdlIGZp
bmFsIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUlt
YWdlPiBjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVX
aXRoSVJJUmVmZXJlbmNlKEZpbHRlciYsIFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4g
Y3JlYXRlKFJlZjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwog
CiBwcml2YXRlOgotICAgIHZpcnR1YWwgfkZFSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgRkVJbWFn
ZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUmKTsKLSAgICBGRUltYWdlKEZpbHRlciYsIFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIEZFSW1hZ2UoUmVmPEltYWdl
PiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKICAgICBjb25zdCBjaGFy
KiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFSW1hZ2UiOyB9CiAKLSAgICBG
aWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBG
aWx0ZXJFZmZlY3RUeXBlSW1hZ2U7IH0KKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3Qg
RmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBSZW5kZXJFbGVtZW50KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25z
dDsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZl
Y3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIGZpbmFsOwotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBmaW5hbDsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdCBmaW5hbDsKIAotICAgIC8vIG1fdHJlZVNjb3BlIHdpbGwgbmV2
ZXIgYmUgYSBkYW5nbGluZyByZWZlcmVuY2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTkyNDMKLSAgICBUcmVlU2NvcGUqIG1fdHJlZVNjb3BlIHsgbnVsbHB0
ciB9OwotICAgIFN0cmluZyBtX2hyZWY7CisgICAgUmVmPEltYWdlPiBtX2ltYWdlOwogICAgIFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBtX3ByZXNlcnZlQXNwZWN0UmF0aW87CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApp
bmRleCA5YTk0YTQ2MDM1ODc5MDhhMzg0ZDE3NDI3YjM3MTkzNTkyYjdiY2U3Li41NzMyMDlhZTg5
ZTRlOWZkODgxNGI0ZDY4YTJjZTE2ZTQwOGFkZmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwyOSArMjMsMTU4IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAKKyNpbmNsdWRlICJGaWx0ZXJPdXRw
dXQuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMu
aCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29s
dXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0Jv
eCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCi0g
ICAgOiBGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0pCi0gICAgLCBtX2Fic29sdXRlU291cmNlRHJh
d2luZ1JlZ2lvbihhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24pCi0gICAgLCBtX3RhcmdldEJv
dW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVy
UmVnaW9uKQotICAgICwgbV9lZmZlY3RCQm94TW9kZShlZmZlY3RCQm94TW9kZSkKK1JlZlB0cjxT
VkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1l
bnQsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0Vm
ZmVjdCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0g
MjAwOworICAgIGlmIChmaWx0ZXJFbGVtZW50LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRD
aGlsZE5vZGVzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gZmlsdGVyID0g
YWRvcHRSZWYobmV3IFNWR0ZpbHRlcihyZW5kZXJpbmdNb2RlKSk7CisgICAgCisgICAgZmlsdGVy
LT5zZXR1cEJ1aWx0aW5FZmZlY3RzKHByZXZpb3VzRWZmZWN0KTsKKyAgICAKKyAgICBGaWx0ZXJF
ZmZlY3RzSW5wdXRzIGVmZmVjdHNJbnB1dHM7CisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRWZmZWN0
cyhmaWx0ZXJFbGVtZW50LCBlZmZlY3RzSW5wdXRzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBpZiAoIWZpbHRlci0+YnVpbGRFeHByZXNzaW9uKGVmZmVjdHNJbnB1dHMpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBmaWx0ZXI7Cit9CisKK1NWR0ZpbHRl
cjo6U1ZHRmlsdGVyKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKKyAgICA6IEZpbHRlcihy
ZW5kZXJpbmdNb2RlLCBUeXBlOjpTVkcpCit7Cit9CisKK3ZvaWQgU1ZHRmlsdGVyOjphZGROYW1l
ZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBSZWY8RmlsdGVyRWZmZWN0PiBlZmZlY3Qp
Cit7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fbGFzdEVmZmVjdCA9IGVm
ZmVjdC5wdHIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2J1aWx0aW5F
ZmZlY3RzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xhc3RFZmZl
Y3QgPSBlZmZlY3QucHRyKCk7CisgICAgbV9uYW1lZEVmZmVjdHMuc2V0KG5hbWUsIFdURk1vdmUo
ZWZmZWN0KSk7Cit9CisKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlcjo6bmFtZWRFZmZl
Y3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBpZiAobmFtZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgaWYgKG1fbGFzdEVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBtX2xh
c3RFZmZlY3Q7CisKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KFNvdXJjZUdy
YXBoaWM6OmVmZmVjdE5hbWUoKSk7CisgICAgfQorCisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMu
Y29udGFpbnMobmFtZSkpCisgICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChuYW1l
KTsKKworICAgIHJldHVybiBtX25hbWVkRWZmZWN0cy5nZXQobmFtZSk7Cit9CisKK3ZvaWQgU1ZH
RmlsdGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3RzKEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3Qp
CiB7Ci0gICAgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbiA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJl
Y3QoZmlsdGVyUmVnaW9uKTsKKyAgICBpZiAocHJldmlvdXNFZmZlY3QpIHsKKyAgICAgICAgbV9i
dWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBSZWY8RmlsdGVy
RWZmZWN0PiB7ICpwcmV2aW91c0VmZmVjdCB9KTsKKyAgICAgICAgbV9idWlsdGluRWZmZWN0cy5h
ZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNvdXJjZUdy
YXBoaWM6OmNyZWF0ZSgpOworICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6
OmVmZmVjdE5hbWUoKSwgc291cmNlR3JhcGhpYyk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQo
U291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgpKTsKIH0KIAot
RmxvYXRTaXplIFNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSBz
aXplKSBjb25zdAorYm9vbCBTVkdGaWx0ZXI6OmJ1aWxkRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50
JiBmaWx0ZXJFbGVtZW50LCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzKQogewot
ICAgIGlmIChtX2VmZmVjdEJCb3hNb2RlKQotICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFyZ2V0
Qm91bmRpbmdCb3guc2l6ZSgpOworICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IG5hbWVkRWZmZWN0
KFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSk7CisgICAgYXV0byBzb3VyY2VBbHBoYSA9IG5h
bWVkRWZmZWN0KFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkpOworICAgIGVmZmVjdHNJbnB1dHMu
c2V0KHNvdXJjZUFscGhhLnJlbGVhc2VOb25OdWxsKCksIEZpbHRlckVmZmVjdFZlY3RvciB7IHNv
dXJjZUdyYXBoaWMucmVsZWFzZU5vbk51bGwoKSB9KTsKKworICAgIGZvciAoYXV0byYgZWZmZWN0
RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcz4oZmlsdGVyRWxlbWVudCkpIHsKKyAgICAgICAgYXV0byBbZWZmZWN0LCBpbnB1dHNdID0g
ZWZmZWN0RWxlbWVudC5idWlsZCgqdGhpcyk7CisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGVmZmVjdHNJbnB1dHMuc2V0KHsgKmVmZmVj
dCB9LCBXVEZNb3ZlKGlucHV0cykpOworICAgICAgICBhZGROYW1lZEVmZmVjdChlZmZlY3RFbGVt
ZW50LnJlc3VsdCgpLCBlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHRmlsdGVyOjpidWlsZEV4cHJlc3Npb24oY29uc3QgUmVm
PEZpbHRlckVmZmVjdD4mIGVmZmVjdCwgY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0
c0lucHV0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiBzdGFjaykKK3sKKyAgICBpZiAoc3RhY2suY29u
dGFpbnMoZWZmZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fZXhwcmVz
c2lvbi5pbnNlcnQoMCwgeyBlZmZlY3QgfSk7CisKKyAgICBzdGFjay5hcHBlbmQoZWZmZWN0KTsK
KworICAgIGZvciAoYXV0byYgaW5wdXRFZmZlY3QgOiBlZmZlY3RzSW5wdXRzLmdldChlZmZlY3Qp
KSB7CisgICAgICAgIGlmICghYnVpbGRFeHByZXNzaW9uKGlucHV0RWZmZWN0LCBlZmZlY3RzSW5w
dXRzLCBzdGFjaykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNT
RVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChzdGFjay5sYXN0KCkucHRyKCkgPT0g
ZWZmZWN0LnB0cigpKTsKKworICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbihjb25zdCBGaWx0ZXJFZmZl
Y3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzKQoreworICAgIGlmICghbV9sYXN0RWZmZWN0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIHN0YWNrOwor
ICAgIHJldHVybiBidWlsZEV4cHJlc3Npb24oeyAqbV9sYXN0RWZmZWN0IH0sIGVmZmVjdHNJbnB1
dHMsIHN0YWNrKTsKK30KKworRmlsdGVyUmVzdWx0KiBTVkdGaWx0ZXI6OmFwcGx5KEZpbHRlck91
dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UpIGNvbnN0Cit7CisgICAgaWYgKCFtX2xhc3RFZmZlY3QpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgaWYgKCFzdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHNvdXJjZUlt
YWdlID0gc3RhY2sudGFrZUxhc3QoKS0+aW1hZ2VCdWZmZXIoKTsKKworICAgIGlmIChhdXRvIHJl
c3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZXhwcmVzc2lvbikgeworICAgICAg
ICBhdXRvIHJlc3VsdCA9IGVmZmVjdC0+YXBwbHkob3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2Up
OworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIHN0YWNrLmFwcGVuZCh7ICpyZXN1bHQgfSk7CisgICAgICAgIG91dHB1dC5yZXN1bHRz
KCkuYWRkKGVmZmVjdCwgUmVmPEZpbHRlclJlc3VsdD4oKnJlc3VsdCkpOworICAgIH0KIAotICAg
IHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzaXplKSAqIG1fYWJzb2x1
dGVGaWx0ZXJSZWdpb24uc2l6ZSgpIC8gbV9maWx0ZXJSZWdpb24uc2l6ZSgpOworICAgIEFTU0VS
VChzdGFjay5zaXplKCkgPT0gMSk7CisgICAgYXV0byByZXN1bHQgPSBzdGFjay50YWtlTGFzdCgp
OworICAgIHJlc3VsdC0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpKTsKKyAgICByZXR1cm4gJnJlc3VsdC5sZWFrUmVmKCk7CiB9CiAKLVJlZjxTVkdG
aWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVU
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRl
clJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK1RleHRTdHJlYW0mIFNWR0ZpbHRlcjo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24g
cmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRmls
dGVyKGFic29sdXRlVHJhbnNmb3JtLCBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIHRhcmdl
dEJvdW5kaW5nQm94LCBmaWx0ZXJSZWdpb24sIGVmZmVjdEJCb3hNb2RlKSk7CisgICAgZm9yIChh
dXRvJiBlZmZlY3QgOiBtX2V4cHJlc3Npb24pCisgICAgICAgIGVmZmVjdC0+ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHJldHVybiB0czsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuaAppbmRleCA4MDkzMTQ2ZDY0YWY4ODg1YmMzZGE0OTMwMmY1YWVhMGZi
MTcwMGNmLi5kMjliZWI1NzlkM2VmZWFiY2E4NDNkOGFlNjIxMDNkNWJjODNjZDRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtMSw2
ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw0MSArMjEsNTYgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNp
bmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CisKIGNsYXNzIFNWR0ZpbHRl
ciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTVkdGaWx0ZXI+IGNyZWF0ZShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBib29sKTsKKyAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0Zp
bHRlckVsZW1lbnQmLCBSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCA9IG51bGxwdHIpOwogCi0gICAgRmxvYXRS
ZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0
ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsgfQorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IG5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2xhc3RFZmZlY3Q7IH0K
IAotICAgIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplKSBjb25z
dCBmaW5hbDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UmVmPFNWR0ZpbHRlcj4+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICBGbG9hdFJl
Y3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZVNvdXJj
ZURyYXdpbmdSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9Citwcml2YXRlOgorICAgIFNWR0ZpbHRl
cihSZW5kZXJpbmdNb2RlKTsKIAotICAgIGJvb2wgaXNTVkdGaWx0ZXIoKSBjb25zdCBmaW5hbCB7
IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBhZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5n
JiBuYW1lLCBSZWY8RmlsdGVyRWZmZWN0Pik7CiAKLXByaXZhdGU6Ci0gICAgU1ZHRmlsdGVyKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYg
YWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5k
aW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9k
ZSk7CisgICAgdm9pZCBzZXR1cEJ1aWx0aW5FZmZlY3RzKEZpbHRlckVmZmVjdCogcHJldmlvdXNF
ZmZlY3QpOworICAgIGJvb2wgYnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmLCBGaWx0ZXJF
ZmZlY3RzSW5wdXRzJik7CisgICAgYm9vbCBidWlsZEV4cHJlc3Npb24oY29uc3QgUmVmPEZpbHRl
ckVmZmVjdD4mLCBjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiwgRmlsdGVyRWZmZWN0VmVjdG9y
JiBzdGFjayk7CisgICAgYm9vbCBidWlsZEV4cHJlc3Npb24oY29uc3QgRmlsdGVyRWZmZWN0c0lu
cHV0cyYpOwogCi0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOwot
ICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX2Fic29s
dXRlRmlsdGVyUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKLSAgICBib29s
IG1fZWZmZWN0QkJveE1vZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IGZpbmFsOworCisgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IGZpbmFsOworCisgICAgSGFzaE1h
cDxBdG9tU3RyaW5nLCBSZWY8RmlsdGVyRWZmZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKKyAgICBI
YXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsKKyAg
ICBWZWN0b3I8UmVmPGNvbnN0IEZpbHRlckVmZmVjdD4+IG1fZXhwcmVzc2lvbjsKKyAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZlY3Q7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPiB2b2lkIFNWR0ZpbHRlcjo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAoreworICAgIAor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPFJlZjxTVkdGaWx0
ZXI+PiBTVkdGaWx0ZXI6OmRlY29kZShEZWNvZGVyJikKK3sKKyAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmlsdGVyKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25z
dCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikgeyByZXR1cm4gZmlsdGVyLmlzU1ZHRmlsdGVyKCk7
IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIp
IHsgcmV0dXJuIGZpbHRlci50eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyOjpUeXBlOjpTVkc7IH0K
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk2ZjNhODA1MDQyOTU1NTgxMDM0ZDk4YTRmZGFjNGVhZjMwODdi
OTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlNWR0ZpbHRlckJ1aWxkZXIuaCIKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1
ZGUgIlNvdXJjZUFscGhhLmgiCi0jaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVNWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIoUmVmUHRyPEZpbHRlckVm
ZmVjdD4gc291cmNlR3JhcGhpYykKLXsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VH
cmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMpOwotICAgIG1fYnVpbHRpbkVmZmVj
dHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKnNv
dXJjZUdyYXBoaWMpKTsKLSAgICBhZGRCdWlsdGluRWZmZWN0cygpOwotfQotCi12b2lkIFNWR0Zp
bHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0KQotewotICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9sYXN0RWZm
ZWN0ID0gZWZmZWN0OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fYnVpbHRp
bkVmZmVjdHMuY29udGFpbnMoaWQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3RFZmZl
Y3QgPSBlZmZlY3Q7Ci0gICAgbV9uYW1lZEVmZmVjdHMuc2V0KGlkLCBtX2xhc3RFZmZlY3QpOwot
fQotCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlk
KGNvbnN0IEF0b21TdHJpbmcmIGlkKSBjb25zdAotewotICAgIGlmIChpZC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgaWYgKG1fbGFzdEVmZmVjdCkKLSAgICAgICAgICAgIHJldHVybiBtX2xhc3RFZmZl
Y3Q7Ci0KLSAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KFNvdXJjZUdyYXBoaWM6
OmVmZmVjdE5hbWUoKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFp
bnMoaWQpKQotICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoaWQpOwotCi0gICAg
cmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChpZCk7Ci19Ci0KLXZvaWQgU1ZHRmlsdGVyQnVpbGRl
cjo6YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYg
ZWZmZWN0LCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICAvLyBUaGUgZWZmZWN0IG11c3Qg
YmUgYSBuZXdseSBjcmVhdGVkIGZpbHRlciBlZmZlY3QuCi0gICAgQVNTRVJUKCFtX2VmZmVjdFJl
ZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgIW1fZWZm
ZWN0UmVuZGVyZXIuY29udGFpbnMob2JqZWN0KSk7Ci0gICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFk
ZChlZmZlY3QsIEZpbHRlckVmZmVjdFNldCgpKTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mSW5w
dXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5zaXplKCk7Ci0KLSAgICAvLyBJdCBp
cyBub3QgcG9zc2libGUgdG8gYWRkIHRoZSBzYW1lIHZhbHVlIHRvIGEgc2V0IHR3aWNlLgotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklucHV0RWZmZWN0czsgKytpKQotICAg
ICAgICBlZmZlY3RSZWZlcmVuY2VzKGVmZmVjdC0+aW5wdXRFZmZlY3QoaSkpLmFkZChlZmZlY3Qu
Z2V0KCkpOwotCi0gICAgLy8gSWYgb2JqZWN0IGlzIG51bGwsIHRoYXQgbWVhbnMgdGhlIGVsZW1l
bnQgaXNuJ3QgYXR0YWNoZWQgZm9yIHNvbWUKLSAgICAvLyByZWFzb24sIHdoaWNoIGluIHR1cm4g
bWVhbiB0aGF0IGNlcnRhaW4gdHlwZXMgb2YgaW52YWxpZGF0aW9uIHdpbGwgbm90Ci0gICAgLy8g
d29yayAodGhlIExheW91dE9iamVjdCAtPiBGaWx0ZXJFZmZlY3QgbWFwcGluZyB3aWxsIG5vdCBi
ZSBkZWZpbmVkKS4KLSAgICBpZiAob2JqZWN0KQotICAgICAgICBtX2VmZmVjdFJlbmRlcmVyLmFk
ZChvYmplY3QsIGVmZmVjdC5nZXQoKSk7Ci19Ci0KLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xl
YXJFZmZlY3RzKCkKLXsKLSAgICBtX2xhc3RFZmZlY3QgPSBudWxscHRyOwotICAgIG1fbmFtZWRF
ZmZlY3RzLmNsZWFyKCk7Ci0gICAgbV9lZmZlY3RSZWZlcmVuY2VzLmNsZWFyKCk7Ci0gICAgbV9l
ZmZlY3RSZW5kZXJlci5jbGVhcigpOwotICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7Ci19Ci0KLXZv
aWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCog
ZWZmZWN0KQotewotICAgIGlmICghZWZmZWN0LT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOwotCi0gICAgZm9yIChhdXRvJiByZWZlcmVu
Y2UgOiBlZmZlY3RSZWZlcmVuY2VzKGVmZmVjdCkpCi0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vy
c2l2ZShyZWZlcmVuY2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3N2FlMDhiYWM2NWMzYzJjZmM4OTc0ZmEz
M2U3NjQ2MGNlOTdmYTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5o
IgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlck9iamVjdDsK
LWNsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7Ci0KLWNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHR5cGVkZWYgSGFzaFNldDxG
aWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7Ci0KLSAgICBTVkdGaWx0ZXJCdWlsZGVyKFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOwotCi0gICAgdm9pZCBzZXRUYXJnZXRC
b3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV90YXJnZXRCb3VuZGluZ0JveCA9IHI7
IH0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldEJvdW5kaW5nQm94OyB9Ci0gICAgCi0gICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBw
cmltaXRpdmVVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlVW5pdHM7IH0KLSAgICB2
b2lkIHNldFByaW1pdGl2ZVVuaXRzKFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgdW5pdHMpIHsg
bV9wcmltaXRpdmVVbml0cyA9IHVuaXRzOyB9Ci0KLSAgICB2b2lkIGFkZChjb25zdCBBdG9tU3Ry
aW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4pOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZ2V0RWZmZWN0QnlJZChjb25zdCBBdG9tU3RyaW5nJikgY29uc3Q7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBsYXN0RWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RWZmZWN0LmdldCgpOyB9Ci0K
LSAgICB2b2lkIGFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhSZWZQdHI8RmlsdGVyRWZm
ZWN0PiYmLCBSZW5kZXJPYmplY3QqKTsKLQotICAgIGlubGluZSBGaWx0ZXJFZmZlY3RTZXQmIGVm
ZmVjdFJlZmVyZW5jZXMoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCi0gICAgewotICAgICAgICAvLyBP
bmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVsb25ncyB0byB0aGlzIGJ1aWxkZXIuCi0gICAgICAg
IEFTU0VSVChtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7Ci0gICAgICAgIHJl
dHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZlY3QpLT52YWx1ZTsKLSAgICB9Ci0KLSAg
ICAvLyBSZXF1aXJlZCB0byBjaGFuZ2UgdGhlIGF0dHJpYnV0ZXMgb2YgYSBmaWx0ZXIgZHVyaW5n
IGFuIHN2Z0F0dHJpYnV0ZUNoYW5nZWQuCi0gICAgaW5saW5lIEZpbHRlckVmZmVjdCogZWZmZWN0
QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iamVjdCkgeyByZXR1cm4gbV9lZmZlY3RSZW5kZXJl
ci5nZXQob2JqZWN0KTsgfQotCi0gICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKLSAgICB2b2lkIGNs
ZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqKTsKLQotcHJpdmF0ZToKLSAgICBpbmxp
bmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fYnVpbHRpbkVmZmVjdHMudmFsdWVzKCkpCi0gICAgICAgICAgICBtX2VmZmVjdFJl
ZmVyZW5jZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZmZWN0U2V0KCkpOwotICAgIH0KLQotICAgIEhh
c2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7
Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9uYW1lZEVm
ZmVjdHM7Ci0gICAgLy8gVGhlIHZhbHVlIGlzIGEgbGlzdCwgd2hpY2ggY29udGFpbnMgdGhvc2Ug
ZmlsdGVyIGVmZmVjdHMsCi0gICAgLy8gd2hpY2ggZGVwZW5kcyBvbiB0aGUga2V5IGZpbHRlciBl
ZmZlY3QuCi0gICAgSGFzaE1hcDxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgRmlsdGVyRWZmZWN0U2V0
PiBtX2VmZmVjdFJlZmVyZW5jZXM7Ci0gICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBGaWx0ZXJF
ZmZlY3QqPiBtX2VmZmVjdFJlbmRlcmVyOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9s
YXN0RWZmZWN0OwotICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwotICAgIFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGUgbV9wcmltaXRpdmVVbml0cyB7IFNWR1VuaXRUeXBlczo6U1ZH
X1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSB9OwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckdlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmN2ViZGMxYjFlMTkxZDIyMGQ2NTJiYzgw
NzUxZGVmNTJjMTUxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNWR0ZpbHRlckdlb21ldHJ5IDogcHVibGljIEZpbHRlckdlb21ldHJ5IHsKK3B1YmxpYzoK
KyAgICBTVkdGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRy
YW5zZm9ybSwgY29uc3QgRmxvYXRTaXplJiByZXNvbHV0aW9uKQorICAgICAgICA6IEZpbHRlckdl
b21ldHJ5KGZpbHRlclJlZ2lvbiwgc291cmNlSW1hZ2VSZWN0KQorICAgICAgICAsIG1fYWJzb2x1
dGVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0pCisgICAgICAgICwgbV9yZXNvbHV0aW9uKHJl
c29sdXRpb24pCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgdHJhbnNm
b3JtVG9BYnNvbHV0ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgYXV0byByZWN0SW5Vc2VyU3BhY2UgPSBtX2Fic29sdXRlVHJhbnNmb3Jt
Lm1hcFJlY3QocmVjdCk7CisgICAgICAgIHJlY3RJblVzZXJTcGFjZS5zY2FsZShtX3Jlc29sdXRp
b24pOworICAgICAgICByZXR1cm4gcmVjdEluVXNlclNwYWNlOworICAgIH0KKworICAgIEZsb2F0
UmVjdCBwcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gRmlsdGVyR2VvbWV0cnk6OnBy
aW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpOworICAgICAgICAKKy8vICAgICAgICByZXR1cm4gRmxv
YXRSZWN0IHsKKy8vICAgICAgICAgICAgcHJpbWl0aXZlQm91bmRyaWVzLngudmFsdWVfb3Ioc3Vi
cmVnaW9uLngoKSksCisvLyAgICAgICAgICAgIHByaW1pdGl2ZUJvdW5kcmllcy55LnZhbHVlX29y
KHN1YnJlZ2lvbi55KCkpLAorLy8gICAgICAgICAgICBwcmltaXRpdmVCb3VuZHJpZXMud2lkdGgu
dmFsdWVfb3Ioc3VicmVnaW9uLndpZHRoKCkpLAorLy8gICAgICAgICAgICBwcmltaXRpdmVCb3Vu
ZHJpZXMuaGVpZ2h0LnZhbHVlX29yKHN1YnJlZ2lvbi5oZWlnaHQoKSkKKy8vICAgICAgICB9Owor
ICAgIH0KKyAgICAKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKKyAg
ICBGbG9hdFNpemUgbV9yZXNvbHV0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcAppbmRleCAwODc1YTVlY2ZmYTljNjdlNjBjMWFm
NjZjOTBjNzA5NWZlN2JkMTA0Li44ZmIwZjQwMjZjYmUzOTkwNDAzMjFmM2UyYTgyOWM2ODUyZDQ4
Yjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcApAQCAtMTk4Niw3ICsxOTg2LDcg
QEAgeXlyZWR1Y2U6CiAjbGluZSA0MTkgIldlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55IgogICAg
IHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVz
c2lvbj4+PiBwcmVkaWNhdGVMaXN0KCh5eXZzcFsoMikgLSAoMildLmV4cHJlc3Npb25WZWN0b3Ip
KTsKLSAgICAgICAgKHl5dmFsLmV4cHJlc3Npb24pID0gbmV3IEZpbHRlcihzdGQ6OnVuaXF1ZV9w
dHI8RXhwcmVzc2lvbj4oKHl5dnNwWygxKSAtICgyKV0uZXhwcmVzc2lvbikpLCBXVEZNb3ZlKCpw
cmVkaWNhdGVMaXN0KSk7CisgICAgICAgICh5eXZhbC5leHByZXNzaW9uKSA9IG5ldyBYUGF0aDo6
RmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigoeXl2c3BbKDEpIC0gKDIpXS5leHBy
ZXNzaW9uKSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKICAgICA7fQogICAgIGJyZWFrOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkKaW5kZXggYjc1MWE2MWJhM2Y0MjIyNDBlN2MwYmUw
ZTRmNWQ2MTNlMmY3YTU1Yi4uMzUzMDk4MGFiMmE5NGU3NjZiZGNjYjkyMGJkN2E5ZTRjZGEyYzUy
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueQpAQCAtNDE4LDcgKzQxOCw3IEBAIEZpbHRl
ckV4cHI6CiAgICAgUHJpbWFyeUV4cHIgUHJlZGljYXRlTGlzdAogICAgIHsKICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+PiBwcmVkaWNh
dGVMaXN0KCQyKTsKLSAgICAgICAgJCQgPSBuZXcgRmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHBy
ZXNzaW9uPigkMSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKKyAgICAgICAgJCQgPSBuZXcg
WFBhdGg6OkZpbHRlcihzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4oJDEpLCBXVEZNb3ZlKCpw
cmVkaWNhdGVMaXN0KSk7CiAgICAgfQogICAgIDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCmlu
ZGV4IGFhOTQ1NjQxNDlkMDhlNDg5NjM0N2Q5NGYwMzk0NjE1NDcyOWJmNzMuLjExZWZhYzkxZDQ0
YzQ2ZWM4NTNjNzhjNjhlYzU0MGNhZGE1ZWNjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAK
QEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJE
aXNwbGF5TGlzdFJlYWRlckhhbmRsZS5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5UmVmZXJl
bmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVJlbW90ZUltYWdlQnVmZmVyLmgiCkBAIC00NzgsNiArNDgwLDM1IEBAIHZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Z2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6UmVuZGVyaW5nCiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUpKTsKIH0K
IAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VC
dWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIElQQzo6RmlsdGVy
UmVmZXJlbmNlJiYgZmlsdGVyUmVmZXJlbmNlLCBJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJlbmNl
JiYgZ2VvbWV0cnlSZWZlcmVuY2UsCisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZmlsdGVyID0gZmlsdGVyUmVmZXJlbmNl
LnRha2VGaWx0ZXIoKTsKKyAgICBhdXRvIGdlb21ldHJ5ID0gZ2VvbWV0cnlSZWZlcmVuY2UudGFr
ZUdlb21ldHJ5KCk7CisgICAgCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwor
ICAgIFsmXSgpIHsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VD
YWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBpbWFnZSA9IGltYWdlQnVm
ZmVyLT5maWx0ZXJlZEltYWdlKGZpbHRlciwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgICAgICBp
ZiAoIWltYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGltYWdlU2l6ZSA9
IGltYWdlLT5zaXplKCk7CisgICAgICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVTaGFyZWFibGUoSW50U2l6ZShpbWFnZVNpemUpLCB7IGltYWdlQnVmZmVyLT5jb2xvclNw
YWNlKCkgfSk7CisgICAgICAgIGlmICghYml0bWFwKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAg
ICAgICBpZiAoIWNvbnRleHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbnRleHQt
PmRyYXdJbWFnZSgqaW1hZ2UsIEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGJpdG1hcC0+Y3JlYXRl
SGFuZGxlKGhhbmRsZSk7CisgICAgfSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
aGFuZGxlKSk7Cit9CisKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVOYXRpdmVJ
bWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgbmF0aXZlSW1hZ2VSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCA3ZDgwYjcy
NTg2Mzk0ZTU1ZWNjY2M5YmY3M2Y5NWVmYjBjYzk0MDUwLi4xOTE2MjcyNDA3N2NhMjY3NWU5MDE0
NGRjZGY2ZTM1NDZmNGY3Mzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTU5LDYgKzU5LDEx
IEBAIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IGJvb2w7CiAKIH0KIAorbmFtZXNwYWNlIElQ
QyB7CitjbGFzcyBGaWx0ZXJSZWZlcmVuY2U7CitjbGFzcyBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5j
ZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERpc3BsYXlMaXN0UmVhZGVySGFu
ZGxlOwpAQCAtMTQyLDYgKzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXREYXRhVVJMRm9y
SW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJik7
CiAgICAgdm9pZCBnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
c3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYp
OwogICAgIHZvaWQgZ2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYpOworICAg
IHZvaWQgZ2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UmJiwgSVBDOjpGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZSYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlJiYpPiYmKTsKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwog
ICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKICAgICB2b2lkIGRlbGV0
ZUFsbEZvbnRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4
IDFlZjU2ZGNjOTc2Mjc0ZTM1NmFiMjJiNGVhNGU3MWJjZmFjMGIwZGYuLjI0YmUzNmY2MTZiYTdm
M2U4MjE4MTFiNjI0M2E4NTJjMTI2Zjg2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
Lm1lc3NhZ2VzLmluCkBAIC0zMiw2ICszMiw3IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQgewogICAgIEdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUs
IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1
cmxTdHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBt
aW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0
b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKICAgICBHZXRTaGFyZWFibGVCaXRtYXBGb3JJ
bWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZm
ZXIsIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKSAtPiAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5bmNo
cm9ub3VzCisgICAgR2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2Ug
ZmlsdGVyLCBJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlIGdlb21ldHJ5KSAtPiAoV2ViS2l0
OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCiAgICAgQ2FjaGVO
YXRpdmVJbWFnZShXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKICAgICBDYWNoZUZvbnQoSVBDOjpGb250UmVmZXJlbmNlIGZvbnQpCiAgICAgRGVsZXRlQWxs
Rm9udHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2Vv
bWV0cnlSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlckdlb21l
dHJ5UmVmZXJlbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY5YmVhZGUxYmEwNzkwY2NkZDY5ZmNiZjAzOGI4
Y2M0Nzc3YTJiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0ZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIkVuY29kZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRlckdlb21ldHJ5Lmg+CisKK25hbWVzcGFjZSBJUEMg
eworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZSB7CitwdWJsaWM6CisgICAgRmlsdGVy
R2VvbWV0cnlSZWZlcmVuY2Uoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5
PiYmIGdlb21ldHJ5KQorICAgICAgICA6IG1fZ2VvbWV0cnkoV1RGTW92ZShnZW9tZXRyeSkpCisg
ICAgeworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eT4gdGFrZUdlb21ldHJ5KCkgeyByZXR1cm4gV1RGTW92ZShtX2dlb21ldHJ5KTsgfQorCisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKKyAgICB7CisgICAgfQorCisgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2U+IGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiBtX2dlb21l
dHJ5OworfTsKKworfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0ZpbHRlclJlZmVyZW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0NDdkMjY5NTQ2NDU1MzBiMzM0MjZk
ZDY5YzE2ZGVlNTMxNDk5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvQ1NTRmlsdGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TVkdG
aWx0ZXIuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIEZpbHRlclJlZmVyZW5jZSB7Citw
dWJsaWM6CisgICAgRmlsdGVyUmVmZXJlbmNlKFJlZjxXZWJDb3JlOjpGaWx0ZXI+JiYgZmlsdGVy
KQorICAgICAgICA6IG1fZmlsdGVyKFdURk1vdmUoZmlsdGVyKSkKKyAgICB7CisgICAgfQorCisg
ICAgUmVmPFdlYkNvcmU6OkZpbHRlcj4gdGFrZUZpbHRlcigpIHsgcmV0dXJuIFdURk1vdmUobV9m
aWx0ZXIpOyB9CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgZW5jb2RlciA8PCBtX2ZpbHRlci0+dHlwZSgpOworCisgICAgICAgIGlmIChp
czxXZWJDb3JlOjpDU1NGaWx0ZXI+KG1fZmlsdGVyLmdldCgpKSkKKyAgICAgICAgICAgIHN0YXRp
Y19yZWZlcmVuY2VfY2FzdDxXZWJDb3JlOjpDU1NGaWx0ZXI+KG1fZmlsdGVyKS0+ZW5jb2RlKGVu
Y29kZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
V2ViQ29yZTo6U1ZHRmlsdGVyPihtX2ZpbHRlciktPmVuY29kZShlbmNvZGVyKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWx0ZXJSZWZlcmVuY2U+IGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXI6
OlR5cGU+IHR5cGU7CisgICAgICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICAgICAgaWYgKCF0eXBl
KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBpZiAoKnR5cGUg
PT0gV2ViQ29yZTo6RmlsdGVyOjpUeXBlOjpDU1MpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGZp
bHRlciA9IFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB7IEZpbHRlclJlZmVyZW5jZShXVEZNb3ZlKCpmaWx0ZXIpKSB9OworICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRv
IGZpbHRlciA9IFdlYkNvcmU6OlNWR0ZpbHRlcjo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIHsgRmlsdGVyUmVmZXJlbmNlKFdURk1vdmUoKmZpbHRlcikpIH07CisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZjxXZWJDb3Jl
OjpGaWx0ZXI+IG1fZmlsdGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCBlZDk0YTNlZTU2NjhhMzQ4YmM3NmFk
YmQ0MmI2NTAwNzFkMWI5NTFhLi43OTlhYjQ4MmJhNjc4NzQxODU2NDRjZGZiNjRiZmY5OTA4Zjc1
MDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI4OSw3
ICsyODksNiBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgog
ICAgICAgICAnV2ViQ29yZTo6TWVkaWFLZXlTeXN0ZW1SZXF1ZXN0SWRlbnRpZmllcicsCiAgICAg
ICAgICdXZWJDb3JlOjpNZWRpYVBsYXllcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6
TWVkaWFTZXNzaW9uSWRlbnRpZmllcicsCi0gICAgICAgICdXZWJDb3JlOjpOYXRpdmVJbWFnZVJl
ZmVyZW5jZScsCiAgICAgICAgICdXZWJDb3JlOjpQYWdlSWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJDb3JlOjpQbGF5YmFja1RhcmdldENsaWVudENvbnRleHRJZGVudGlmaWVyJywKICAgICAgICAg
J1dlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3knLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmEyMzc5ZWM0ZTA5N2EyMzY0YWZk
YTRmYjI3MzRmNmZkMTdkMWY4ZC4uNWM4OTAwMGE1OTZiMWFjZGYyZDM2ZTMwNjhhMjU1YjE4N2Q4
NWZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0zLDcgKzMsNyBAQAogCWFyY2hpdmVWZXJzaW9uID0gMTsKIAljbGFzc2VzID0gewog
CX07Ci0Jb2JqZWN0VmVyc2lvbiA9IDUyOworCW9iamVjdFZlcnNpb24gPSA1NDsKIAlvYmplY3Rz
ID0gewogCiAvKiBCZWdpbiBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLwpAQCAtNDY4Myw2
ICs0NjgzLDggQEAKIAkJNzFCQUE3MzEyNUZGQ0NCQTAwRDdDRDVEIC8qIFdLTW9kZWxWaWV3Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLTW9kZWxWaWV3Lmg7IHBhdGggPSBp
b3MvV0tNb2RlbFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFCQUE3MzIy
NUZGQ0NCQTAwRDdDRDVEIC8qIFdLTW9kZWxWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gV0tNb2RlbFZpZXcubW07IHBhdGggPSBpb3MvV0tNb2RlbFZpZXcu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkI4MTBBMjI2MDYyN0EwMDMyMzY3
NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNw
YXRjaFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAwQ0Y2OTI3MEM1
MkVBMDA1MTVDMjQgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJl
ZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAwQ0Y2QTI3MEM1N0E3
MDA1MTVDMjQgLyogRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmls
dGVyR2VvbWV0cnlSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIw
MzQ0OUEyNkE2QzQ0QzAwMEE1RjU0IC8qIE1vbm90b25pY09iamVjdElkZW50aWZpZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTW9ub3RvbmljT2JqZWN0SWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjAzNDQ5QjI2QTZDNDc2MDAwQTVGNTQgLyogUmVuZGVyaW5nVXBkYXRl
SUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nVXBkYXRlSUQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzIyNzgwMEIyNDA4QkQ3RDAwN0QzNzZCIC8qIFBsYXRmb3JtUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVJlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjAsNiArNzMyMiw4
IEBACiAJCQkJQkMwMzJEOUUxMEY0MzdEMTAwNThDMTVBIC8qIERlY29kZXIuaCAqLywKIAkJCQlC
QzAzMkQ5RjEwRjQzN0QxMDA1OEMxNUEgLyogRW5jb2Rlci5jcHAgKi8sCiAJCQkJQkMwMzJEQTAx
MEY0MzdEMTAwNThDMTVBIC8qIEVuY29kZXIuaCAqLywKKwkJCQk3MjAwQ0Y2QTI3MEM1N0E3MDA1
MTVDMjQgLyogRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCAqLywKKwkJCQk3MjAwQ0Y2OTI3MEM1
MkVBMDA1MTVDMjQgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8sCiAJCQkJOUJEOEFCNDkyNTgyMEU1
MjAwNTM4NkY4IC8qIEZvbnRSZWZlcmVuY2UuaCAqLywKIAkJCQk0MTUxRTVDMzFGQkI5MEE5MDBF
NDdFMkQgLyogRm9ybURhdGFSZWZlcmVuY2UuaCAqLywKIAkJCQlDMENFNzJBQzEyNDdFNzhEMDBC
QzBFQzQgLyogSGFuZGxlTWVzc2FnZS5oICovLApAQCAtMTM2NTksNyArMTM2NjMsNiBAQAogCQkw
ODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhQcm9qZWN0OwogCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlEZWZhdWx0QnVpbGRTeXN0ZW1U
eXBlRm9yV29ya3NwYWNlID0gT3JpZ2luYWw7CiAJCQkJTGFzdFN3aWZ0VXBkYXRlQ2hlY2sgPSAx
MzAwOwogCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAxMTQwOwogCQkJCVRhcmdldEF0dHJpYnV0ZXMg
PSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IDI3YmNkMDA1NDUwOTU4ZTgwMjEy
MzMwYzFlODk2ZTNjODkxNzM0ZmIuLmM4NjkzYWUyOWQ4YmE3ZGQyZDQxY2NiNDIxYzA2OWE3ZGVh
MDRhZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0yMDMsNiArMjAzLDE0IEBA
IHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKICAgICB9
CiAKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eT4mJiBnZW9tZXRyeSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHktPmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihtX3JlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgZmlsdGVyLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAg
fQorCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZm
ZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQmIGRlc3RpbmF0aW9uRm9ybWF0LCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggZWM3OTM0MTA2YjExYjM2NmM3
ODhjNTNiZDliMjQwOTc5NjliZDlkOS4uNzYwYzU0M2IzMWY4ZjQzMTczNTFmOWY2NzVmM2Q0YzUz
ZjkwOTU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAt
MjksNiArMjksNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkRpc3Bs
YXlMaXN0V3JpdGVySGFuZGxlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5j
bHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKQEAgLTIzNyw2ICsy
MzgsMjQgQEAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpnZXRTaGFyZWFibGVCaXRtYXAoUmVuZGVyaW4KICAgICByZXR1cm4gU2hhcmVhYmxlQml0
bWFwOjpjcmVhdGUoaGFuZGxlKTsKIH0KIAorUmVmUHRyPEltYWdlPiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGNvbnN0IEZpbHRlciYgZmlsdGVyLCBzdGQ6OnVu
aXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpCit7CisgICAgc2VuZERlZmVycmVk
V2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBo
YW5kbGU7CisgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OkdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
ciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgeyBSZWY8RmlsdGVyPiB7IGNvbnN0X2Nhc3Q8RmlsdGVy
Jj4oZmlsdGVyKSB9IH0sIElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UoV1RGTW92ZShnZW9t
ZXRyeSkpKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldEZpbHRlcmVkSW1h
Z2VGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIoKSwgMV9zKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNlbmRSZXN1bHQsIHNlbmRSZXN1bHQpOwor
CisgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAg
ICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7CisgICAgaWYg
KCFiaXRtYXApCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgcmV0dXJuIGJpdG1hcC0+
Y3JlYXRlSW1hZ2UoKTsKK30KKwogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNh
Y2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSwgUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsK
ICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDYWNoZU5hdGl2ZUlt
YWdlKGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldh
aXRpbmdGb3JTeW5jUmVwbHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgK
aW5kZXggODdhZTUyMmNiYmIyODFmYzRhODgwNzY1Yjk5ZjRjOTAyNTZhOWQyNS4uNGQ3ZGU0ZjY1
NWYxMWNjMWEyOTAyZjJlY2RkNzMzZWNkOThkNjkzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCiAKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkZp
bHRlclJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5j
bHVkZSAiR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMuaCIKICNpbmNsdWRlICJJUENT
ZW1hcGhvcmUuaCIKQEAgLTEwMiw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIGZsdXNoRGlz
cGxheUxpc3RBbmRDb21taXQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBnZXRTaGFyZWFibGVCaXRtYXAoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpJbWFnZT4gZ2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmlsdGVyJiwgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiYmKTsKICAgICB2b2lkIGNhY2hlTmF0
aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpG
b250PiYmKTsKICAgICB2b2lkIGRlbGV0ZUFsbEZvbnRzKCk7Cg==
</data>
<flag name="commit-queue"
          id="464184"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440304</attachid>
            <date>2021-10-05 17:10:40 -0700</date>
            <delta_ts>2021-10-06 02:46:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211005171039.patch</filename>
            <type>text/plain</type>
            <size>669153</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODc5OGU4MWE0MTUwYWZm
MzUzNjA2ZTc5M2M1NDA2N2VlMjJmODRlYS4uNDAzNWM0YTY0ZTdjMTc3NTc3ODEwMjQxMjk5ZjY4
OGJjZjEzYTdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxOSBAQAorMjAyMS0xMC0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXSVAuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbTog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFn
ZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2U6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVC
bGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1
ZVJvdGF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6
CisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldENvbXBvc2l0ZU9wZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvc2l0ZTo6c2V0SzIpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLNCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZTo6Y29tcG9zaXRlT3BlcmF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6Om9wZXJhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBSR0JBVmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVy
aW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmdldFBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlm
ZnVzZUNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdo
dGluZzo6ZGlmZnVzZUNvbnN0YW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2Vt
ZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp4
Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
Ojp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0Y0NvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6b3BhY2l0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BT
aGFkb3c6OnNldFNoYWRvd0NvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6c2hhZG93T3BhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRURyb3BTaGFkb3c6OnNldFNoYWRvd09wYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6RkVGbG9vZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFRmxvb2Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6
Om9wYWNpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoZ2F1c3NpYW5LZXJuZWxG
YWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsUG9zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlh
dGlvblkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldEVk
Z2VNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9ubHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
dGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3Rk
RGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXREaWZm
dXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3BlY3VsYXJD
b25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhY
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9y
bWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJp
b3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVy
aWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmNv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c291cmNlIGNvbnN0KToKKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpsaWdodGlu
Z0NvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6Omxp
Z2h0U291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93Ojp0b3BMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0b3AgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OmNlbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0
UmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OnNldEJvdHRvbVJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1l
cmdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TWVyZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0b3IgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVj
dWxhckxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0
aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNwZWN1bGFy
Q29uc3RhbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpzcGVjdWxhckV4cG9uZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRp
bGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmRyYXdpbmdSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6RkVUaWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lYKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlOjpzZXROdW1PY3RhdmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5j
ZTo6c2V0U2VlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRp
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZHJhd2luZ1JlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZp
bGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YXBwbHlQbGF0Zm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVj
dEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0b3Rh
bE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUlt
YWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRp
cGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
bnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5wdXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVz
dWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNB
bHBoYUltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhh
c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRI
YXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNX
aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdo
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhh
c0hlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVk
QWJzb2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9wZXJhdGluZ0NvbG9yU3BhY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNw
YWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29s
b3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6bm9ybWFsaXplZEZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1
bmN0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpvdXRzZXRzIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6RmlsdGVyR2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heERyYXdpbmdSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpwcmltaXRpdmVTdWJy
ZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heFByaW1p
dGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRs
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZpbHRlclJlZ2lvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291cmNlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Ojp0cmFuc2Zvcm1Ub0Fic29sdXRl
UmVjdCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
dXRwdXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGwuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OkZpbHRlck91dHB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OmNyZWF0ZUZpbHRlclJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0cHV0OjpnZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJPdXRwdXQ6OnJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0
cHV0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlZmVyZW5jZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6YWJzb2x1dGVE
cmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29weVBpeGVsQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRv
Q29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZXN1bHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cHJpbWl0aXZlU3Vi
cmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmlzQWxwaGFJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnNldElzQWxwaGFJbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKTogRGVsZXRlZC4K
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmVmZmVjdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHlT
b2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5U29mdHdh
cmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVM
aWdodGluZ1NvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6YXBw
bHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAo
V2ViQ29yZTo6RkVNZXJnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjphcHBseVNvZnR3YXJlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZz
ZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNv
ZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
UmVzdWx0U29mdHdhcmU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmguCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpD
U1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTZXBpYUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNp
dHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9z
b3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5w
dXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRS
ZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpi
dWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0
UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmRlY29kZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdp
bkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFw
cGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBy
aW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBv
c2VkRW51bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29t
cG9zaXRlT3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0
eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhw
b3NlZEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25U
eXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlU
cmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9w
U2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZCBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZF
TWVyZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9s
b2d5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xv
Z3lFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9s
b2d5T3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6ZnJvbVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsOgorICAg
ICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0
KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdGRVNwb3RMaWdodEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRpbGVFbGVtZW50OjpidWlsZCBjb25zdCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmli
dXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHlTb2Z0
d2FyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJl
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjph
ZGROYW1lZEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6Om5hbWVkRWZmZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2V0dXBCdWlsdGluRWZmZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmRlY29k
ZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckdlb21ldHJ5OjpTVkdGaWx0ZXJHZW9tZXRyeSk6CisgICAgICAgICogeG1sL1hQYXRo
R3JhbW1hci5jcHA6CisgICAgICAgICogeG1sL1hQYXRoR3JhbW1hci55OgorCiAyMDIxLTEwLTA1
ICBQYXRyaWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBTaG93IGNvbG9yIHNwYWNlIGZvciBjYW52YXNlcyBpbiB0aGUgR3JhcGhpY3MgdGFiIG9u
IHRoZSBvdmVydmlldyBjYXJkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1OTk1ZWNlZTVjNmIyYWY1MDZhYmU5YWU3
MjI2OGQ1Y2ZkMzViZDNkLi43ZTFhYjA3NGZhNjcxZWRhMzMyYThlNDdmZjM4NTk3Njc3ZmM5YzFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIxLTEwLTA1ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gRW5hYmxlIGZpbHRl
cnMgaW4gR1BVIFByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMTI1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zp
bHRlckdlb21ldHJ5UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZTo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjpG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTo6dGFrZUdlb21ldHJ5KToKKyAgICAgICAgKElQQzo6Rmls
dGVyR2VvbWV0cnlSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRl
ckdlb21ldHJ5UmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0
ZXJSZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6Rmls
dGVyUmVmZXJlbmNlKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjp0YWtlRmlsdGVy
KToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXQvbWVzc2FnZXMucHk6CisgICAgICAgICh0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2Rl
Y2xhcmVkKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorCiAyMDIxLTEwLTA1
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQXV0aG9yaXphdGlv
biBoZWFkZXIgbG9zdCBvbiAzMHggcmVkaXJlY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDFlZmY2YWVi
MzliYTAyYTczNWYyMTRjMzRmZDcwYzEwMzNlOTNmMTAuLjEzNmRiYTRiYTgyNTE5ODZkM2Q2MDM3
NmI4MTRkMDQ4NTUyNTY1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDQ3LDE0ICsyMDQ3LDM1IEBA
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2Vv
bWV0cnkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJSZXN1bHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGln
aHRTb3VyY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCitwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hh
ZG93U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxv
b2RTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVMaWdodGluZ1NvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRU1lcmdlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pc28vSVNPQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT09yaWdpbmFsRm9ybWF0
Qm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94
LmNwcApAQCAtMjYzNiw3ICsyNjU3LDYgQEAgc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
CiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcAogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAot
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKIHN2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwCiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRp
dGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmNwcAogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlQW5p
bWF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBmMzBmZGFiYTA0YzI2MDY3ZjE2
NDhmMjc0MjcyZDVlMmFlMWQzZDRkLi5mZTk1NzhiMmQ4MmQzZjEyOGQyNWU4MzBkMWIxOTk4MTg0
YTNlNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTM5OCw3ICszOTgsOCBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1h
Z2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJD
b25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENv
cmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3Jl
SW1hZ2UubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVEZXZpY2VNZXRhbC5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MTRjM2Q3MGMyY2IxM2RmYzFjMjBjYjI2
MDg1MjY3MGY0ZWQ3ZTVhLi5mZGRhMGJiNDdlOTUxNTE2OWMzZjA1NjU4NWZlMDFkMWY1MTkyZGVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0yMzUsNyArMjM1LDYgQEAKIAkJMDgxNjY4RDQxMjU2MDNCRjAwNkYyNURFIC8qIFNW
R1RleHRDaHVua0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4MTY2OEQyMTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVy
LmggKi87IH07CiAJCTA4MTY2OERBMTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5n
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2
NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oICovOyB9OwogCQkw
ODFBQThEQTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODFBQThEOTExMTEyMzdFMDAy
QUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi87IH07Ci0JCTA4MUVCRjNCMEZEMzRGNDEw
MERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVy
QnVpbGRlci5oICovOyB9OwogCQkwODNEQUVBNzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4M0RBRUEzMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5oICovOyB9OwogCQkwODNEQUVBOTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODNEQUVBNTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmggKi87IH07CiAJCTA4NDU2ODA4MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0
cmljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0
NTY4MDcxMkI5MERBNjAwOTYwQTlGIC8qIEZvbnRNZXRyaWNzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc3Niw4ICs3NzUsNiBAQAogCQkyQUVG
NkZERDI2RTdFQ0NGMDAzMjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBRUY2RkNFMjZFNzFGMkQwMDMyNkQwMiAv
KiBDU1NOdW1lcmljVHlwZS5oICovOyB9OwogCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0IgLyog
UmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAq
LzsgfTsKIAkJMkJFOEUyQzcxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkJFOEUy
QzYxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oICovOyB9OwotCQky
Qzg1NjUzNDI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDODU2NTMzMjRDMEY3M0Mw
MEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovOyB9OwotCQkyQ0FBNEEzQTI0QkUx
OEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDQUE0QTM5MjRCRTE4QjcwMDlE
RUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovOyB9OwogCQkyRDA2MjE0
NDFEQTYzOUI2MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDIxREE2Mzk4
ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQw
NjIxNDUxREE2MzlCQTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0MzFEQTYz
OTg4MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJMkQw
NjIxNEQxREE2M0E4QjAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0OTFEQTYzQTc5MDBBN0ZC
MjYgLyogV2ViS2l0TWVkaWFLZXlzLmNwcCAqLzsgfTsKQEAgLTIyODIsNiArMjI3OSwxNSBAQAog
CQk3MUVBRENEODIyMDg3RTcyMDA2NUE0NUYgLyogUG9pbnRlcklELmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVBRENENjIyMDg3RTZEMDA2NUE0NUYg
LyogUG9pbnRlcklELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJC
Mzg4RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAvKiBD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NzIwMENGNTkyNzA5QUJGQjAwNTE1QzI0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZp
bHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTcyMDBDRjVBMjcwOUFDMTEwMDUxNUMyNCAvKiBGaWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjYyNzAzRDY2RDAwM0M1
QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzIwMENGNUIyNzA5QUNCNjAwNTE1QzI0IC8qIEZpbHRlclJlc3Vs
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDOTBB
M0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBDRjVDMjcwOUFEM0EwMDUxNUMyNCAv
KiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzIxQ0E4RjUyNzAzOTQ1NjAwQzBERDY1IC8qIEZpbHRlclJlcHJlc2Vu
dGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzIwMENGNUQyNzA5QURDRTAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5NzhENDMyNkZFOURFNzAwRkQy
QzU2IC8qIEZpbHRlck91dHB1dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyMDBDRjY1MjcwQzA2MTcwMDUxNUMyNCAvKiBGaWx0ZXJHZW9tZXRy
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNE
ODMyNzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIwMENGNjgyNzBDNDc4NzAwNTE1QzI0
IC8qIEZpbHRlclJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIwMENGNjcyNzBDNDcxNDAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBD
RjZCMjcwQ0Q2MDkwMDUxNUMyNCAvKiBDU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NG
aWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjAwQ0Y2QzI3MENENjE5MDA1MTVDMjQgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUg
LyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0IyQTI0
MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVy
dHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjFCNDk3NDI1MTJCQTNC
MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VC
aXRtYXBCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTI3MDIsOCArMjcwOCw2IEBACiAJCTg0MjI0MTk0MTA3RTc4QTcwMDc2NkE4NyAv
KiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5oICovOyB9OwogCQk4NDMwMEJENjEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0
aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuaCAq
LzsgfTsKIAkJODQzMDBCRDgxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MzAwQkQ3MTIwQzlB
RDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi87IH07Ci0JCTg0NUU3MkY4MEZEMjYxRUUw
MEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLzsgfTsKLQkJ
ODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8q
IFNWR0ZpbHRlci5oICovOyB9OwogCQk4NDY1MEU3RTIzODdBRDdEMDA2MjY2RTIgLyogTWVkaWFR
dWVyeUxpc3RFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ2NTBFN0MyMzg3QUQ3QzAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaCAq
LzsgfTsKIAkJODQ3MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUEx
MjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovOyB9OwogCQk4NDczMEQ3
OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUMxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFQ29udm9sdmVNYXRyaXguaCAqLzsgfTsKQEAgLTYwNzIsOCArNjA3Niw2IEBACiAJCTA4MTY2
OEQ3MTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RleHRMYXlvdXRFbmdpbmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODE2NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZH
VGV4dExheW91dEVuZ2luZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdU
ZXh0TGF5b3V0RW5naW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MUFBOEQ5
MTExMTIzN0UwMDJBQjA2RSAvKiBTVkdFbGVtZW50UmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHRWxlbWVudFJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlckJ1aWxk
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODFFQkYzOTBGRDM0RjQxMDBE
QTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTVkdGaWx0ZXJCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4
M0RBRUEyMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUEzMEYwMUE3
RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBNDBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02MjIwLDggKzYyMjIsNiBAQAogCQkwRjQ5NjZBODFEQjQwQzQzMDBBMjc0
QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNDk2NkE5MURCNDBDNDMwMEEyNzRCQiAvKiBKU0RPTVBvaW50UmVhZE9ubHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Qb2ludFJlYWRPbmx5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNENERUFBMjNEOTFBOEEwMDI1MUIwMiAvKiBT
Y3JvbGxUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxUeXBlcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgxMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NG
aWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY1M0ZCODMyMTNCMUJCODAwQzQw
RDM0IC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NG
aWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODMyMTNCNzg2NDAw
QzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRl
ckxheWVyRmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllckZpbHRlcnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjksMTAgKzczMjksNiBAQAogCQkyQjQyMzVB
MDE1MjUwRjYwMDBEQkJDRDggLyogUmVuZGVyU1ZHRWxsaXBzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdFbGxpcHNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJz
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTE1ldGFDaGFyc2V0UGFy
c2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJCRThFMkM4MTJBNThBMDEwMEZB
RDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJl
bmRlcmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDQUE0QTM3MjRCRTE4QTEwMDlE
RUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkyQ0FBNEEzOTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQwNjIxNDIxREE2Mzk4ODAw
QTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQwNjIxNDMxREE2Mzk4ODAwQTdGQjI2IC8qIFdl
YktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEMDYyMTQ3MURBNjNBNzkwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU5lZWRlZEV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdE1lZGlh
S2V5TmVlZGVkRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA0NzYs
MTAgKzEwNDcyLDIwIEBACiAJCTcxRjZFRTQxMjU1RURGOUMwMEZDNEM1QiAvKiBHcmlkVHJhY2tT
aXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyaWRUcmFja1Np
emUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUY5MzZGNzFERDRGOTlCMDA5
MjJDQzcgLyogdHJhY2tzLXN1cHBvcnQuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3Jp
cHQ7IHBhdGggPSAidHJhY2tzLXN1cHBvcnQuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNTcyNzA3OEM0MjAwNTE1QzI0IC8q
IFNWR0ZpbHRlckdlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckdlb21ldHJ5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjVFMjcwQUQxMzcwMDUxNUMyNCAv
KiBGaWx0ZXJPdXRwdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyT3V0cHV0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNUYyNzBCQjAxOTAwNTE1QzI0IC8q
IFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjAwQ0Y2MTI3MEJCREE4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0Q29yZUlt
YWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3VsdENvcmVJbWFnZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjAwQ0Y2MjI3MEJCREZCMDA1MTVDMjQgLyogRmlsdGVyUmVz
dWx0Q29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjAwQ0Y2MzI3MEJDMkM4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjAwQ0Y2NDI3MEJDMkM4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0U29m
dHdhcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVzdWx0U29mdHdhcmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjYyNzBDMzIxRDAwNTE1QzI0IC8qIEZpbHRlckdl
b21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckdlb21ldHJ5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjcyNzBDNDcxNDAwNTE1QzI0IC8qIEZpbHRl
clJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZWZlcmVuY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1h
dGVkVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVy
dHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAwRjEy
RkY3IC8qIFNWR1ZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9wZXJ0
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjFCNDk2RjI1MTJBQzA0MDBGRTlE
M0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQml0
bWFwQmFja2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMUI0OTcwMjUx
MkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCaXRtYXBCYWNraW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUNBOEY1
MjcwMzk0NTYwMEMwREQ2NSAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjQyQUM5NTI1NzU4RkUwMDA1QTlDRjEgLyogRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RGbHVzaElkZW50
aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAw
RjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEwNTA0LDkgKzEwNTEwLDM1IEBACiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBF
WFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQy
RTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdC
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJF
OCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZp
bHRlck91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJPdXRwdXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVs
dGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyog
UmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDY2MjcwM0Q2
NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJGdW5j
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2OTI3MDNEOEU1MDAz
QzVBQUUgLyogRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVB
QUUgLyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZCMjcw
M0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZD
MjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJBODNENkUyNzAzREZEODAwM0M1QUFFIC8qIEZpbHRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3
MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZz
ZXRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8q
IEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9ycGhvbG9n
eVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzQyNzA1
ODM3RDAwM0M1QUFFIC8qIEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
RU1lcmdlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3
NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9v
ZFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFRmxvb2RTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBG
RUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb21w
b25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBODNEN0IyNzA1QjJDOTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdDMjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZl
TWF0cml4U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb252b2x2ZU1hdHJpeFNv
ZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0QyNzA1QzdF
RjAwM0M1QUFFIC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDdFMjcwNjMzNkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2Fy
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRp
bGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVRpbGVTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBG
RVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1bGVuY2VT
b2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgxMjcwNjQ2
RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RkVMaWdodGluZ1NvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJB
ODNEODIyNzA2NTExQjAwM0M1QUFFIC8qIEZFQmxlbmRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRUJsZW5kU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmlsdGVyR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJC
QUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIz
RTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMDUxOCw2ICsxMDU1MCw4IEBACiAJCTcyQkFDM0FDMjNFMUU1NDUwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyQkFDM0FEMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2
ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWlu
dGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJDOTBBMzkyNjM2
NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0
ZXJSZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkM5MEEzQTI2MzY0
QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3Vs
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2
MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEy
RThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRUEwOUY3
MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTExNDUxLDkgKzExNDg1LDYgQEAKIAkJODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNW
R1BhdGhTdHJpbmdTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
UGF0aFN0cmluZ1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJE
NzEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0aFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdQYXRoU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg0MzAwQkQ5MTIwQzlBRUQwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGNzBGRDI2MUVFMDBBODdE
NzkgLyogRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkg
LyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0NUU3MkZBMEZEMjYy
MzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdDMjM4
N0FEN0MwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQ2NTBFN0YyMzg3QUQ4QTAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFRdWVyeUxp
c3RFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTgwMjM4N0FE
OEIwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE5NDI2LDggKzE5NDU3LDkgQEAKIAkJMkNFMTE4OTgyNEMyNDAyQzAwMzc3MEU5IC8qIGNv
cmVpbWFnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
LmggKi8sCi0JCQkJMkNBQTRBMzcyNEJFMThBMTAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLm1tICovLAorCQkJCTcyMDBDRjYxMjcwQkJEQTgwMDUxNUMyNCAvKiBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2UuaCAqLywKKwkJCQk3MjAwQ0Y2MjI3MEJCREZCMDA1MTVDMjQgLyog
RmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tICovLAorCQkJCTcyMDBDRjVGMjcwQkIwMTkwMDUxNUMy
NCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBjb3Jl
aW1hZ2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjMwMzAsNiArMjMwNjIsMzIg
QEAKIAkJCXBhdGggPSAibW9kZWwtZWxlbWVudCI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OworCQk3MkE4M0Q2RjI3MDU3NEQwMDAzQzVBQUUgLyogc29mdHdhcmUgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyQTgzRDgyMjcwNjUxMUIw
MDNDNUFBRSAvKiBGRUJsZW5kU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc1MjcwNTg1Qjgw
MDNDNUFBRSAvKiBGRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdBMjcw
NUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQTgzRDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLywK
KwkJCQk3MkE4M0Q3QzI3MDVCRDg2MDAzQzVBQUUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJl
LmNwcCAqLywKKwkJCQk3MkE4M0Q3RDI3MDVDN0VGMDAzQzVBQUUgLyogRkVEaXNwbGFjZW1lbnRN
YXBTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0UyNzA2MzM2QjAwM0M1QUFFIC8qIEZFRHJv
cFNoYWRvd1NvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyog
RkVGbG9vZFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3QjI3MDVCMkM5MDAzQzVBQUUgLyog
RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEODEyNzA2NDZFMjAwM0M1
QUFFIC8qIEZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzQyNzA1ODM3RDAw
M0M1QUFFIC8qIEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzMyNzA1N0NCRTAw
M0M1QUFFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MjI3MDU3
OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0YyNzA2
M0Y0QzAwM0M1QUFFIC8qIEZFVGlsZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q4MDI3MDY0
MUI2MDAzQzVBQUUgLyogRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwICovLAorCQkJCTcyMDBDRjYz
MjcwQkMyQzgwMDUxNUMyNCAvKiBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzIw
MENGNjQyNzBCQzJDODAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmggKi8sCisJCQkJ
NzJBODNENzEyNzA1Nzg1MjAwM0M1QUFFIC8qIFNvdXJjZUFscGhhU29mdHdhcmUuY3BwICovLAor
CQkJCTcyQTgzRDcwMjcwNTc1MDQwMDNDNUFBRSAvKiBTb3VyY2VHcmFwaGljU29mdHdhcmUuY3Bw
ICovLAorCQkJKTsKKwkJCXBhdGggPSBzb2Z0d2FyZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CiAJCTdDMDExRjNDMjRGQUQzNjAwMDVCRUYxMCAvKiBTZXR0aW5nc1RlbXBsYXRl
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNTA3OCw2
ICsyNTEzNiw3IEBACiAJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MkE4M0Q2RjI3MDU3
NEQwMDAzQzVBQUUgLyogc29mdHdhcmUgKi8sCiAJCQkJQTFFMTE1NDMxMzAxNUMzRDAwNTRBQzhD
IC8qIERpc3RhbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJODQ3MzBENUExMjQ4RjBCMzAwRDNB
OUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovLAogCQkJCUE3NUU4QjgwMEUxREUyRDYwMDdG
MjQ4MSAvKiBGRUJsZW5kLmNwcCAqLywKQEAgLTI1MTE0LDE1ICsyNTE3MywyMyBAQAogCQkJCTg0
NzMwRDZFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuaCAqLywKIAkJCQk4NDczMEQ2RjEyNDhG
MEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmNwcCAqLywKIAkJCQk4NDczMEQ3MDEyNDhGMEIz
MDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi8sCi0JCQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3
RDc5IC8qIEZpbHRlci5oICovLAorCQkJCTcyQTgzRDZFMjcwM0RGRDgwMDNDNUFBRSAvKiBGaWx0
ZXIuY3BwICovLAorCQkJCTcyQTgzRDY5MjcwM0Q4RTUwMDNDNUFBRSAvKiBGaWx0ZXIuaCAqLywK
IAkJCQkwOEM5MjUxNzBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmNwcCAqLywKIAkJ
CQkwOEM5MjUxODBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggKi8sCi0JCQkJMkM4
NTY1MzgyNEMxMEIwQjAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLywKLQkJ
CQkyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLywK
KwkJCQk3MkE4M0Q2NjI3MDNENjZEMDAzQzVBQUUgLyogRmlsdGVyRnVuY3Rpb24uaCAqLywKKwkJ
CQk3MjAwQ0Y2NjI3MEMzMjFEMDA1MTVDMjQgLyogRmlsdGVyR2VvbWV0cnkuY3BwICovLAorCQkJ
CTcyQTgzRDgzMjcwNjY3NEMwMDNDNUFBRSAvKiBGaWx0ZXJHZW9tZXRyeS5oICovLAogCQkJCTQ5
RUNFQjYzMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwICovLAogCQkJCTQ5
RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJCQk0OUVD
RUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJNDlF
Q0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLywKKwkJCQk3MjAw
Q0Y1RTI3MEFEMTM3MDA1MTVDMjQgLyogRmlsdGVyT3V0cHV0LmNwcCAqLywKKwkJCQk3Mjk3OEQ0
MzI2RkU5REU3MDBGRDJDNTYgLyogRmlsdGVyT3V0cHV0LmggKi8sCisJCQkJNzIwMENGNjcyNzBD
NDcxNDAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5oICovLAorCQkJCTcyMUNBOEY1MjcwMzk0
NTYwMEMwREQ2NSAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovLAorCQkJCTcyQzkwQTM5MjYz
NjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuY3BwICovLAorCQkJCTcyQzkwQTNBMjYzNjRB
MUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuaCAqLywKIAkJCQk4NDczMEQ3NDEyNDhGMEIzMDBE
M0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLywKIAkJCQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMg
LyogUG9pbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5
IC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLywKQEAgLTI2ODg0LDEwICsyNjk1MSw5IEBACiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlCMjU1OThFQTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5j
cHAgKi8sCiAJCQkJQjI1NTk4RUIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCAqLywK
LQkJCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCAqLywKLQkJCQk4
NDVFNzJGQTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi8sCi0JCQkJMDgxRUJGMzgw
RkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuY3BwICovLAotCQkJCTA4MUVCRjM5
MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8sCisJCQkJNzJBODNENkEy
NzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5jcHAgKi8sCisJCQkJNzJBODNENkIyNzAzREE5
QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5oICovLAorCQkJCTcyMDBDRjU3MjcwNzhDNDIwMDUxNUMy
NCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBmaWx0ZXJzOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI5OTgyLDggKzMwMDQ4LDggQEAKIAkJCQlD
QTdFOUI0NzI0MzYxREM1MDA0RTg5RjYgLyogQ29udGVudGZ1bFBhaW50Q2hlY2tlci5oICovLAog
CQkJCTkzOTJGMTRGMEFEMTg2MjMwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5jcHAgKi8sCiAJCQkJ
OTM5MkYxNEIwQUQxODYxQjAwNjkxQkQ0IC8qIENvdW50ZXJOb2RlLmggKi8sCi0JCQkJMEY1M0ZC
ODEyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5jcHAgKi8sCi0JCQkJMEY1M0ZCODMyMTNC
MUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5oICovLAorCQkJCTcyQTgzRDZDMjcwM0RDM0EwMDND
NUFBRSAvKiBDU1NGaWx0ZXIuY3BwICovLAorCQkJCTcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAv
KiBDU1NGaWx0ZXIuaCAqLywKIAkJCQlFM0JCQzI0NTIzODM1NTFBMDA2RUMzOUYgLyogQ1NTVmFs
dWVLZXkuaCAqLywKIAkJCQlFNEE4RDIxNTIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdpb24u
Y3BwICovLAogCQkJCUU0QThEMjE0MjI1NzhEQTAwMEE4NDYzQyAvKiBFdmVudFJlZ2lvbi5oICov
LApAQCAtMzIwNjIsNiArMzIxMjgsNyBAQAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAv
KiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3OUUxNDFCQjIx
NUJCMDBDQUE4QkYgLyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTQ0NzZCREIxREZDQUMwMzAwNjkwRTIzIC8qIENTU0RlZmVycmVkUGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3MjAwQ0Y2QjI3MENENjA5MDA1MTVDMjQgLyogQ1NTRmlsdGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGQkIwQzVCODE3QkJENjI5MDAzRDM2NzcgLyogQ1NTRmlsdGVySW1h
Z2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2NEI0RDYwQ0I0Mjk4QTAwNUYyQjYyIC8q
IENTU0ZvbnRGYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNGRDBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTRm9udEZhY2VSdWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNTYyLDEyICszMjYy
OSwxNiBAQAogCQkJCTkzNTQyNDMwMjcwM0NCODYwMDVDQTcyQyAvKiBGaWxlU3lzdGVtU3RvcmFn
ZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjlGMEU4MURBRUIwMEIyNTk2
NSAvKiBGaWxsTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDgzMUZFODY1REQwMDIw
MzFDQyAvKiBGaWxsTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRjgwRkQyNjFFRTAw
QTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNTkyNzA5QUJGQjAw
NTE1QzI0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAw
NDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkM4NTY1MzQyNEMw
RjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkyQ0FBNEEzQTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDBDRjVBMjcwOUFDMTEwMDUxNUMyNCAvKiBGaWx0
ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNjUyNzBDMDYxNzAwNTE1QzI0
IC8qIEZpbHRlckdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI3
MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzIwMENGNUQyNzA5QURDRTAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzIwMENGNjgyNzBDNDc4NzAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNUMyNzA5QUQzQTAwNTE1QzI0IC8qIEZpbHRlclJlcHJl
c2VudGF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAwQ0Y1QjI3MDlBQ0I2MDA1MTVDMjQg
LyogRmlsdGVyUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1
Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRGMEExNTRG
MDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI3
RDJERDI1MEZEODI4MDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTM1NDQyLDggKzM1NTEzLDcgQEAKIAkJCQlCMjIyN0EwMzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0Ew
NjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUaWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBMDkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAotCQkJCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0
ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAwQ0Y2QzI3MENENjE5MDA1MTVDMjQg
LyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwQzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRmlsdGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEYwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpdFRvVmll
d0JveC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjIwNiw3ICszNjI3Niw2IEBACiAJCTA4NjdENjkw
RkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFBy
b2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JX
b3Jrc3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDA3MDA7CiAJ
CQkJTGFzdFVwZ3JhZGVDaGVjayA9IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCA4Y2Y5MDlhZTll
NTM3MjRiOTFkYjRhY2UxNGFlMjg1NzFkZDk1NTI2Li4yMTExZmEyODY0MWE2ZjM1OWMwMWZlZWE2
ODQwMGMwM2IxNTg0OTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVy
SW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCkBAIC0x
MTYsMjYgKzExNywyMyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNm
b3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMg
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAg
YXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
cmVuZGVyaW5nTW9kZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdlOjpu
dWxsSW1hZ2UoKTsKIAogICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXpl
IH07CiAgICAgdGV4dHVyZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7
CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgY3NzRmls
dGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBjc3NGaWx0ZXItPnNl
dFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAgIGNzc0ZpbHRlci0+c2V0RmlsdGVyUmVn
aW9uKGltYWdlUmVjdCk7Ci0gICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCBtX2Zp
bHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbikpCisgICAgYXV0
byBmaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25z
LCByZW5kZXJpbmdNb2RlKTsKKyAgICBpZiAoIWZpbHRlcikKICAgICAgICAgcmV0dXJuICZJbWFn
ZTo6bnVsbEltYWdlKCk7Ci0gICAgY3NzRmlsdGVyLT5hcHBseSgpOwogCi0gICAgYXV0byogb3V0
cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKLSAgICBpZiAoIW91dHB1dCkKLSAgICAgICAgcmV0
dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CisgICAgYXV0byBnZW9tZXRyeSA9IHN0ZDo6bWFrZV91
bmlxdWU8RmlsdGVyR2VvbWV0cnk+KGltYWdlUmVjdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoYXV0
byBmaWx0ZXJlZEltYWdlID0gdGV4dHVyZS0+ZmlsdGVyZWRJbWFnZSgqZmlsdGVyLCBXVEZNb3Zl
KGdlb21ldHJ5KSkpCisgICAgICAgIHJldHVybiBmaWx0ZXJlZEltYWdlOwogCi0gICAgcmV0dXJu
IG91dHB1dC0+Y29weUltYWdlKCk7CisgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiB9
CiAKIHZvaWQgQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6ZmlsdGVySW1hZ2VDaGFuZ2VkKGNvbnN0IElu
dFJlY3QmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
Y3JldGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
Y3JldGVJbWFnZUJ1ZmZlci5oCmluZGV4IGE1ZGQyOGI3MzdiYzgzNWU4NmVhM2VmMjAyYTc0ZTQ2
YWIyMjIxODEuLjg4YTMxMDI3Nzk4MmYzMjdkMjQzOTQ2ZWVlZjUyNmU1ZjcyMDk3NDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdl
QnVmZmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCiAKQEAgLTEzOCw2ICsxMzksMTkgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKKyAgICBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3Jl
YXRlZCgpOworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisKKyAgICAgICAgUmVmUHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcjsKKyAgICAgICAgc3RkOjp0aWUoaW1hZ2VCdWZmZXIsIHN0ZDo6aWdub3Jl
KSA9IGZpbHRlci5hcHBseSh0aGlzLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgICAgIHJldHVy
biBpbWFnZUJ1ZmZlciA/IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoKSA6IG51bGxwdHI7CisgICAg
fQorCiAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDg1ZTNk
MjRiZWIwYzIwNGMzMjVhMjY1NmQ5Y2E1NDA0MDg2NmZiNzIuLmNlODlmNGJkM2FkZjc4ZTIyNTg5
MWVkNjczNzNjOTlmMGM5NjkyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5j
bHVkZSAiQmlkaVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0
Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCkBAIC02MDksNiArNjExLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QKICAgICBJ
bWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zp
bHRlckltYWdlQnVmZmVyKEZpbHRlciYgZmlsdGVyLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkKK3sKKyAgICBhdXRv
IFtmaWx0ZXJkSW1hZ2UsIGltYWdlUmVjdF0gPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1hZ2UsIFdU
Rk1vdmUoZ2VvbWV0cnkpKTsKKyAgICBpZiAoZmlsdGVyZEltYWdlKQorICAgICAgICBkcmF3SW1h
Z2VCdWZmZXIoKmZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0KTsKK30KKwogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQogewog
ICAgIFBhdGggcGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgKaW5kZXggNmE0YWU1ZGFkNWE3YjJhOWRjNDIzOWZjYTlhNDZiNzE3
ODEwOWYzYS4uZDU3M2IyMTUyMjgyNTYyZWU0MjYxMmQyNjlmMTVmYWJkMmRhZjhhMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
QEAgLTg1LDYgKzg1LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBGaWx0ZXI7CitjbGFz
cyBGaWx0ZXJHZW9tZXRyeTsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVu
dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKQEAgLTQ0Miw2ICs0NDQs
OCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VC
dWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVySW1hZ2VC
dWZmZXIoRmlsdGVyJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8
RmlsdGVyR2VvbWV0cnk+JiYpOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IGIx
ZThkM2IwNGFiMjYwNTEzMjg4NmEwYTgwMzA1MDhhMTMxNjEyODAuLmFlZDU1MzIxNGYyMmFkY2Ux
MTdhZDdiMGNhMjdmOGVmYjBmMDhkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtNDIsNiArNDIsOSBAQCBjbGFzcyBEcmF3aW5nQ29u
dGV4dDsKIHN0cnVjdCBJdGVtQnVmZmVySGFuZGxlOwogfQogCitjbGFzcyBGaWx0ZXI7CitjbGFz
cyBGaWx0ZXJHZW9tZXRyeTsKKwogY2xhc3MgSW1hZ2VCdWZmZXIgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8SW1hZ2VCdWZmZXIsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+LCBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8SW1hZ2VCdWZmZXI+IHsKIHB1YmxpYzoKICAgICAvLyBXaWxs
IHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCkBAIC0xMDYsNiAr
MTA5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gZmlsdGVyZWRJbWFn
ZShjb25zdCBGaWx0ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYpID0gMDsK
IAogICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250
ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KICAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQppbmRleCBkNGZhM2M0YmZhZDM0YWFm
MzA5M2E5ZjAyNDg2YmI3MjdmOThkNGFhLi5kNDVhYjMzYzQ0MDhlZDYzNjA3NDYxNGQ0NmY0NTlk
YTZmNTFkNjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KQEAgLTM3
LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogU2hvdWxkIHNo
YXJlIHRoZXNlIHZhbHVlcyB3aXRoIENTU0ZpbHRlcjo6YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4KS4KKy8vIEZJWE1FOiBTaG91bGQgc2hhcmUg
dGhlc2UgdmFsdWVzIHdpdGggRmlsdGVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgogc3RhdGljIGNvbnN0IGRvdWJsZSBzZXBpYUZ1bGxD
b25zdGFudHNbM11bM10gPSB7CiAgICAgeyAwLjM5MywgMC43NjksIDAuMTg5IH0sCiAgICAgeyAw
LjM0OSwgMC42ODYsIDAuMTY4IH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmM4ZGY0ZDU1
YjQ1NjEzNTQ5ZTNhZjQ5MTkyYTI2ZTJjMDQ0YWY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNzMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0Ogot
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFVTRShDT1JFX0lNQUdFKQotCi0jaW1wb3J0ICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgotI2lt
cG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotCi1P
QkpDX0NMQVNTIENJSW1hZ2U7Ci1PQkpDX0NMQVNTIENJRmlsdGVyOwotT0JKQ19DTEFTUyBDSUNv
bnRleHQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRkVDb2xvck1hdHJpeDsKLWNs
YXNzIEZFQ29tcG9uZW50VHJhbnNmZXI7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwotCi1jbGFzcyBG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RSZW5kZXJl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZT4gdHJ5Q3Jl
YXRlKEZpbHRlckVmZmVjdCYpOwotICAgIFJldGFpblB0cjxDSUNvbnRleHQ+IHNoYXJlZENJQ29u
dGV4dCgpOwotICAgIHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAg
IGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vdXRwdXRJbWFnZTsgfQot
ICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCBmaW5hbDsKLSAgICBGbG9hdFJlY3QgZGVz
dFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbGVhclJl
c3VsdCgpIGZpbmFsOwotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCk7Ci0gICAg
Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKEZpbHRl
ckVmZmVjdCYpOwotICAgIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSBm
aW5hbDsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJF
ZmZlY3QmKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VHcmFw
aGljKFNvdXJjZUdyYXBoaWMmKTsKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNv
bG9yTWF0cml4KGNvbnN0IEZFQ29sb3JNYXRyaXgmLCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJ
SW1hZ2U+PiYpOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZFQ29tcG9uZW50VHJh
bnNmZXIoY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFn
ZT4+Jik7Ci0gICAgCi0gICAgUmVmUHRyPElPU3VyZmFjZUltYWdlQnVmZmVyPiBtX291dHB1dElt
YWdlQnVmZmVyOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBtX291dHB1dEltYWdlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWM4NmZjNGMyM2FmOTU0NTU1N2E1NThjOGM0NTFlMTlhOGEzOGZiNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysr
IC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgi
Ci0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgotI2lt
cG9ydCAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgotI2ltcG9ydCAiRmlsdGVyLmgiCi0jaW1wb3J0
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbXBvcnQgIkZpbHRlck9wZXJhdGlvbi5oIgotI2ltcG9ydCAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2ltcG9y
dCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNvdXJjZUdy
YXBoaWMuaCIKLSNpbXBvcnQgPENvcmVJbWFnZS9DSUNvbnRleHQuaD4KLSNpbXBvcnQgPENvcmVJ
bWFnZS9DSUZpbHRlci5oPgotI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgotI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSAg
ICBpZiAoY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMobGFzdEVmZmVjdCkpCi0gICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPigpOwotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lDb250ZXh0PiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZTo6c2hhcmVkQ0lDb250ZXh0KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmV0YWluUHRyPENJQ29udGV4dD4+IGNpQ29udGV4dCA9IFtDSUNvbnRleHQgY29udGV4dFdp
dGhPcHRpb25zOiBAeyBrQ0lDb250ZXh0V29ya2luZ0NvbG9yU3BhY2U6IChfX2JyaWRnZSBpZClD
R0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQil9XTsKLSAgICByZXR1
cm4gY2lDb250ZXh0OwotfQotCi1zdGF0aWMgYm9vbCBpc051bGxPckxpbmVhckNvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24oY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYgZWZmZWN0KQotewotICAg
IGF1dG8gaXNOdWxsT3JMaW5lYXIgPSBbXSAoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgZnVuY3Rpb24pIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgICAgIHx8IGZ1bmN0aW9uLnR5cGUgPT0g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICB9OwotICAgIHJldHVybiBpc051
bGxPckxpbmVhcihlZmZlY3QucmVkRnVuY3Rpb24oKSkgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0
LmdyZWVuRnVuY3Rpb24oKSkKLSAgICAgICAgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0LmJsdWVG
dW5jdGlvbigpKSAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKLX0K
LQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VS
ZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgLy8gRklYTUU6IGNoYW5nZSBy
ZXR1cm4gdmFsdWUgdG8gdHJ1ZSBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkCi0gICAgc3dpdGNo
IChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlR3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6IHsKLSAgICAgICAg
c3dpdGNoIChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLnR5cGUoKSkgewotICAgICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKLSAgICAg
ICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihkb3duY2Fz
dDxGRUNvbXBvbmVudFRyYW5zZmVyPihlZmZlY3QpKTsKLQotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRy
b3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNldDoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0
JiBsYXN0RWZmZWN0KQotewotICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGxh
c3RFZmZlY3QpOwotICAgIGlmICghbV9vdXRwdXRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IHJlbmRlclRvSW1hZ2VCdWZmZXIobGFzdEVmZmVjdCk7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdl
PiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmIGVmZmVjdCkKLXsKLSAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiBpbnB1dElt
YWdlczsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsK
LSAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOwotICAgICAg
ICBpZiAoIWlucHV0SW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
aW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwotICAgIH0KLSAgICBlZmZlY3QuZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBlZmZlY3Quc2V0UmVzdWx0Q29sb3JTcGFjZShl
ZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAKLSAgICBpZiAoZWZmZWN0LmFic29s
dXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkg
ewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICBy
ZXR1cm4gaW1hZ2VGb3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVmZmVj
dCkpOwotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKLSAgICAgICAg
cmV0dXJuIGltYWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZl
Y3QpLCBpbnB1dEltYWdlcyk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGRv
d25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLQotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0
IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRl
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkRyb3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNl
dDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3QpCi17
Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZWZmZWN0LmZpbHRlcigpLnNvdXJjZUlt
YWdlKCk7Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgCi0gICAgaWYgKGlzPElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQotICAg
ICAgICByZXR1cm4gW0NJSW1hZ2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0PElPU3VyZmFj
ZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpLnN1cmZhY2UoKS5zdXJmYWNlKCldOwotICAgIAot
ICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhDR0ltYWdlOnNvdXJjZUltYWdlLT5jb3B5TmF0
aXZlSW1hZ2UoKS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKLX0KLQotUmV0YWluUHRyPENJSW1h
Z2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZFQ29sb3JNYXRyaXgo
Y29uc3QgRkVDb2xvck1hdHJpeCYgZWZmZWN0LCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1h
Z2U+PiYgaW5wdXRJbWFnZXMpCi17Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFnZXMu
YXQoMCk7Ci0KLSAgICBhdXRvIHZhbHVlcyA9IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9h
dHMoZWZmZWN0LnZhbHVlcygpKTsKLSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotICAgIAotICAg
IHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NB
VFVSQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVu
dHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05P
V046Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogLy8gRklY
TUU6IEFkZCBMdW1pbmFuY2UgdG8gQWxwaGEgSW1wbGVtZW50YXRpb24KLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIGF1dG8gKmNvbG9yTWF0cml4RmlsdGVyID0gW0NJ
RmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwotICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dEltYWdlS2V5
XTsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU6IHsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDpjb21wb25lbnRzWzBdIFk6Y29tcG9uZW50c1sxXSBaOmNvbXBvbmVudHNbMl0gVzow
XSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzNdIFk6Y29tcG9uZW50c1s0
XSBaOmNvbXBvbmVudHNbNV0gVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKLSAgICAgICAg
W2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25l
bnRzWzZdIFk6Y29tcG9uZW50c1s3XSBaOmNvbXBvbmVudHNbOF0gVzowXSBmb3JLZXk6QCJpbnB1
dEJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAgICAgICAgICAg
ICAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4Rmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAg
ICAgICAgICBaOjAgICAgICAgICAgICAgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogewotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOnZhbHVlc1swXSAgWTp2YWx1ZXNbMV0gIFo6dmFsdWVzWzJdICBXOnZhbHVlc1szXV0g
IGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0
VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s1XSAgWTp2YWx1ZXNbNl0gIFo6dmFs
dWVzWzddICBXOnZhbHVlc1s4XV0gIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICBb
Y29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1sx
MF0gWTp2YWx1ZXNbMTFdIFo6dmFsdWVzWzEyXSBXOnZhbHVlc1sxM11dIGZvcktleTpAImlucHV0
QlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOnZhbHVlc1sxNV0gWTp2YWx1ZXNbMTZdIFo6dmFsdWVzWzE3XSBXOnZhbHVl
c1sxOF1dIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s0XSAgWTp2YWx1ZXNbOV0g
IFo6dmFsdWVzWzE0XSBXOnZhbHVlc1sxOV1dIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbG9yTWF0cml4RmlsdGVyLm91
dHB1dEltYWdlOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRy
YW5zZmVyJiBlZmZlY3QsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSByZXN0IG9mIEZFQ29tcG9uZW50VHJhbnNm
ZXIgZnVuY3Rpb25zCi0gICAgQVNTRVJUKGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbihlZmZlY3QpKTsKLQotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0SW1hZ2VzLmF0
KDApOwotICAgIGF1dG8gZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xv
clBvbHlub21pYWwiXTsKLSAgICAKLSAgICBbZmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0
KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIGF1dG8gc2V0Q29lZmZpY2ll
bnRzID0gWyZdIChOU1N0cmluZyAqa2V5LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBmdW5jdGlvbikgewotICAgICAgICBpZiAoZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfTElORUFSKQotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6ZnVuY3Rpb24uaW50ZXJjZXB0IFk6ZnVuY3Rpb24uc2xvcGUgWjowIFc6
MF0gZm9yS2V5OmtleV07Ci0gICAgfTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dFJlZENv
ZWZmaWNpZW50cyIsIGVmZmVjdC5yZWRGdW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMo
QCJpbnB1dEdyZWVuQ29lZmZpY2llbnRzIiwgZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSk7Ci0gICAg
c2V0Q29lZmZpY2llbnRzKEAiaW5wdXRCbHVlQ29lZmZpY2llbnRzIiwgZWZmZWN0LmJsdWVGdW5j
dGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEFscGhhQ29lZmZpY2llbnRzIiwg
ZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIGZpbHRlci5vdXRwdXRJ
bWFnZTsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2FuUmVuZGVy
VXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgaWYgKCFzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZyhlZmZlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgZm9yIChhdXRvIGluIDogZWZmZWN0LmlucHV0RWZmZWN0cygpKSB7Ci0gICAgICAgIGlm
ICghc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKmluKSB8fCAhY2FuUmVuZGVyVXNpbmdDSUZp
bHRlcnMoKmluKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
b3V0cHV0KCkgY29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJSZW5kZXJpbmcgIiA8PCB0aGlzIDw8ICIgdXNpbmcgQ29yZUltYWdlXG4iKTsKLSAgICByZXR1
cm4gbV9vdXRwdXRJbWFnZUJ1ZmZlci5nZXQoKTsKLX0KLSAgICAKLXZvaWQgRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBsYXN0
RWZmZWN0KQotewotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBtX291
dHB1dEltYWdlQnVmZmVyID0gSU9TdXJmYWNlSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6
ZSwgbGFzdEVmZmVjdC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpLCBsYXN0RWZmZWN0LnJlc3VsdENv
bG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1fb3V0cHV0SW1hZ2VC
dWZmZXIpIHsKLSAgICAgICAgY2xlYXJSZXN1bHQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFtzaGFyZWRDSUNvbnRleHQoKS5nZXQoKSByZW5kZXI6IG1fb3V0cHV0SW1hZ2UuZ2V0
KCkgdG9JT1N1cmZhY2U6IG1fb3V0cHV0SW1hZ2VCdWZmZXItPnN1cmZhY2UoKS5zdXJmYWNlKCkg
Ym91bmRzOmRlc3RSZWN0KGxhc3RFZmZlY3QpIGNvbG9yU3BhY2U6bGFzdEVmZmVjdC5yZXN1bHRD
b2xvclNwYWNlKCkucGxhdGZvcm1Db2xvclNwYWNlKCldOwotfQotICAgIAotRmxvYXRSZWN0IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3Qm
IGxhc3RFZmZlY3QpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZlY3Qu
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZGVzdFNpemUuc2NhbGUobGFzdEVmZmVj
dC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBkZXN0U2l6ZSk7Ci0gICAgcmV0dXJuIGRlc3RSZWN0OwotfQot
Ci12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjbGVhclJlc3VsdCgpCi17Ci0g
ICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgbV9vdXRwdXRJbWFnZSA9IG51
bGxwdHI7Ci19Ci0KLUZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZSgpCi0gICAgOiBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpCi17Ci19Ci0g
ICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJl
c3VsdENvcmVJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhYmU1NjFiNzAxYmNhMDViMjQ0ZTUyNWUxNzhl
YzI0ZjZkZGQxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDT1JFX0lN
QUdFKQorCisjaW1wb3J0ICJGaWx0ZXJSZXN1bHQuaCIKKworT0JKQ19DTEFTUyBDSUltYWdlOwor
T0JKQ19DTEFTUyBDSUNvbnRleHQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmls
dGVyUmVzdWx0Q29yZUltYWdlIDogcHVibGljIEZpbHRlclJlc3VsdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQ7CisKKyAgICB2b2lkIHNldEltYWdlKFJl
dGFpblB0cjxDSUltYWdlPiYmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVm
ZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92ZXJyaWRlOworICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcigpIG92ZXJyaWRlOworCisgICAgUmV0YWluUHRyPENJSW1hZ2U+IG1faW1hZ2U7
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZp
bHRlclJlc3VsdENvcmVJbWFnZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyUmVzdWx0JiByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkg
PT0gV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7IH0KK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFn
ZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43Mjc5MmIxYWJlOTcwZDhjZGY4OWFmODVhNThkNTRkNWFiODAwYmI2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbQpAQCAtMCwwICsxLDU1IEBACisvKgorKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0
Q29yZUltYWdlLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCA8Q29yZUltYWdl
L0NJQ29udGV4dC5oPgorI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgorI2ltcG9ydCA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2U6OnNldEltYWdlKFJldGFpblB0cjxDSUltYWdlPiYmIGltYWdlKQor
eworICAgIEFTU0VSVChpbWFnZSk7CisgICAgbV9pbWFnZSA9IFdURk1vdmUoaW1hZ2UpOworfQor
CitSZWZQdHI8SW1hZ2VCdWZmZXI+JiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U6OmltYWdlQnVmZmVy
SWZFeGlzdHMoKQoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyOworfQorCitJbWFnZUJ1ZmZl
ciogRmlsdGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhp
Y0NvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmOGE4MGNiZmQ2NzI4MzZk
Zjg5OTVjZjM5ZDQzZGE1YmQ4NTUwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbQpA
QCAtMCwwICsxLDU2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6
CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgorCisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNp
bXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIFNvdXJjZUdyYXBoaWM6OmFwcGx5Q29yZUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgQVNTRVJUKHNvdXJjZUltYWdlKTsKKyAgICBpZiAoIXNvdXJjZUltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2U7CisgICAg
aWYgKGlzPElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQorICAgICAgICBpbWFn
ZSA9IFtDSUltYWdlIGltYWdlV2l0aElPU3VyZmFjZTpkb3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1
ZmZlcj4oKnNvdXJjZUltYWdlKS5zdXJmYWNlKCkuc3VyZmFjZSgpXTsKKyAgICBlbHNlCisgICAg
ICAgIGltYWdlID0gW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTpzb3VyY2VJbWFnZS0+Y29weU5h
dGl2ZUltYWdlKCktPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKV07CisKKyAgICBpZiAoIWltYWdlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZG93bmNhc3Q8RmlsdGVyUmVzdWx0Q29y
ZUltYWdlPihyZXN1bHQpLnNldEltYWdlKFdURk1vdmUoaW1hZ2UpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVP
Ti5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZF
QmxlbmRORU9OLmgKaW5kZXggMjYxMTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2Yx
OC4uZGU2NjA2OGNkZDBhOWNiNTc0YzBhY2JiYzhjOGM2MGE2Nzc0ZmYwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRO
RU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEwNywxNSArMTA3LDE4IEBAIHB1YmxpYzoKICAgICB9CiB9
OwogCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQq
IEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHRzJiByZXN1bHRzLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopCiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRF
ZmZlY3QoMSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIg
PSBzdGFjay50YWtlTGFzdCgpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZ2V0KHsg
KnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byByZXN1
bHQgPSBmaWx0ZXIoKS5jcmVhdGVGaWx0ZXJSZXN1bHQoYWJzb2x1dGVQYWludFJlY3QoKSwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSByZXN1bHQtPnBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
IAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTEyOSw3ICsxMzIsNyBA
QCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBpZiAoc291cmNl
UGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7CiAgICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNvdXJj
ZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCksIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiByZXN1bHQubGVha1JlZigpOwogICAgIH0KICAgICAvLyBJ
ZiB0aGVyZSBpcyBqdXN0IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdvLgogICAgIEFTU0VS
VChzb3VyY2VQaXhlbEFycmF5TGVuZ3RoID4gMCk7CkBAIC0xNDAsNiArMTQzLDggQEAgdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIHNvdXJjZUJBbmREZXN0WzBdID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCkpWzBd
OwogICAgIHBsYXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJj
ZUEpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CiAgICAgcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNl
QkFuZERlc3RbMF07CisKKyAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAogdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwg
dW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJy
YXksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggZjliZjE5
MWVlNjM4OWYwMWQ5YjVhMjEwMjUzY2QwMGIwMzAxODU0MC4uODQyM2NiYWRhMjUxN2E5MTYxOThj
MjFmZjM1OTg0NzllMmMwMGViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcApAQCAtMjI3LDYgKzIyNywxNCBAQCB2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdAogICAg
IGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJJbWFnZUJ1
ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciosIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRy
eT4mJikKK3sKKy8vICAgIGlmIChtX2RlbGVnYXRlKQorLy8gICAgICAgIG1fZGVsZWdhdGUtPnJl
Y29yZEltYWdlQnVmZmVyVXNlKCpzb3VyY2VJbWFnZSk7CisvLyAgICByZWNvcmRGaWx0ZXJVc2Uo
ZmlsdGVyKTsKKy8vICAgIGFwcGVuZDxEcmF3RmlsdGVySW1hZ2VCdWZmZXI+KGZpbHRlci5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBnZW9tZXRyeSk7Cit9CisKIHZvaWQgUmVjb3JkZXI6OnNhdmUoKQogewog
ICAgIGFwcGVuZDxTYXZlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgK
aW5kZXggYTVhZDM2NmQ0ZGNkOTlkODQzZTBiYmEwNjk1ZWQ3ZDI0NTM3MmJiZS4uOGE4ODFhZmNj
Y2ZhYjU2MTVjOGQ5ODRkM2U1MTc4YzJlZmM4NzdhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCkBAIC0xMjgsNiArMTI4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRy
YXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCBkcmF3UGF0dGVybihOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAKKyAgICB2b2lkIGRyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0
cjxGaWx0ZXJHZW9tZXRyeT4mJikgZmluYWw7CisKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ry
b2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2NzA0Y2Q2N2ZiMGE3YWZlOWFm
MThmYmI2MmMyY2VkOS4uMzU2ZTM1OTMzZmNlYmQ1YzdmMjg3MDRiMDI2Y2QwNTYxMWZlN2RiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDE0
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsyNiw0MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRORU9OLmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Cisj
aW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQoRmlsdGVyJiBmaWx0
ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Qmxl
bmQpCi0gICAgLCBtX21vZGUobW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoQmxl
bmRNb2RlIG1vZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChtb2RlKSk7
CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIEJsZW5k
TW9kZSBtb2RlKQorRkVCbGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkKKyAgICA6IG1fbW9k
ZShtb2RlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQoZmlsdGVyLCBtb2Rl
KSk7CiB9CiAKIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKQogewot
ICAgIGlmIChtX21vZGUgPT0gbW9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9k
ZSA9IG1vZGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9t
b2RlLCBtb2RlKSAhPSBtX21vZGU7CiB9CiAKLSNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RUJsZW5kOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAg
IEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAg
IGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0byByZXN1bHQg
PSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0
OwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIs
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2lu
dCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsg
aW4sIGluMiB9LCBudWxscHRyKTsKIH0KLSNlbmRpZgogCi1UZXh0U3RyZWFtJiBGRUJsZW5kOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUg
cmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUJsZW5kOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
ICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG1vZGU9
XCIiIDw8IChtX21vZGUgPT0gQmxlbmRNb2RlOjpOb3JtYWwgPyAibm9ybWFsIiA6IGNvbXBvc2l0
ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlKSkgPDwg
IlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsK
LSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCmluZGV4IDcwZTg0MDdiZjVj
MjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLjEwMDAzMmY4ZTQ5OTIyMDJhMjMyMzNhYmE5
YzU1MzE3MjZhY2M1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNCwzMiArMjUsMjcgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgog
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVC
bGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVC
bGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgc3RhdGljIFJlZjxGRUJsZW5k
PiBjcmVhdGUoQmxlbmRNb2RlKTsKIAogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIHNldEJsZW5kTW9kZShCbGVuZE1vZGUpOwogCiBw
cml2YXRlOgorICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKKwogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVCbGVuZCI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyh1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBz
cmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOworICAgIEZpbHRlclJl
c3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0
ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZFQmxlbmQoRmlsdGVyJiwgQmxlbmRN
b2RlKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
QmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKaW5kZXggMzgwNjVjYjk2YzdiNGI0YjAzZmM2YjBlZWQ4NWFjNGI2Yzk2OGE1
NC4uZGI0OGRjZGQ0MTM4ZGE2ZWYzNTkzNzRjMzE4NTkyNzdlMGFiY2M5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywyOCArMjQsMTkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxl
cmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNv
bG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZpbHRlciYgZmlsdGVyLCBDb2xvck1hdHJpeFR5cGUg
dHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IFR5cGU6OkNvbG9yTWF0cml4KQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3ZhbHVlcyhX
VEZNb3ZlKHZhbHVlcykpCitSZWY8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRl
KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQogeworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7
CiB9CiAKLVJlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQorRkVD
b2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZs
b2F0PiYmIHZhbHVlcykKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV92YWx1ZXMoV1RGTW92
ZSh2YWx1ZXMpKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgoZmls
dGVyLCB0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAogYm9vbCBGRUNvbG9yTWF0cml4Ojpz
ZXRUeXBlKENvbG9yTWF0cml4VHlwZSB0eXBlKQpAQCAtNjMsMjU4ICs1NSw0MyBAQCBib29sIEZF
Q29sb3JNYXRyaXg6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+ICZ2YWx1ZXMpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZh
bHVlcykKK3ZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZs
b2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsKLSAgICBmbG9hdCByID0gcmVkOwotICAg
IGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBiID0gYmx1ZTsKLSAgICBmbG9hdCBhID0gYWxw
aGE7Ci0KLSAgICByZWQgICAgID0gdmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNbIDFdICogZyArIHZh
bHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1ZXNbIDRdICogMjU1OwotICAgIGdy
ZWVuICAgPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0gKiBnICsgdmFsdWVzIFs3XSAqIGIg
KyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7Ci0gICAgYmx1ZSAgICA9IHZhbHVl
c1sxMF0gKiByICsgdmFsdWVzWzExXSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10g
KiBhICsgdmFsdWVzWzE0XSAqIDI1NTsKLSAgICBhbHBoYSAgID0gdmFsdWVzWzE1XSAqIHIgKyB2
YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4XSAqIGEgKyB2YWx1ZXNb
MTldICogMjU1OwotfQotCi1pbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYg
cmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBjb25zdCBmbG9hdCogY29tcG9uZW50cykK
LXsKLSAgICBmbG9hdCByID0gcmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBi
ID0gYmx1ZTsKLQotICAgIHJlZCAgICAgPSByICogY29tcG9uZW50c1swXSArIGcgKiBjb21wb25l
bnRzWzFdICsgYiAqIGNvbXBvbmVudHNbMl07Ci0gICAgZ3JlZW4gICA9IHIgKiBjb21wb25lbnRz
WzNdICsgZyAqIGNvbXBvbmVudHNbNF0gKyBiICogY29tcG9uZW50c1s1XTsKLSAgICBibHVlICAg
ID0gciAqIGNvbXBvbmVudHNbNl0gKyBnICogY29tcG9uZW50c1s3XSArIGIgKiBjb21wb25lbnRz
WzhdOwotfQotCi0vLyBGSVhNRTogdGhpcyBzaG91bGQgdXNlIHRoZSBsdW1pbmFuY2UoLi4uKSBm
dW5jdGlvbiBpbiBDb2xvckx1bWluYW5jZS5oLgotaW5saW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0
JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkKLXsKLSAgICBh
bHBoYSA9IDAuMjEyNSAqIHJlZCArIDAuNzE1NCAqIGdyZWVuICsgMC4wNzIxICogYmx1ZTsKLSAg
ICByZWQgPSAwOwotICAgIGdyZWVuID0gMDsKLSAgICBibHVlID0gMDsKLX0KLQotI2lmIFVTRShB
Q0NFTEVSQVRFKQotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci1ib29sIGVm
ZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0
IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxvYXQgY29tcG9uZW50c1s5XSwgSW50U2l6ZSBidWZm
ZXJTaXplKQotewotICAgIEFTU0VSVChwaXhlbEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUu
YXJlYSgpICogNCk7Ci0gICAgCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWCkgewotICAgICAgICAvLyB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCB0
YWtlcyBhIDR4NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhl
IEZFQ29sb3JNYXRyaXggNXg0IG1hdHJpeAotICAgICAgICAvLyBpcyBub3QgemVybywgZmFsbCBi
YWNrIHRvIG5vbi12SW1hZ2UgY29kZS4KLSAgICAgICAgaWYgKHZhbHVlc1s0XSAhPSAwIHx8IHZh
bHVlc1s5XSAhPSAwIHx8IHZhbHVlc1sxNF0gIT0gMCB8fCB2YWx1ZXNbMTldICE9IDApCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29uc3QgaW50MzJfdCBkaXZpc29y
ID0gMjU2OwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKLQotICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsKLSAg
ICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSBi
dWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRhID0gZGF0YTsKLSAgICAKLSAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsK
LSAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRl
cyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gZGF0YTsKLQotICAg
IHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDVdICogZGl2aXNv
cikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMF0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWzE1XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2aXNvcikpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNl0gKiBkaXZpc29yKSksCi0K
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDJdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sg
N10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICogZGl2aXNvcikpLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxM10gKiBkaXZpc29yKSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE4XSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4
ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFn
ZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6
IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRdID0gewotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMF0gKiBkaXZpc29yKSksCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1szXSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25l
bnRzWzZdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s0XSAqIGRpdmlzb3Ip
KSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzdd
ICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzhdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgZGl2aXNvciwKLSAgICAgICAgfTsKLSAgICAg
ICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2
aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogewot
ICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICB9OwotICAgICAg
ICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZp
c29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgY29tcG9uZW50c1swXSA9
ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAw
LjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1
ZSk7CisgICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNv
bXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzVd
ID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAt
IDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZh
bHVlKTsKKyAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7CiB9Ci0j
ZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci12b2lkIGVmZmVj
dFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXplKQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsK
LSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVT
YXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICBlbHNlIGlmIChm
aWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUpCi0gICAgICAgIEZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVz
WzBdKTsKLQotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0
aCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgaWYgKGVmZmVjdEFwcGx5QWNjZWxlcmF0
ZWQ8ZmlsdGVyVHlwZT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRzLCBidWZmZXJTaXpl
KSkKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7
Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQg
PSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQg
Kz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0
ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0
ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVs
QXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIG1hdHJpeChyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSwgdmFsdWVzKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0
KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9
IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCAr
PSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgc2F0dXJhdGVBbmRI
dWVSb3RhdGUocmVkLCBncmVlbiwgYmx1ZSwgY29tcG9uZW50cyk7Ci0gICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXku
c2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwg
cGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZs
b2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAg
ZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAg
ICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIp
OwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zm
c2V0ICsgMyk7Ci0gICAgICAgICAgICBsdW1pbmFuY2UocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1
ZSAqIHBpRmxvYXQgLyAxODApOworICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxv
YXQgLyAxODApOworICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0g
c2luSHVlICogMC4yMTM7CisgICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43
MTUgLSBzaW5IdWUgKiAwLjcxNTsKKyAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUg
KiAwLjA3MiArIHNpbkh1ZSAqIDAuOTI4OworICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNv
c0h1ZSAqIDAuMjEzICsgc2luSHVlICogMC4xNDM7CisgICAgY29tcG9uZW50c1s0XSA9IDAuNzE1
ICsgY29zSHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKKyAgICBjb21wb25lbnRzWzVdID0g
MC4wNzIgLSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOworICAgIGNvbXBvbmVudHNb
Nl0gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7CisgICAgY29tcG9u
ZW50c1s3XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKKyAgICBj
b21wb25lbnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwog
fQogCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFQ29sb3JNYXRyaXg6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoaW5CdWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgp
KTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNlKCkgfTsKLSAgICBJbnRSZWN0IGltYWdl
UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBw
aXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIGltYWdlUmVj
dCk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYg
cGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXV0byBwaXhlbEFycmF5RGlt
ZW5zaW9ucyA9IHBpeGVsQnVmZmVyLT5zaXplKCk7Ci0KLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVl
cyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwotICAgIAotICAgIHN3aXRjaCAobV90eXBl
KSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBlZmZlY3RUeXBl
PEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURTogCi0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBl
ZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU+KHBpeGVsQXJyYXksIHZhbHVl
cywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVs
QXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5n
ZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHJlc3VsdEltYWdl
LT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIGFw
cGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0
eXBlKQpAQCAtMzM5LDEwICsxMTYsOSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5k
ZW50IDw8ICJbZmVDb2xvck1hdHJpeCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiB0eXBlPVwiIiA8PCBt
X3R5cGUgPDwgIlwiIjsKICAgICBpZiAoIW1fdmFsdWVzLmlzRW1wdHkoKSkgewogICAgICAgICB0
cyA8PCAiIHZhbHVlcz1cIiI7CkBAIC0zNTcsOSArMTMzLDYgQEAgVGV4dFN0cmVhbSYgRkVDb2xv
ck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb24KICAgICAgICAgdHMgPDwgIlwiIjsKICAgICB9CiAgICAgdHMgPDwgIl1cbiI7Ci0gICAg
Ci0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0
RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAg
ICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDI5ZTQxYThhZWQxZTRmMGI1
Mzk3MDNhYzRkYjU1MjRlZmE0YzEyM2YuLmY2MTIxM2ZlNjBmZTBiNGNjM2QyY2RlZjliNjQyZjQ2
ZGI0ZDEyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszNyw3IEBA
IGVudW0gQ29sb3JNYXRyaXhUeXBlIHsKIAogY2xhc3MgRkVDb2xvck1hdHJpeCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4gY3Jl
YXRlKEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKKyAgICBzdGF0
aWMgUmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9h
dD4mJik7CiAKICAgICBDb2xvck1hdHJpeFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogICAgIGJvb2wgc2V0VHlwZShDb2xvck1hdHJpeFR5cGUpOwpAQCAtNDYsNTQgKzQ1LDIy
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlczsgfQogICAgIGJvb2wgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4m
KTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMo
ZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQg
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFs
dWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUh1ZVJv
dGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKIAogcHJpdmF0
ZToKLSAgICBGRUNvbG9yTWF0cml4KEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZs
b2F0PiYmKTsKKyAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0
PiYmKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVDb2xvck1hdHJpeCI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIENvbG9yTWF0cml4
VHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPGZsb2F0PiBtX3ZhbHVlczsKIH07CiAKLWlubGluZSB2
b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQgdmFsdWUpCi17Ci0gICAgY29tcG9uZW50c1swXSA9ICgwLjIxMyArIDAu
Nzg3ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVl
KTsKLSAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29t
cG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNF0g
PSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzVdID0gKDAuMDcyIC0g
MC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAtIDAuMjEzICogdmFs
dWUpOwotICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKLSAgICBj
b21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lk
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBv
bmVudHMsIGZsb2F0IHZhbHVlKQotewotICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1ZSAqIHBp
RmxvYXQgLyAxODApOwotICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxvYXQgLyAx
ODApOwotICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0gc2luSHVl
ICogMC4yMTM7Ci0gICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgLSBz
aW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3
MiArIHNpbkh1ZSAqIDAuOTI4OwotICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNvc0h1ZSAq
IDAuMjEzICsgc2luSHVlICogMC4xNDM7Ci0gICAgY29tcG9uZW50c1s0XSA9IDAuNzE1ICsgY29z
SHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKLSAgICBjb21wb25lbnRzWzVdID0gMC4wNzIg
LSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOwotICAgIGNvbXBvbmVudHNbNl0gPSAw
LjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7Ci0gICAgY29tcG9uZW50c1s3
XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25l
bnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwotfQotCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENs
YXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg7IH0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5jcHAKaW5kZXggODQ3ZWE1OGY1ZjliMDM4NjZkOWVhYzU3ZjEwY2NmNTc0MDJmOWU2My4uZmVi
ODA4NmVhZjUyYzJjMjkwNDhiZjVlZmFkYmIyZjI3YjNjZGM0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjQsMTM4ICsyNSwzMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZF
Q29tcG9uZW50VHJhbnNmZXIuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9u
ZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAgIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
YWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyKQotICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKLSAgICAsIG1fZ3Jl
ZW5GdW5jdGlvbihncmVlbkZ1bmN0aW9uKQotICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0
aW9uKQotICAgICwgbV9hbHBoYUZ1bmN0aW9uKGFscGhhRnVuY3Rpb24pCi17Ci19Ci0KLVJlZjxG
RUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAg
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRUNvbXBvbmVudFRyYW5zZmVyKGZpbHRlciwgcmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24s
IGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOwotfQotCi12b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpCitSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCiB7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVDb21wb25lbnRUcmFuc2ZlcihyZWRGdW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1
ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAg
ICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAg
ICAgcmV0dXJuOyAgICAgICAgICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAg
ICAgICAgIAotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAo
biAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRv
dWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKLSAgICAg
ICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2
MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsK
LSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19
Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3Vw
VGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJG
dW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5z
ZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNp
emUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAvIDI1NS4wKTsKLSAgICAgICAgayA9IHN0ZDo6
bWluKGssIG4gLSAxKTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVzW2td
OwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAg
ICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0K
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUg
KiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4w
LCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0
cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEg
ZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBw
b3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGRUNvbXBvbmVu
dFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVl
bkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24s
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBt
X3JlZEZ1bmN0aW9uKHJlZEZ1bmN0aW9uKQorICAgICwgbV9ncmVlbkZ1bmN0aW9uKGdyZWVuRnVu
Y3Rpb24pCisgICAgLCBtX2JsdWVGdW5jdGlvbihibHVlRnVuY3Rpb24pCisgICAgLCBtX2FscGhh
RnVuY3Rpb24oYWxwaGFGdW5jdGlvbikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGdyZWVuVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhy
ZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKLQotICAgIEludFJl
Y3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoID0gZGVzdGluYXRpb25QaXhl
bEFycmF5Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBkZXN0aW5hdGlvblBpeGVsQXJy
YXkuZGF0YSgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNl
dCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAg
ICAgICBkYXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKLSAg
ICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0
ICsgMV1dOwotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtw
aXhlbE9mZnNldCArIDJdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFU
YWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgM11dOwotICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9v
a3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxl
JiBhbHBoYVRhYmxlKQorRmlsdGVyUmVzdWx0KiBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseShG
aWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZm
ZXIqKSBjb25zdAogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWRUYWJsZS5zaXpl
KCk7ICsraSkKLSAgICAgICAgcmVkVGFibGVbaV0gPSBncmVlblRhYmxlW2ldID0gYmx1ZVRhYmxl
W2ldID0gYWxwaGFUYWJsZVtpXSA9IGk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOwor
ICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBl
ID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlk
ZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAg
ICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lE
RU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxl
LCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgotICAgICAgICBjb21wdXRl
R2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9
OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fcmVkRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJS
QVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZ3JlZW5GdW5jdGlvbi50eXBlKSA8IFdURl9BUlJB
WV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9ibHVlRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlf
TEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYWxwaGFGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9M
RU5HVEgoY2FsbEVmZmVjdCkpOwotCi0gICAgY2FsbEVmZmVjdFttX3JlZEZ1bmN0aW9uLnR5cGVd
KHJlZFRhYmxlLCBtX3JlZEZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fZ3JlZW5GdW5jdGlv
bi50eXBlXShncmVlblRhYmxlLCBtX2dyZWVuRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9i
bHVlRnVuY3Rpb24udHlwZV0oYmx1ZVRhYmxlLCBtX2JsdWVGdW5jdGlvbik7Ci0gICAgY2FsbEVm
ZmVjdFttX2FscGhhRnVuY3Rpb24udHlwZV0oYWxwaGFUYWJsZSwgbV9hbHBoYUZ1bmN0aW9uKTsK
KyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb25lbnRU
cmFuc2ZlclR5cGUgdHlwZSkKQEAgLTIwOSwxMCArMTA0LDkgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGYKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9u
VHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29tcG9uZW50VHJhbnNm
ZXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHRzIDw8ICJcbiI7CiAgICAgewogICAgICAgICBUZXh0U3RyZWFtOjpJ
bmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgMik7CkBAIC0yMjEsOSArMTE1LDYgQEAgVGV4dFN0
cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgUmVwcmVzZW4KICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7Ymx1ZTogIiA8PCBt
X2JsdWVGdW5jdGlvbiA8PCAifVxuIjsKICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7YWxwaGE6
ICIgPDwgbV9hbHBoYUZ1bmN0aW9uIDw8ICJ9XVxuIjsKICAgICB9Ci0KLSAgICBUZXh0U3RyZWFt
OjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggMmI1ODZkZWY3ZmI0MmEzN2IyZTEy
M2VkYTg3MTE5YzRlYjM0OGE1MS4uNzYxMDY5ZGI4OWU0Mzc3NGE4NzY4MzY5ZTk1NTZlNjcxNjE0
NGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDkgKzI0LDYgQEAKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gQ29tcG9uZW50VHJhbnNm
ZXJUeXBlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBjcmVhdGUoRmls
dGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJs
dWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOworICAg
IHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVl
RnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24p
OwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRGdW5jdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdy
ZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuRnVuY3Rpb247IH0KQEAgLTYyLDI0
ICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBhbHBoYUZ1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1bmN0aW9uOyB9CiAKIHByaXZhdGU6Ci0g
ICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1
bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5j
KTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBo
YUZ1bmN0aW9uKTsKIAotICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90
LCAyNTY+OworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KIAotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVu
dGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZURp
c2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVH
YW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgY29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUs
IExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBU
YWJsZSYgYWxwaGFUYWJsZSk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG1fcmVkRnVuY3Rpb247CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBt
X2dyZWVuRnVuY3Rpb247CkBAIC04OCw3ICs3NiwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2ZlcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFz
c1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVy
OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhi
NTllNjZkZTlmZThkNjM5MTZjYmU1Y2U2ZGQ0MDM4ZmE0Y2IyYTguLmNmMDRlNDNjNTUyMjkwNzFk
M2YxZjMyNTQ0Zjg5ZjQ1OWJhNThhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI1LDE5IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29t
cG9zaXRlQXJpdGhtZXRpY05FT04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRl
OjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlw
ZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBG
aWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlwZSkK
K1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVPcGVy
YXRvciwgazEsIGsyLCBrMywgazQpKTsKK30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZF
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogbV9jb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVP
cGVyYXRvcikKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQogICAgICwgbV9rMyhrMykK
QEAgLTQyLDI2NCArNDUsNjIgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYgZmls
dGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG8KIHsKIH0KIAotUmVm
PEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBD
b21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGsz
LCBmbG9hdCBrNCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShmaWx0
ZXIsIHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVDb21wb3NpdGU6OnNldE9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCitib29sIEZFQ29tcG9zaXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
KQogewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFu
Z2UobV9jb21wb3NpdGVPcGVyYXRvciwgY29tcG9zaXRlT3BlcmF0b3IpICE9IG1fY29tcG9zaXRl
T3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZsb2F0IGsxKQogewotICAg
IGlmIChtX2sxID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMSA9IGsxOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazEsIGsxKSAhPSBt
X2sxOwogfQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMihmbG9hdCBrMikKIHsKLSAgICBpZiAo
bV9rMiA9PSBrMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazIgPSBrMjsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2syLCBrMikgIT0gbV9rMjsK
IH0KIAogYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzMoZmxvYXQgazMpCiB7Ci0gICAgaWYgKG1fazMg
PT0gazMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2szID0gazM7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMywgazMpICE9IG1fazM7CiB9CiAK
IGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogewotICAgIGlmIChtX2s0ID09IGs0
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rNCA9IGs0OwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazQsIGs0KSAhPSBtX2s0OwogfQogCi12b2lk
IEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQorRmxvYXRSZWN0IEZF
Q29tcG9zaXRlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChtX3R5cGUg
IT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLX0KKyAgICAvLyBGb3IgSW4gYW5k
IEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgorICAg
IC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVj
dCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgorICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9y
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOIHx8IG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVD
T01QT1NJVEVfT1BFUkFUT1JfQVRPUCkKKyAgICAgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERyYXdp
bmdSZWN0KGlucHV0cywgaW5wdXRzWzFdLT5kcmF3aW5nUmVjdCgpKTsKICAgICAKLXN0YXRpYyB1
bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZb
XSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OwotICAgIHVuc2ln
bmVkIHVjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMpOwotICAgIHJldHVybiBidWZmWyEhKHVj
ICYgfjB4ZmYpICsgISEodWMgJiB+KH4wdSA+PiAxKSldOwotfQotCi10ZW1wbGF0ZSA8aW50IGIx
LCBpbnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHModW5z
aWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVs
QXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewot
ICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChiMSkKLSAg
ICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAgIHNjYWxl
ZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3RoID49IDAp
IHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVuc2lnbmVk
IGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsyICogaTEg
KyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVk
SzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2Nh
bGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gY2xhbXBCeXRlKHJlc3VsdCk7Ci0gICAg
ICAgICsrc291cmNlOwotICAgICAgICArK2Rlc3RpbmF0aW9uOwotICAgIH0KLX0KLQotLy8gY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQgaXMgYSBmYXN0ZXIgdmVyc2lvbiBvZiBjb21w
dXRlQXJpdGhtZXRpY1BpeGVscyBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGNsYW1waW5nCi0v
LyBpcyBub3QgbmVjZXNzYXJ5LiBUaGlzIGVuYWJsZXMgYWdncmVzaXZlIGNvbXBpbGVyIG9wdGlt
aXphdGlvbnMgc3VjaCBhcyBhdXRvLXZlY3Rvcml6YXRpb24uCi10ZW1wbGF0ZSA8aW50IGIxLCBp
bnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50
IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChi
MSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAg
IHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3Ro
ID49IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsy
ICogaTEgKyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0g
c2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQg
Kz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gcmVzdWx0OwotICAgICAgICAr
K3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLSNpZiAhSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQotc3RhdGljIGlubGluZSB2b2lkIGFyaXRobWV0aWNTb2Z0d2Fy
ZSh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQg
cGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
Ci17Ci0gICAgZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYsIGsxKSArIHN0ZDo6bWF4
KDAuMGYsIGsyKSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OwotICAgIGZsb2F0IGxvd2VyTGlt
aXQgPSBzdGQ6Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBrMikgKyBzdGQ6Om1pbigw
LjBmLCBrMykgKyBrNDsKLSAgICBpZiAoKGs0ID49IDAuMGYgJiYgazQgPD0gMS4wZikgJiYgKHVw
cGVyTGltaXQgPj0gMC4wZiAmJiB1cHBlckxpbWl0IDw9IDEuMGYpICYmIChsb3dlckxpbWl0ID49
IDAuMGYgJiYgbG93ZXJMaW1pdCA8PSAxLjBmKSkgewotICAgICAgICBpZiAoazQpIHsKLSAgICAg
ICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1Vu
Y2xhbXBlZDwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFy
aXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKGsxKQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwg
azMsIGs0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGht
ZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5
TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChrNCkgewotICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsczwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVu
Z3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoazEpCi0gICAg
ICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9u
LCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24s
IHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9Ci19Ci0jZW5kaWYKLQot
aW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi17Ci0gICAgaW50IGxl
bmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0
PGludD4oZGVzdGluYXRpb24ubGVuZ3RoKCkpKTsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUg
ZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5LgotI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKLSAgICBwbGF0Zm9ybUFy
aXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBr
MSwgazIsIGszLCBrNCk7Ci0jZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2UuZGF0
YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsK
LSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICAvLyBGb3IgSW4g
YW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgot
ICAgICAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBh
aW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQ
YWludFJlY3QoaW5wdXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBj
bGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKLSAgICAgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5m
bHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0Ci0g
ICAgICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KLSAgICAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJv
dGggaW5wdXQgZWZmZWN0cy4KLSAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIC8vIEFyaXRobWV0aWMg
bWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBj
YW4ndAorICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KKyAgICBpZiAobV9j
b21wb3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAg
ICAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CisgICAg
CisgICAgcmV0dXJuIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoaW5wdXRzLCBnZW9tZXRyeSk7
CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFQ29tcG9zaXRlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBpZiAobV90eXBl
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwot
ICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlw
bGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEs
IG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1
ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbiA9IHN0
YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBzdGFjay50YWtlTGFzdCgpOworICAgIAor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdp
b24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9
IGRlc3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAg
ICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3Rp
bmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9z
aXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6
ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5s
b2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3ApOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZm
ZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0
dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluLCBpbjIgfSwgbnVsbHB0cik7CiB9CiAKLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3Np
dGVPcGVyYXRpb25UeXBlJiB0eXBlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZFQ29tcG9zaXRlT3BlcmF0b3ImIGNvbXBvc2l0ZU9wZXJhdG9y
KQogewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0b3Ip
IHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgIHRzIDw8
ICJVTktOT1dOIjsKICAgICAgICAgYnJlYWs7CkBAIC0zMjgsMTggKzEyOSwxMyBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSYgdHlwZQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb21w
b3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0
aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29tcG9zaXRlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlv
bikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbXBvc2l0ZSI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0g
ICAgdHMgPDwgIiBvcGVyYXRpb249XCIiIDw8IG1fdHlwZSA8PCAiXCIiOwotICAgIGlmIChtX3R5
cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICB0cyA8PCAiIG9wZXJh
dGlvbj1cIiIgPDwgbV9jb21wb3NpdGVPcGVyYXRvciA8PCAiXCIiOworICAgIGlmIChtX2NvbXBv
c2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCiAgICAgICAg
IHRzIDw8ICIgazE9XCIiIDw8IG1fazEgPDwgIlwiIGsyPVwiIiA8PCBtX2syIDw8ICJcIiBrMz1c
IiIgPDwgbV9rMyA8PCAiXCIgazQ9XCIiIDw8IG1fazQgPDwgIlwiIjsKICAgICB0cyA8PCAiXVxu
IjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXggN2QwOGUxZjcx
MDdiNGI5NjhjNThlM2EzN2MzMmFlMmY3NmFlYTBjMy4uOTlmMjkwNWRjZmJjMDRjOGZjMWVhNThm
MWMwYTVmMWI4OWViNDNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTIgKzI0LDkgQEAKIAogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBDb21wb3NpdGVP
cGVyYXRpb25UeXBlIHsKK2VudW0gRkVDb21wb3NpdGVPcGVyYXRvciB7CiAgICAgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfVU5LTk9XTiAgICA9IDAsIAogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX09W
RVIgICAgICAgPSAxLAogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOICAgICAgICAgPSAyLApA
QCAtNDEsMTAgKzM5LDEwIEBAIGVudW0gQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB7CiAKIGNsYXNz
IEZFQ29tcG9zaXRlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRUNvbXBvc2l0ZT4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRUNv
bXBvc2l0ZT4gY3JlYXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KTsKIAotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSk7CisgICAgRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBib29s
IHNldENvbXBvc2l0ZU9wZXJhdG9yKEZFQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgZmxvYXQg
azEoKSBjb25zdCB7IHJldHVybiBtX2sxOyB9CiAgICAgYm9vbCBzZXRLMShmbG9hdCk7CkBAIC01
OCwzMCArNTYsMjAgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1cm4gbV9r
NDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1
aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAh
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6Ci0gICAgRkVD
b21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBGRUNvbXBvc2l0ZShGRUNvbXBvc2l0ZU9wZXJhdG9y
LCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKICAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9zaXRlIjsgfQog
Ci0gICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZl
Y3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0
IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAgICBib29sIGFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCi0gICAgdGVtcGxhdGUgPGludCBiMSwgaW50IGI0PgotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc05lb24oY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxv
YXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOworICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZv
cm1Bcml0aG1ldGljTmVvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0
IGszLCBmbG9hdCBrNCk7Ci0jZW5kaWYKLQotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgbV90
eXBlOworICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgbV9jb21wb3NpdGVPcGVyYXRvcjsKICAgICBm
bG9hdCBtX2sxOwogICAgIGZsb2F0IG1fazI7CiAgICAgZmxvYXQgbV9rMzsKQEAgLTg5LDQgKzc3
LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAKaW5kZXggNzViMmU3YzZlYTEzYzJjMWMyZjhmNjVkM2RiNGVkNWNjM2Fm
ZGE4Zi4uMTEyMzkzYWIwODZjZWRiOGJlZjZlNjFkZTQwNDg3YThhOTkxNjk4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFu
IEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQs
MTkgKzI1LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1h
dHJpeC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
LSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5o
PgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0Lmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywg
Y29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAg
IGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6Q29udm9sdmVNYXRyaXgpCi0gICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6
ZSkKK1JlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoY29uc3Qg
SW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50
UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBv
aW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIGtlcm5lbE1hdHJpeCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbnZv
bHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1v
ZGUsIGtlcm5lbFVuaXRMZW5ndGgsIHByZXNlcnZlQWxwaGEsIGtlcm5lbE1hdHJpeCkpOworfQor
CitGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5l
bFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRP
ZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5p
dExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxN
YXRyaXgpCisgICAgOiBtX2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKICAgICAsIG1fZGl2aXNvcihk
aXZpc29yKQogICAgICwgbV9iaWFzKGJpYXMpCiAgICAgLCBtX3RhcmdldE9mZnNldCh0YXJnZXRP
ZmZzZXQpCkBAIC00OSwxNCArNTAsNiBAQCBGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0
cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIEFTU0VS
VChtX2tlcm5lbFNpemUuaGVpZ2h0KCkgPiAwKTsKIH0KIAotUmVmPEZFQ29udm9sdmVNYXRyaXg+
IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYg
a2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2lu
dCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQ
b2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb252
b2x2ZU1hdHJpeChmaWx0ZXIsIGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNl
dCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCi0gICAgICAgIHByZXNlcnZlQWxwaGEsIGtl
cm5lbE1hdHJpeCkpOwotfQotCiB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUo
Y29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSkKIHsKICAgICBBU1NFUlQoa2VybmVsU2l6ZS53aWR0
aCgpID4gMCk7CkBAIC0xMjAsMzE4ICsxMTMsMjAgQEAgYm9vbCBGRUNvbnZvbHZlTWF0cml4Ojpz
ZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotLyoKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICBDb252
b2x2ZU1hdHJpeCBpbXBsZW1lbnRhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAgVGhlIGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93
aW5nIHdheToKLQotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAg
ICAgQSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAg
IHwgICAgICAgICAgICAgfCAgIHwKLSAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8Ci0gICAg
ICB8ICAgfCAgICAgICAgICAgICB8ICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK
LSAgICAgIHwgICAgICAgICAgRSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKwotCi0gICBXaGVyZSByZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZh
bHVlcwotICAgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0
aGUgcmVjdGFuZ2xlLgotCi0gICBFeGFtcGxlOgotICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEw
LCBoZWlnaHQ6IDEwCi0KLSAgICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDog
MywgaGVpZ2h0IDQKLSAgICAgIFRhcmdldDogeDoxLCB5OjMKLQotICAgICAgVGhlIGZvbGxvd2lu
ZyBmaWd1cmUgc2hvd3MgdGhlIHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6Ci0KLSAg
ICAgICAgLi4uCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLlguCi0KLSAgIFRo
ZSByZWdpb25zIGluIHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKLSAgICAgIE5vdGU6ICh4
MSwgeTEpIHRvcC1sZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgot
ICAgICAgTm90ZTogcm93IHgyIGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lv
bgotICAgICAgICAgICAgb25seSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwg
eDIgYW5kIHkxIDw9IHkgPCB5MgotCi0gICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4Mjog
MTAsIHkyOiAzCi0gICAgICBSZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCi0g
ICAgICBSZWdpb24gQzogeDE6IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCi0gICAgICBSZWdpb24g
RDogeDE6IDksIHkxOiAzLCB4MjogMTAsIHkyOiAxMAotICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5
MTogMTAsIHgyOiAxMCwgeTI6IDEwIChlbXB0eSByZWdpb24pCi0KLSAgIFNpbmNlIHJlZ2lvbiBD
IChvZnRlbikgY29udGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAotICAg
YSBmYXN0IGFsZ29yaXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0
SW50ZXJpb3JQaXhlbHMuCi0gICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxz
IGlzIHVzZWQsIHdoaWNoIGNhbGxzIGdldFBpeGVsVmFsdWUsCi0gICB0byBoYW5kbGUgcGl4ZWxz
IG91dHNpZGUgb2YgdGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgotICAga2Vy
bmVsIG1hdHJpeCBpcyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1
bGF0ZWQgYnkgdGhpcwotICAgZnVuY3Rpb24uCi0KLSAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5j
dGlvbnMgaGF2ZSBsb3QgaW4gY29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKLSAgIGNvbW1v
biBhIHRlbXBsYXRlIGZvciB0aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFz
IHdlbGwsCi0gICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgot
Ki8KLQotc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShm
bG9hdCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG1heCA9IDI1NSkKK0Zsb2F0UmVjdCBGRUNvbnZv
bHZlTWF0cml4OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChjaGFubmVs
IDw9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChjaGFubmVsID49IG1heCkKLSAgICAg
ICAgcmV0dXJuIG1heDsKLSAgICByZXR1cm4gY2hhbm5lbDsKKyAgICByZXR1cm4gZ2VvbWV0cnku
bWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CiB9CiAKLXRlbXBsYXRlPGJvb2wgcHJlc2Vy
dmVBbHBoYVZhbHVlcz4KLUFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxv
YXQgYmlhcykKK0ZpbHRlclJlc3VsdCogRkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoRmlsdGVyT3V0
cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29u
c3QKIHsKLSAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/
IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwr
KywgY2xhbXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7
Ci0KLSAgICBpZiAocHJlc2VydmVBbHBoYVZhbHVlcykgewotICAgICAgICBkZXN0UGl4ZWxzLnNl
dChwaXhlbCwgc291cmNlUGl4ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAgICAgKytwaXhlbDsKLSAg
ICB9IGVsc2UKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwotfQot
Ci0jaWYgQ09NUElMRVIoTVNWQykKLS8vIEluY29ycmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRl
IG9mIHN0YWNrIGluIHx0b3RhbHN8IGR1ZSB0byB8cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJh
Z21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlm
Ci0KLS8vIE9ubHkgZm9yIHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1
ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9y
UGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xp
cEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8gZWRnZSBtb2RlIGRvZXMg
bm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQu
eSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAg
aW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0g
KG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0g
b2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhh
VmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7
Ci0KLSAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKLSAg
ICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQg
KyAxKSAqIDQpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5k
KSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQotICAgIGZvciAoaW50IHkg
PSB5RW5kICsgMTsgeSA+IHlTdGFydDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBjbGlw
UmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBw
YWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2Vy
bmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9r
ZXJuZWxTaXplLndpZHRoKCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1
dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwot
ICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0g
ICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90
YWxzWzNdID0gMDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7
ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAgICAgICB3aGlsZSAo
a2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAg
ICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJu
ZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5r
ZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIGlm
ICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9
IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKLSAgICAg
ICAgICAgICAgICArK2tlcm5lbFBpeGVsOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7
Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtl
cm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9
IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBw
aXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKLSAgICAgICAgICAg
IHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5j
cmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOwotICAgIH0KLX0K
LQotQUxXQVlTX0lOTElORSBpbnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQotewotICAgIGlmICh4ID49IDAg
JiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5o
ZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7
Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9O
T05FCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKLSAg
ICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHgg
Pj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0
aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkKLSAgICAgICAgICAgIHkgPSAwOwotICAgICAgICBl
bHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgICAgICB5ID0gcGFpbnRp
bmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0
aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAgICB3aGlsZSAoeCA8
IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICAgICAgeCAlPSBw
YWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHdoaWxlICh5IDwgMCkKLSAgICAgICAgICAgIHkg
Kz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0
OwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAg
IH0KLX0KLQotLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1wbGF0ZTxib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50
IHkyKQotewotICAgIGludCBwaXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAq
IDQ7Ci0gICAgaW50IGhlaWdodCA9IHkyIC0geTE7Ci0gICAgaW50IHdpZHRoID0geDIgLSB4MTsK
LSAgICBpbnQgYmVnaW5LZXJuZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKLSAg
ICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3Rh
cnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsKLSAgICBpbnQgeEluY3Jl
YXNlID0gKHBhaW50aW5nRGF0YS53aWR0aCAtIHdpZHRoKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMg
dGhlIHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNl
cnZlQWxwaGFWYWx1ZXMgPyAwIDogMSldOwotCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAw
LCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9k
aXZpc29yKTsKLQotICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2Vy
bmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAg
ICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICBp
bnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lk
dGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsK
LSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwot
ICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRv
dGFsc1szXSA9IDA7Ci0KLSAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0
YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOwotICAgICAgICAgICAgICAgIGlmIChwaXhl
bEluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5n
RGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCkpOwotICAgICAgICAgICAgICAg
ICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhl
bEluZGV4ICsgMSkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJ
bmRleCA+PSAwKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRh
Lmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMykpOwotICAgICAgICAgICAgICAg
ICsra2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVs
WCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVs
WTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0
aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBw
YWludGluZ0RhdGEuYmlhcyk7Ci0gICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwotICAg
ICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3RhcnRLZXJuZWxQ
aXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsK
LSAgICB9Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8g
RGlzYWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
Y2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAg
Ly8gTXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdB
WVNfSU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291
cmNlIGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RT
ZXRJbnRlcmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRv
bSwgeVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVs
czxmYWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVu
ZCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBp
eGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4Miwg
aW50IHkyKQotewotICAgIC8vIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRv
IHRoZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldElu
dGVyaW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZl
QWxwaGEpCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgx
LCB5MSwgeDIsIHkyKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxz
ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9w
cmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVs
QXJyYXk7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJh
eSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7Ci0gICAgZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnBy
ZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50
U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIFBhaW50aW5nRGF0YSBw
YWludGluZ0RhdGEgPSB7Ci0gICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0
aW5hdGlvblBpeGVsQXJyYXksCi0gICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAotICAgICAgICBw
YWludFNpemUuaGVpZ2h0KCksCi0gICAgICAgIG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9ybWFs
aXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKLSAgICB9OwotCi0gICAgLy8gRHJhd2luZyBmdWxs
eSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAt
IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhl
aWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOwotCi0gICAgaWYgKGNsaXBSaWdodCA8IDAg
fHwgY2xpcEJvdHRvbSA8IDApIHsKLSAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRp
bWl6aWVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0
KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVj
dERpbWVuc2lvbikgewotICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlv
bnM7Ci0gICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAv
IHN0cmlkZTsKLQotICAgICAgICBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShjaHVua0NvdW50
LCBbJl0oc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAq
IGluZGV4KTsKLSAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAo
aW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxz
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAg
ICAgICB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdE
YXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJp
Z2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3Rhcmdl
dE9mZnNldC55KCkgKyAxOwotICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAg
ICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBt
X3RhcmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdo
dCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20s
IHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3Rhcmdl
dE9mZnNldC54KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAg
ICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6
ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0cik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCkBAIC00NTMsMTAgKzE0OCw5
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBF
ZGdlTW9kZVR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNv
bnZvbHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXBy
ZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbnZv
bHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbnZvbHZl
TWF0cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG9yZGVyPVwiIiA8PCBtX2tlcm5lbFNpemUgPDwg
IlwiICIKICAgICAgICA8PCAia2VybmVsTWF0cml4PVwiIiA8PCBtX2tlcm5lbE1hdHJpeCAgPDwg
IlwiICIKICAgICAgICA8PCAiZGl2aXNvcj1cIiIgPDwgbV9kaXZpc29yIDw8ICJcIiAiCkBAIC00
NjUsOSArMTU5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXQKICAgICAgICA8PCAiZWRnZU1v
ZGU9XCIiIDw8IG1fZWRnZU1vZGUgPDwgIlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0
aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoIDw8ICJcIiAiCiAgICAgICAgPDwgInByZXNlcnZl
QWxwaGE9XCIiIDw8IG1fcHJlc2VydmVBbHBoYSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVh
bTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDY3ZDRjNjU2N2ZjZTZiMjdlZTVhYjg5NWE2
ZTFlNTAwNTRlMTNkYmEuLjFhNjk1YjRkOTIxZjI2ODY2ZjBkYTNkMTJiOWNmMmI2MGUzOTc0MjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBa
b2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNCw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw5ICszOCw3IEBAIGVudW0gRWRnZU1vZGVU
eXBlIHsKIAogY2xhc3MgRkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRlciYs
IGNvbnN0IEludFNpemUmLAotICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2lu
dCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29sLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisgICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBj
cmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlh
cywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2tlcm5lbFNpemU7IH0KICAgICB2b2lkIHNldEtlcm5lbFNpemUoY29uc3Qg
SW50U2l6ZSYpOwpAQCAtNjcsNDEgKzY1LDE3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFByZXNl
cnZlQWxwaGEoYm9vbCk7CiAKIHByaXZhdGU6Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsK
LSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAg
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0g
ICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGZsb2F0IGJpYXM7Ci0gICAgICAgIFZlY3Rvcjxm
bG9hdD4ga2VybmVsTWF0cml4OwotICAgIH07Ci0KLSAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRl
ciYsIGNvbnN0IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQ
b2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mKTsKKyAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNp
emUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZz
ZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9v
bCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCiAg
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZv
bHZlTWF0cml4IjsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2Vy
dmVBbHBoYVZhbHVlcz4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9yUGl4
ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0
YXJ0LCBpbnQgeUVuZCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1ZShQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHkpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJS
ZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0
cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTQsNCArODgsMyBAQCBwcml2YXRlOgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3Bw
CmluZGV4IGVlYjE3MjhkYjM1ZThhYzMwMmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLjU5NzlkMGZj
OWExMDlhMmU3NDY1OWNjOThhNGNjZWQ0MTBjNzU5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI3LDM2ICsyOCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVzZUxp
Z2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNl
TGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAw
LCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRT
b3VyY2UpLCBUeXBlOjpEaWZmdXNlTGlnaHRpbmcpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZF
RGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2Nh
bGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlKQorRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VT
Y2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RURpZmZ1c2VMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlm
ZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1v
dmUobGlnaHRTb3VyY2UpKSk7CiB9CiAKLUZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZmdXNlTGln
aHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRkVEaWZmdXNlTGlnaHRpbmc6OnNldERpZmZ1c2VD
b25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCi17Ci0gICAgaWYgKG1fZGlmZnVzZUNvbnN0
YW50ID09IGRpZmZ1c2VDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGlm
ZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1U
ZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4
dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlRGlmZnVzZUxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHN1cmZhY2VTY2Fs
ZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKICAgICAgICA8PCAiZGlmZnVzZUNvbnN0
YW50PVwiIiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxV
bml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJuZWxV
bml0TGVuZ3RoWSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5k
ZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYzZTExMjhiODQyNjE1ZTQ3NTEzYTBkZGRjMy4u
OTYwMDYyMDQ5YTIyZmU1YTg1Y2JmZWJiMzQ5ZWNmMWFiZDQxNzk3MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNl
TGlnaHRpbmcuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNSwyMSArMjYsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBM
aWdodFNvdXJjZTsKLQogY2xhc3MgRkVEaWZmdXNlTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGlu
ZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKEZp
bHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdo
dFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVEaWZmdXNlTGlnaHRpbmcoKTsKLQotICAgIGZs
b2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9
Ci0gICAgYm9vbCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQpOwotCi0gICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGlu
Zz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNl
Q29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGlu
ZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8
TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAg
ICAKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
IkZFRGlmZnVzZUxpZ2h0aW5nIjsgfQorCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcAppbmRleCAwNDc0OTMzOTJiYjI4MTQ2ZDhiMTY5YmEwYTdjMzJiMTZjNTYz
ZmExLi5kODUyMDQxYzM4ODI5MDU4OWVmNzExM2Y5MmExYjU5YzJlNjcwZGUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjQsMTMyICsyNSw1MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFRGlzcGxhY2VtZW50TWFwLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpc3BsYWNl
bWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRpc3Bs
YWNlbWVudE1hcCkKLSAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQot
ICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCi0gICAgLCBtX3NjYWxl
KHNjYWxlKQorUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRl
KENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRURpc3BsYWNlbWVudE1hcCh4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9y
LCBzY2FsZSkpOwogfQogCi1SZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFw
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxl
Y3RvciwKLSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNj
YWxlKQorRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSkKKyAgICA6IG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVj
dG9yKQorICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCisgICAgLCBt
X3NjYWxlKHNjYWxlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlzcGxhY2VtZW50
TWFwKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsK
IH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBD
aGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IpCiB7Ci0gICAgaWYgKG1feENoYW5u
ZWxTZWxlY3RvciA9PSB4Q2hhbm5lbFNlbGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV94Q2hhbm5lbFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3hDaGFubmVsU2VsZWN0b3IsIHhDaGFubmVs
U2VsZWN0b3IpICE9IG1feENoYW5uZWxTZWxlY3RvcjsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVu
dE1hcDo6c2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFu
bmVsU2VsZWN0b3IpCiB7Ci0gICAgaWYgKG1feUNoYW5uZWxTZWxlY3RvciA9PSB5Q2hhbm5lbFNl
bGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV95Q2hhbm5lbFNlbGVjdG9yID0g
eUNoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNo
YW5nZShtX3lDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IpICE9IG1feUNoYW5uZWxT
ZWxlY3RvcjsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2Nh
bGUpCiB7Ci0gICAgaWYgKG1fc2NhbGUgPT0gc2NhbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3NjYWxlID0gc2NhbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJikKLXsKLSAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycg
cHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UKLSAgICAvLyBh
bmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUgJ2luJyBzb3Vy
Y2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCi0gICAgLy8gY3VycmVudCBjb2xvciBzcGFjZS4K
LSAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBiZWNhdXNlIGl0
IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRlckVmZmVjdDo6
c2V0UmVzdWx0Q29sb3JTcGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpKTsK
LX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShG
aWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gbm90IHRyYW5z
Zm9ybSB0aGUgZmlyc3QgcHJpbWl0aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYg
KGluZGV4KQotICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2NhbGUsIHNjYWxlKSAh
PSBtX3NjYWxlOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVs
KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQorRmxvYXRSZWN0IEZF
RGlzcGxhY2VtZW50TWFwOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGNvbnN0
IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhl
bCArIHkgKiByb3dCeXRlczsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVn
aW9uKGlucHV0cyk7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXJP
dXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBj
b25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgQVNTRVJUKG1feENoYW5uZWxT
ZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwotICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0
b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgp
ID49IDIpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFE
cmF3aW5nUmVjdCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKAmGluMuKA
mSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KLSAg
ICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0
QkRyYXdpbmdSZWN0KTsKLSAgICAKLSAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3BsYWNlbWVu
dEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaW5wdXRJbWFnZS0+bGVuZ3Ro
KCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsKLQotICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotCi0gICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2Fs
ZS53aWR0aCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWln
aHQoKSAvIDI1NS4wOwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0
aCgpICogMC41OwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFkgPSAwLjUgLSBzY2FsZS5oZWlnaHQo
KSAqIDAuNTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIGluMiA9
IHN0YWNrLnRha2VMYXN0KCk7CiAgICAgCi0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0g
eENoYW5uZWxJbmRleCgpOwotICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVs
SW5kZXgoKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0
aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgaW50IHJvd0J5dGVzID0gcGFp
bnRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNpemUu
aGVpZ2h0KCk7ICsreSkgewotICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJvd0J5
dGVzOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsr
eCkgewotICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQg
KyB4ICogNDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGlj
X2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3Rp
bmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKLSAg
ICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkg
KiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50
Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0
aW5hdGlvblBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9u
UGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKLSAgICAgICAgICAgIGlmIChz
cmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kg
Pj0gcGFpbnRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4
ZWxQdHIgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkKj4oaW5wdXRJbWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwg
cm93Qnl0ZXMpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShv
dXRwdXQsIHsgaW4sIGluMiB9LCBudWxscHRyKTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUp
CkBAIC0xNzQsMTcgKzk2LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFRGlzcGxhY2VtZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZURpc3BsYWNlbWVudE1hcCI7Ci0gICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBz
Y2FsZT1cIiIgPDwgbV9zY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJ4Q2hhbm5lbFNlbGVjdG9y
PVwiIiA8PCBtX3hDaGFubmVsU2VsZWN0b3IgPDwgIlwiICIKICAgICAgICA8PCAieUNoYW5uZWxT
ZWxlY3Rvcj1cIiIgPDwgbV95Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICBpbnB1dEVm
ZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAg
IHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IGRkNzMyYTg4MTA3
M2UyNjZiYzg0NmFmZTY4MTllNjc1MTYyM2EzYTIuLjM5Y2U1NDljZjE5ZWFjMGRhNTI4ZjYyYmYz
MDI0ODNkNjE1MTBkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zNyw3ICszNiw3IEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7CiAKIGNsYXNz
IEZFRGlzcGxhY2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKEZpbHRlciYsIENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNl
bGVjdG9yLCBmbG9hdCBzY2FsZSk7CisgICAgc3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4g
Y3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKICAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2Vs
ZWN0b3I7IH0KICAgICBib29sIHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVj
dG9yVHlwZSk7CkBAIC00OCwyMiArNDcsMjEgQEAgcHVibGljOgogICAgIGZsb2F0IHNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQogICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwogCi0g
ICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
IG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwotCiBwcml2YXRlOgotICAgIEZFRGlzcGxhY2VtZW50
TWFwKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5l
bFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CisgICAgRkVEaXNwbGFjZW1l
bnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKKworICAgIGludCB4Q2hhbm5l
bEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQorICAgIGlu
dCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsg
fQogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RURpc3BsYWNlbWVudE1hcCI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZp
bHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFj
aywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGludCB4
Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQot
ICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9y
IC0gMTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1f
eUNoYW5uZWxTZWxlY3RvcjsKQEAgLTcxLDQgKzY5LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDVjZTdiZTNhNDcxYjQ3
YjhkZDU0MjZkOTY1YmJmZTc4OWY2YmJkZDguLjgwODc1Yjg4YzQyNzNhNjJhOGMwOTBiZWQ1ZTE4
NzE3NzhlNDAxMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsOTggKzI0LDQ4IEBACiAjaW5jbHVk
ZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKICNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBm
aWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZm
ZWN0KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRvdykKLSAgICAsIG1fc3RkWChzdGRYKQotICAgICwg
bV9zdGRZKHN0ZFkpCi0gICAgLCBtX2R4KGR4KQotICAgICwgbV9keShkeSkKLSAgICAsIG1fc2hh
ZG93Q29sb3Ioc2hhZG93Q29sb3IpCi0gICAgLCBtX3NoYWRvd09wYWNpdHkoc2hhZG93T3BhY2l0
eSkKLXsKLX0KIAotUmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29u
c3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorUmVmPEZFRHJvcFNo
YWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQg
ZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgs
IGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIGNvbG9yLCBvcGFjaXR5KSk7CiB9
CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGRURy
b3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKKyAgICA6IG1fc3Rk
WChzdGRYKQorICAgICwgbV9zdGRZKHN0ZFkpCisgICAgLCBtX2R4KGR4KQorICAgICwgbV9keShk
eSkKKyAgICAsIG1fY29sb3IoY29sb3IpCisgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKIHsKLSAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotCi0gICAgRmxvYXRSZWN0IGFic29s
dXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAg
RmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKLSAg
ICBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29s
dXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShhYnNv
bHV0ZU9mZnNldFBhaW50UmVjdCk7Ci0KLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7
Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3
aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNv
bHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0g
ICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAw
LjVmKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRS
ZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1
dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLQotICAgIHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBG
RURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVEcm9wU2hh
ZG93OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0
ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFk
aXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKLSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBG
bG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgs
IG1fZHkgfSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKLSAgICBkcmF3aW5nUmVnaW9uV2l0
aE9mZnNldC5tb3ZlKG9mZnNldCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBp
bi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFjaXR5
KTsKLSAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdp
bmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOwotCi0g
ICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dD
b2xvcik7Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3Bh
Y2UoKSB9OwotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+
bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQ
aXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxB
cnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgp
LndpZHRoKCkpOwotICAgIAotICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxC
dWZmZXIsIHNoYWRvd0FyZWEpOwotCi0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKLSAgICByZXN1bHRDb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KSwgbV9zaGFkb3dDb2xvcik7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7Ci0KLSAgICByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb24p
OworICAgIHJldHVybiB7IH07CisvLyAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigp
OworLy8KKy8vICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDAp
LT5hYnNvbHV0ZVBhaW50UmVjdCgpOworLy8gICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFp
bnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKKy8vICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0
Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwor
Ly8gICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOwor
Ly8KKy8vICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVL
ZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKy8vCisvLyAgICAvLyBXZSB0
YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNh
dXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKy8vICAgIGFic29sdXRlUGFpbnRSZWN0
LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKKy8vICAgIGFic29sdXRl
UGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CisvLwor
Ly8gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKKy8vICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5p
bnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKKy8vICAgIGVsc2UKKy8vICAgICAgICBhYnNvbHV0
ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworLy8KKy8vICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKIH0KIAogSW50T3V0c2V0cyBGRURyb3BT
aGFkb3c6Om91dHNldHMoKSBjb25zdApAQCAtMTI4LDE0ICs3OSwyMyBAQCBJbnRPdXRzZXRzIEZF
RHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0CiAgICAgfTsKIH0KIAotVGV4dFN0cmVhbSYgRkVE
cm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNl
bnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFRHJvcFNo
YWRvdzo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsKLSAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNo
YWRvdyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAi
LCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5
IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFj
aXR5IDw8ICJdXG4iOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGlu
ID0gc3RhY2sudGFrZUxhc3QoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1
bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICByZXR1cm4g
YXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0m
IEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmls
dGVyUmVwcmVzZW50YXRpb24pIGNvbnN0Cit7CisgICAgdHMgIDw8IGluZGVudCA8PCJbZmVEcm9w
U2hhZG93IjsKKyAgICB0cyAgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAi
IDw8IG1fc3RkWQorICAgICAgICA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8
PCBtX2R5CisgICAgICAgIDw8ICJcIiBjb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQobV9jb2xvcikgPDwiXCIgb3BhY2l0eT1cIiIgPDwgbV9vcGFjaXR5IDw8ICJd
XG4iOwogICAgIHJldHVybiB0czsKIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAx
MmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEyOWVmZjM4NGMuLmQ1NTY1ZTQ5NzI4ZTA4M2UxYjMxM2Vl
ZDExNmJiYzY1YjA4N2NiODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwxNCArMjEsMTMgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3Mg
RkVEcm9wU2hhZG93IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+
IGNyZWF0ZShmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0
IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAKICAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29u
c3QgeyByZXR1cm4gbV9zdGRYOyB9CiAgICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0
ZFgpIHsgbV9zdGRYID0gc3RkWDsgfQpAQCAtNDEsMzIgKzQxLDMzIEBAIHB1YmxpYzoKICAgICBm
bG9hdCBkeSgpIGNvbnN0IHsgcmV0dXJuIG1fZHk7IH0KICAgICB2b2lkIHNldER5KGZsb2F0IGR5
KSB7IG1fZHkgPSBkeTsgfQogCi0gICAgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFkb3dDb2xvcjsgfSAKLSAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7IH0KKyAg
ICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgdm9p
ZCBzZXRjQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsgfQogCi0g
ICAgZmxvYXQgc2hhZG93T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93T3BhY2l0eTsg
fQotICAgIHZvaWQgc2V0U2hhZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hh
ZG93T3BhY2l0eSA9IHNoYWRvd09wYWNpdHk7IH0KKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
IHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQogCiBwcml2YXRlOgotICAgIEZFRHJvcFNoYWRvdyhG
aWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7
CisgICAgRkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9h
dCBkeSwgY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQogCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVz
dWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciopIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZp
bHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7
CiAgICAgZmxvYXQgbV9keDsKICAgICBmbG9hdCBtX2R5OwotICAgIENvbG9yIG1fc2hhZG93Q29s
b3I7Ci0gICAgZmxvYXQgbV9zaGFkb3dPcGFjaXR5OworICAgIENvbG9yIG1fY29sb3I7CisgICAg
ZmxvYXQgbV9vcGFjaXR5OwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHAKaW5kZXggYjQyMzU1MzRjMzhiMWViYTIxMWVlODQ4NjE3OTkyMzgwZjNiNmIwMS4uOWJjYTJk
NWRjYTQ5NDUyZjdlNGM4YzhiZDc5OGMwOTJkZGM5MjUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCkBAIC0zLDYgKzMs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI0LDU2ICsyNSw1NSBAQAogI2luY2x1ZGUgIkZFRmxvb2QuaCIKIAog
I2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUZsb29kOjpGRUZsb29kKEZpbHRlciYgZmls
dGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Rmxvb2QpCi0gICAgLCBtX2Zsb29kQ29sb3IoZmxv
b2RDb2xvcikKLSAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29k
PiBGRUZsb29kOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQogewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2QoY29sb3IsIG9wYWNpdHkpKTsKIH0KIAot
UmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKK0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3Qg
Q29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQorICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAs
IG1fb3BhY2l0eShvcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2Qo
ZmlsdGVyLCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKIH0KIAotYm9vbCBGRUZsb29kOjpz
ZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK2Jvb2wgRkVGbG9vZDo6c2V0Q29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChtX2Zsb29kQ29sb3IgPT0gY29sb3IpCisg
ICAgaWYgKG1fY29sb3IgPT0gY29sb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Zs
b29kQ29sb3IgPSBjb2xvcjsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkK
K2Jvb2wgRkVGbG9vZDo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChtX2Zs
b29kT3BhY2l0eSA9PSBmbG9vZE9wYWNpdHkpCisgICAgaWYgKG1fb3BhY2l0eSA9PSBvcGFjaXR5
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9mbG9vZE9wYWNpdHkgPSBmbG9vZE9wYWNp
dHk7CisgICAgbV9vcGFjaXR5ID0gb3BhY2l0eTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFRmxvb2Q6OmRy
YXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJl
dHVybjsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7Cit9
CisKK0ZpbHRlclJlc3VsdCogRkVGbG9vZDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZp
bHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKikgY29uc3QKK3sKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgYXV0byBjb2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5m
aWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSksIGNvbG9yKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgfSwgbnVsbHB0
cik7CiB9CiAKLVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1Rl
eHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIHRzIDw8IGluZGVudCA8PCAiW2Zl
Rmxvb2QiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGZsb29kQ29sb3IoKSkgPDwgIlwiICIKLSAgICAgICA8PCAi
Zmxvb2Qtb3BhY2l0eT1cIiIgPDwgZmxvb2RPcGFjaXR5KCkgPDwgIlwiXVxuIjsKKyAgICB0cyAg
PDwgaW5kZW50IDw8ICJbZmVGbG9vZCI7CisgICAgdHMgIDw8ICIgY29sb3I9XCIiIDw8IHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKCkpIDw8ICJcIiAiCisgICAgICAgIDw8
ICJvcGFjaXR5PVwiIiA8PCBvcGFjaXR5KCkgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0NjgyZmEwNjE3MzQ4ZS4uNzk4
NmQ0NjY4NGJmNThhYmNiY2U4NGNmYjY2YTIxMjI4MDhhZTc5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNDIgKzIzLDM1IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRkVGbG9vZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVGbG9vZD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIHN0
YXRpYyBSZWY8RkVGbG9vZD4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAK
LSAgICBjb25zdCBDb2xvciYgZmxvb2RDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RDb2xv
cjsgfQotICAgIGJvb2wgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYpOworICAgIGNvbnN0IENv
bG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBib29sIHNldENvbG9y
KGNvbnN0IENvbG9yJik7CiAKLSAgICBmbG9hdCBmbG9vZE9wYWNpdHkoKSBjb25zdCB7IHJldHVy
biBtX2Zsb29kT3BhY2l0eTsgfQotICAgIGJvb2wgc2V0Rmxvb2RPcGFjaXR5KGZsb2F0KTsKLQot
I2lmICFVU0UoQ0cpCi0gICAgLy8gZmVGbG9vZCBkb2VzIG5vdCBwZXJmb3JtIGNvbG9yIGludGVy
cG9sYXRpb24gb2YgYW55IGtpbmQsIHNvIHRoZSByZXN1bHQgaXMgYWx3YXlzIGluIHRoZSBjdXJy
ZW50Ci0gICAgLy8gY29sb3Igc3BhY2UgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgY29sb3It
aW50ZXJwb2xhdGlvbi1maWx0ZXJzLgotICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KLSAgICB2
b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3Zl
cnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOyB9Ci0jZW5kaWYKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgYm9vbCBzZXRPcGFjaXR5KGZsb2F0KTsKIAogcHJpdmF0
ZToKLSAgICBGRUZsb29kKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIEZFRmxv
b2QoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9vZCI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBDb2xvciBt
X2Zsb29kQ29sb3I7Ci0gICAgZmxvYXQgbV9mbG9vZE9wYWNpdHk7CisgICAgQ29sb3IgbV9jb2xv
cjsKKyAgICBmbG9hdCBtX29wYWNpdHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2YzNmViYjZiYmI4
YWIzNjM5NDM2NS4uYzcwNTk0MDk3NGViYTljNjA3NWM1OWQyMGNlZmM1MDI5NDc0Njc4MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjYsNDUwICsyNiwzNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyLmgiCiAKLSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIFVTRShB
Q0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2Vy
bmVsRmFjdG9yKCkKLXsKLSAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsK
LX0KLQotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlv
biwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKK1Jl
ZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5v
cmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRldGFpbHMu
Ci0gICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBpZiAo
IShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMiAtIDE7
Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAgICAgICAgICAg
IGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAg
ICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewot
ICAgICAgICAgICAgZGVsdGFSaWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1
c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNz
aWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5CbHVyKQot
ICAgICwgbV9zdGRYKHgpCitGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorICAgIDogbV9zdGRYKHgpCiAgICAgLCBt
X3N0ZFkoeSkKICAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCiB7CiB9CiAKLVJlZjxGRUdhdXNz
aWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFR2F1c3NpYW5CbHVyKGZpbHRlciwgeCwgeSwgZWRnZU1vZGUpKTsKLX0KLQotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4KQotewotICAgIG1fc3RkWCA9
IHg7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkK
LXsKLSAgICBtX3N0ZFkgPSB5OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9k
ZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOwot
fQotCi0vLyBUaGlzIGZ1bmN0aW9uIG9ubHkgb3BlcmF0ZXMgb24gQWxwaGEgY2hhbm5lbC4KLWlu
bGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1Bp
eGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LAotICAgIHVuc2lnbmVk
IGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVM
aW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhL
ZXJuZWxTaXplKQotewotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5
LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0g
ICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwgemVyby1pbmRleCBiYXNlZC4KLSAgICBj
b25zdCBpbnQgY2hhbm5lbCA9IDM7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhl
aWdodDsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAg
IGludCBzdW0gPSAwOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgY29uc3QgdWludDhf
dCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKLSAgICAgICAgICAgIHN1bSArPSBzcmNQdHJb
Y2hhbm5lbF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZSArIGNoYW5uZWw7Ci0gICAgICAg
ICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotICAgICAg
ICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bSAvIGR4KTsKLQotICAgICAg
ICAgICAgLy8gU2hpZnQga2VybmVsLgotICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4
TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBz
cmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gLT0gKnNyY1B0cjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgp
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNl
dCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3Jj
UHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1bSArPSAqc3Jj
UHRyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBi
b3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1w
ZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50
IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGlu
dCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQot
ewotICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0
V2lkdGgpOwotICAgIGlmIChhbHBoYUltYWdlKQotICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhh
T25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBz
dHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxT
aXplKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEo
KTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICAv
LyBDb25jZXJuaW5nIHRoZSBhcnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSAr
IE1hcmdpbiArIEJvcmRlci4gVGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQotICAgIC8vIFAg
PSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzLgotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZm
ZWN0SGVpZ2h0OyArK3kpIHsKLSAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKLSAg
ICAgICAgaW50IHN1bVIgPSAwLCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAwOwotCi0gICAg
ICAgIGlmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FKSB7Ci0gICAgICAgICAgICAvLyBGaWxs
IHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNp
emU7ICsraSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICog
c3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEg
KyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAg
ICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRyOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
ZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9m
ZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0
ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRy
KysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAg
ICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAg
ICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA+PSBk
eExlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVs
Qnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bVIgLT0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0
clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAg
ICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAq
IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3Jj
RGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clsw
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNy
Y1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIGhlcmUu
Ci0gICAgICAgICAgICAvLyBHZXQgZWRnZSB2YWx1ZXMgZm9yIGVkZ2VNb2RlICdkdXBsaWNhdGUn
LgotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlTGVmdCA9IHNyY0RhdGEgKyBs
aW5lOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlUmlnaHQgID0gc3JjRGF0
YSArIChsaW5lICsgKGVmZmVjdFdpZHRoIC0gMSkgKiBzdHJpZGUpOwotCi0gICAgICAgICAgICAv
LyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gZHhMZWZ0ICogLTE7
IGkgPCBkeFJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHJpZ2h0IGZv
ciBuZWdhdGl2ZSB2YWx1ZXMgb2YgJ2knPwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVMZWZ0WzBdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZUxlZnRbMV07Ci0gICAgICAgICAgICAgICAgICAg
IHN1bUIgKz0gZWRnZVZhbHVlTGVmdFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBl
ZGdlVmFsdWVMZWZ0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+PSBlZmZlY3RX
aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOwot
ICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAg
ICBzdW1HICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLQot
ICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBk
eCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Vt
RyAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90
PihzdW1CIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihzdW1BIC8gZHgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgotICAg
ICAgICAgICAgICAgIGlmICh4IDwgZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIg
LT0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBlZGdlVmFs
dWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IGVkZ2VWYWx1ZUxlZnRbMl07
Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0
ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcg
LT0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKLSAg
ICAgICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0ID49IGVmZmVjdFdpZHRoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1
bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRn
ZVZhbHVlUmlnaHRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICog
c3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNE
YXRhICsgcmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBd
OwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQiArPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3Jj
UHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotaW5saW5lIHZvaWQgYWNjZWxlcmF0ZUJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1
ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBp
bnQgZWZmZWN0SGVpZ2h0KQotewotICAgIGlmICghaW9CdWZmZXIuZGF0YSgpIHx8ICF0ZW1wQnVm
ZmVyLmRhdGEoKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChlZmZlY3RXaWR0aCA8PSAwIHx8IGVmZmVjdEhlaWdodCA8
PSAwIHx8IHN0cmlkZSA8PSAwKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgbXVzdCBhbHdheXMgdXNlIGFuIG9kZCBy
YWRpdXMuCi0gICAgaWYgKGtlcm5lbFNpemUgJSAyICE9IDEpCi0gICAgICAgIGtlcm5lbFNpemUg
Kz0gMTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZWZmZWN0SW5CdWZmZXI7Ci0gICAgZWZmZWN0SW5C
dWZmZXIuZGF0YSA9IHN0YXRpY19jYXN0PHZvaWQqPihpb0J1ZmZlci5kYXRhKCkpOwotICAgIGVm
ZmVjdEluQnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZmZWN0SW5CdWZmZXIuaGVp
Z2h0ID0gZWZmZWN0SGVpZ2h0OwotICAgIGVmZmVjdEluQnVmZmVyLnJvd0J5dGVzID0gc3RyaWRl
OwotCi0gICAgdkltYWdlX0J1ZmZlciBlZmZlY3RPdXRCdWZmZXI7Ci0gICAgZWZmZWN0T3V0QnVm
ZmVyLmRhdGEgPSB0ZW1wQnVmZmVyLmRhdGEoKTsKLSAgICBlZmZlY3RPdXRCdWZmZXIud2lkdGgg
PSBlZmZlY3RXaWR0aDsKLSAgICBlZmZlY3RPdXRCdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0
OwotICAgIGVmZmVjdE91dEJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIC8vIERldGVy
bWluZSB0aGUgc2l6ZSBvZiBhIHRlbXBvcmFyeSBidWZmZXIgYnkgY2FsbGluZyB0aGUgZnVuY3Rp
b24gZmlyc3Qgd2l0aCBhIHNwZWNpYWwgZmxhZy4gdkltYWdlIHdpbGwgcmV0dXJuCi0gICAgLy8g
dGhlIHNpemUgbmVlZGVkLCBvciBhbiBlcnJvciAod2hpY2ggYXJlIGFsbCBuZWdhdGl2ZSkuCi0g
ICAgc2l6ZV90IHRtcEJ1ZmZlclNpemUgPSB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZm
ZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIDAsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5l
bFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kIHwga3ZJbWFnZUdldFRlbXBCdWZmZXJTaXplKTsK
LSAgICBpZiAodG1wQnVmZmVyU2l6ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2b2lk
KiB0bXBCdWZmZXIgPSBmYXN0TWFsbG9jKHRtcEJ1ZmZlclNpemUpOwotICAgIHZJbWFnZUJveENv
bnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgdG1wQnVm
ZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7
Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdE91dEJ1ZmZlciwgJmVmZmVj
dEluQnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2
SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0
SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwg
a2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIFdURjo6ZmFzdEZyZWUodG1w
QnVmZmVyKTsKLQotICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBp
b0J1ZmZlci4KLSAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gdGVtcEJ1ZmZlci5sZW5n
dGgoKSk7Ci0gICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgdGVtcEJ1ZmZlci5kYXRhKCksIGlv
QnVmZmVyLmxlbmd0aCgpKTsKLX0KLSNlbmRpZgotCi1pbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1
ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3Ry
aWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUg
ZWRnZU1vZGUpCi17Ci0gICAgaW50IGR4TGVmdCA9IDA7Ci0gICAgaW50IGR4UmlnaHQgPSAwOwot
ICAgIGludCBkeUxlZnQgPSAwOwotICAgIGludCBkeVJpZ2h0ID0gMDsKLSAgICAKLSAgICBVaW50
OENsYW1wZWRBcnJheSogZnJvbUJ1ZmZlciA9ICZpb0J1ZmZlcjsKLSAgICBVaW50OENsYW1wZWRB
cnJheSogdG9CdWZmZXIgPSAmdGVtcEJ1ZmZlcjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MzsgKytpKSB7Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWCkgewotICAgICAgICAgICAga2VybmVs
UG9zaXRpb24oaSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCk7Ci0jaWYgSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAg
ICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgs
IGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXpl
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpm
cm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0
cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgdHJ1ZSwgZWRnZU1v
ZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwg
a2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgo
KSwgcGFpbnRTaXplLmhlaWdodCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgot
ICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWSkgewotICAgICAgICAgICAga2VybmVsUG9zaXRpb24o
aSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCk7Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAgICAgICAgICAg
Ym94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwg
ZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVy
LCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFp
bnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vs
c2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6
ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50
U2l6ZS53aWR0aCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgotICAgICAgICAg
ICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAg
ICBpZiAoJmlvQnVmZmVyICE9IGZyb21CdWZmZXIpIHsKLSAgICAgICAgQVNTRVJUKGlvQnVmZmVy
Lmxlbmd0aCgpID09IGZyb21CdWZmZXItPmxlbmd0aCgpKTsKLSAgICAgICAgbWVtY3B5KGlvQnVm
ZmVyLmRhdGEoKSwgZnJvbUJ1ZmZlci0+ZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci0gICAg
fQotfQotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMo
VWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxB
cnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXpl
JiBwYWludFNpemUpCi17Ci0gICAgaW50IHN0cmlkZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsK
LQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChrZXJuZWxTaXplWCA9PSBrZXJuZWxTaXpl
WSAmJiAobV9lZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8IG1fZWRnZU1vZGUgPT0gRURHRU1P
REVfRFVQTElDQVRFKSkgewotICAgICAgICBhY2NlbGVyYXRlQm94Qmx1cihpb0J1ZmZlciwgdG1w
UGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0
YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5l
bFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlKCksIG1fZWRnZU1vZGUpOwot
fQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBw
bHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQotewotICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFt
ZXRlcnMtPndpZHRoLCBwYXJhbWV0ZXJzLT5oZWlnaHQpOwotICAgIHBhcmFtZXRlcnMtPmZpbHRl
ci0+cGxhdGZvcm1BcHBseUdlbmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFt
ZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJz
LT5rZXJuZWxTaXplWSwgcGFpbnRTaXplKTsKLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1w
ZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtl
cm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpCitzdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNz
aWFuS2VybmVsRmFjdG9yKCkKIHsKLSNpZiAhVVNFKEFDQ0VMRVJBVEUpCi0gICAgaW50IHNjYW5s
aW5lID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwotICAgIGludCBleHRyYUhlaWdodCA9IDMgKiBr
ZXJuZWxTaXplWSAqIDAuNWY7Ci0gICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAocGFpbnRT
aXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gKHNfbWluaW1hbFJlY3REaW1lbnNp
b24gKyBleHRyYUhlaWdodCAqIHBhaW50U2l6ZS53aWR0aCgpKTsKLQotICAgIGlmIChvcHRpbWFs
VGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFs
VGhyZWFkTnVtYmVyKTsKLQotICAgICAgICBpbnQgam9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJP
ZkpvYnMoKTsKLSAgICAgICAgaWYgKGpvYnMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0
aGUgam9iIGludG8gImJsb2NrSGVpZ2h0Ii1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2Jz
IHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKLSAgICAgICAgICAgIC8vIGJs
b2NrSGVpZ2h0ICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBi
eSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGNvbnN0IGludCBi
bG9ja0hlaWdodCA9IHBhaW50U2l6ZS5oZWlnaHQoKSAvIGpvYnM7Ci0gICAgICAgICAgICBjb25z
dCBpbnQgam9ic1dpdGhFeHRyYSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAlIGpvYnM7Ci0KLSAgICAg
ICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAwOyBq
b2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0
ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICBpbnQgc3RhcnRZID0g
IWpvYiA/IDAgOiBjdXJyZW50WSAtIGV4dHJhSGVpZ2h0OwotICAgICAgICAgICAgICAgIGN1cnJl
bnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdo
dDsKLSAgICAgICAgICAgICAgICBpbnQgZW5kWSA9IGpvYiA9PSBqb2JzIC0gMSA/IGN1cnJlbnRZ
IDogY3VycmVudFkgKyBleHRyYUhlaWdodDsKLQotICAgICAgICAgICAgICAgIGludCBibG9ja1Np
emUgPSAoZW5kWSAtIHN0YXJ0WSkgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBpZiAoIWpv
YikgewotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gJmlvQnVmZmVy
OwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9ICZ0bXBQaXhlbEFy
cmF5OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFt
cy5pb1BpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChi
bG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9IFVp
bnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1lbWNweShwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCksIGlvQnVmZmVy
LmRhdGEoKSArIHN0YXJ0WSAqIHNjYW5saW5lLCBibG9ja1NpemUpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHBhcmFtcy53aWR0aCA9IHBhaW50U2l6ZS53aWR0aCgpOwot
ICAgICAgICAgICAgICAgIHBhcmFtcy5oZWlnaHQgPSBlbmRZIC0gc3RhcnRZOwotICAgICAgICAg
ICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWCA9IGtlcm5lbFNpemVYOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5rZXJuZWxTaXplWSA9IGtlcm5lbFNpemVZOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotCi0gICAgICAgICAgICAvLyBDb3B5IHRv
Z2V0aGVyIHRoZSBwYXJ0cyBvZiB0aGUgaW1hZ2UuCi0gICAgICAgICAgICBjdXJyZW50WSA9IDA7
Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAxOyBqb2IgPCBqb2JzOyBqb2IrKykgewotICAg
ICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpv
YnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgaW50IHNvdXJjZU9mZnNldDsKLSAg
ICAgICAgICAgICAgICBpbnQgZGVzdGluYXRpb25PZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50
IHNpemU7Ci0gICAgICAgICAgICAgICAgaW50IGFkanVzdGVkQmxvY2tIZWlnaHQgPSBqb2IgPCBq
b2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0KLSAgICAgICAg
ICAgICAgICBjdXJyZW50WSArPSBhZGp1c3RlZEJsb2NrSGVpZ2h0OwotICAgICAgICAgICAgICAg
IHNvdXJjZU9mZnNldCA9IGV4dHJhSGVpZ2h0ICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25PZmZzZXQgPSBjdXJyZW50WSAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAg
IHNpemUgPSBhZGp1c3RlZEJsb2NrSGVpZ2h0ICogc2NhbmxpbmU7Ci0KLSAgICAgICAgICAgICAg
ICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpICsgZGVzdGluYXRpb25PZmZzZXQsIHBhcmFtcy5pb1Bp
eGVsQXJyYXktPmRhdGEoKSArIHNvdXJjZU9mZnNldCwgc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2lu
Z2xlIHRocmVhZGVkIG1vZGUuCi0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBUaGUgc2VsZWN0aW9u
IGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZv
cm1zLgotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBr
ZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIDMgLyA0LmYg
KiBzcXJ0ZigyICogcGlGbG9hdCk7CiB9CiAKIHN0YXRpYyBpbnQgY2xhbXBlZFRvS2VybmVsU2l6
ZShmbG9hdCB2YWx1ZSkKIHsKICAgICAvLyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAwLiBB
IGJpZ2dlciByYWRpdXMgd29uJ3QgbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0
IGltYWdlIGJ1dAogICAgIC8vIGluZmxhdGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRvbyBt
dWNoLiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBGaXJlZm94JyBiZWhhdmlvci4KKyAgICBzdGF0
aWMgY29uc3QgaW50IGdNYXhLZXJuZWxTaXplID0gNTAwOwogICAgIHVuc2lnbmVkIHNpemUgPSBz
dGQ6Om1heDx1bnNpZ25lZD4oMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1ZSAq
IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkgKyAwLjVmKSkpOwogICAgIHJldHVybiBjbGFtcFRvPGlu
dD4oc3RkOjptaW4oc2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdNYXhLZXJuZWxTaXplKSkp
OwogfQotICAgIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCisKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlv
bikKIHsKICAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkgPj0gMCAmJiBzdGREZXZpYXRp
b24uaGVpZ2h0KCkgPj0gMCk7CiAgICAgSW50U2l6ZSBrZXJuZWxTaXplOwpAQCAtNDgzLDEyICs3
MCwxMiBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNp
emUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4ga2VybmVsU2l6ZTsKIH0KIAot
SW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXIm
IGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7Ci0g
ICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0
ZXJSZXNvbHV0aW9uKHN0ZERldmlhdGlvbikpOworICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxl
ZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uIC8qZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bihzdGREZXZpYXRpb24pKi8pOwogfQogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxh
dGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQog
ewogICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGRE
ZXZpYXRpb24pOwogCkBAIC00OTYsNTYgKzgzLDIwIEBAIEludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4g
eyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAy
IH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkKK0Zsb2F0UmVjdCBGRUdhdXNzaWFuQmx1cjo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
IHsKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigp
LCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0
ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwogICAgIC8vIEVkZ2UgbW9kZXMg
b3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBhaW50IHJlY3Qu
Ci0gICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICBzZXRBYnNv
bHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkK
KyAgICAgICAgcmV0dXJuIGRyYXdpbmdSZWN0OwogCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBr
ZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94
IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtl
cm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZ
KDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5k
cygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJl
Y3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29s
dXRlUGFpbnRSZWN0KSk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAg
IEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNB
bHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFtX3N0ZFggJiYg
IW1fc3RkWSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2Fs
Y3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBrZXJu
ZWxTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotCi0gICAgSW50U2l6ZSBwYWlu
dFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUo
ZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7
Ci0gICAgaWYgKCF0bXBJbWFnZURhdGEpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBXZSB0YWtl
IHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNl
IHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgz
ICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVko
MyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHBsYXRmb3JtQXBwbHkoZGVz
dGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtl
cm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERy
YXdpbmdSZWN0KGlucHV0cywgZHJhd2luZ1JlY3QpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3Np
YW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKQEAgLTU1NCwxNCArMTA1LDIxIEBAIEludE91dHNldHMg
RkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdAogICAgIHJldHVybiB7IG91dHNldFNpemUu
aGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0
U2l6ZS53aWR0aCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVz
ZW50YXRpb24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFR2F1c3NpYW5CbHVyOjphcHBseShGaWx0
ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
KSBjb25zdAoreworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0g
c3RhY2sudGFrZUxhc3QoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRz
KCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4g
YXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0m
IEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUdh
dXNzaWFuQmx1ciI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3Rk
WCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50
U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmgKaW5kZXggNWZiOTdmZmIwNzBjMmRhZWI2ZWIyODNiZWFhYTE3NjQ3Y2JiMmQz
ZS4uOTRhMGY1M2QxOTk5ZWE4YWM2NmE3NzQ1YzUxYTkzM2M0ZDE4ZWZjMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMiw1OSArMjMsNDAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRkVDb252b2x2
ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5CbHVyIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4g
Y3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMg
UmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwog
CiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQotICAg
IHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCk7CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25Y
KGZsb2F0IHgpIHsgbV9zdGRYID0geDsgfQogCiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RkWTsgfQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCk7
CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpIHsgbV9zdGRZID0geTsgfQogCiAg
ICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlTW9kZTsgfQot
ICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKKyAgICB2b2lkIHNldEVkZ2VNb2Rl
KEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkgeyBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7IH0KIAotICAg
IHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxvYXRT
aXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRL
ZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNh
bGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIElu
dFNpemUgY2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7
CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRz
ZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAgICBG
RUdhdXNzaWFuQmx1cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CisgICAg
RkVHYXVzc2lhbkJsdXIoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwogCiAgICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7
IH0KIAotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAq
IDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQot
ICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFR2F1c3NpYW5C
bHVyKiBmaWx0ZXI7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFy
cmF5OwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0g
ICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQg
a2VybmVsU2l6ZVg7Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOwotICAgIH07Ci0KLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5n
UmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
RmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9y
bUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50
U2l6ZSYgcGFpbnRTaXplKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2ln
bmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXpl
KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxv
YXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGRmMTc2Zjhl
MDcwYTQxOGMyMDg1MTgwOTBlZTdhNmNhMTEzZTU2ZjUuLjkwZThiOWZhNDIxMGRkNzYyYTRlNGQ5
MWRlMjUwMzQ4ODBmZDJmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ3MCArMjgsNzIgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRl
ICJDb2xvckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIs
IExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2Us
IFR5cGUgdHlwZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xp
Z2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGln
aHRTb3VyY2UpKQotICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0
aW5nOjpGRUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IG1fY29sb3IoY29sb3IpCiAg
ICAgLCBtX3N1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUpCiAgICAgLCBtX2RpZmZ1c2VDb25zdGFu
dChkaWZmdXNlQ29uc3RhbnQpCiAgICAgLCBtX3NwZWN1bGFyQ29uc3RhbnQoc3BlY3VsYXJDb25z
dGFudCkKICAgICAsIG1fc3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQogICAgICwg
bV9rZXJuZWxVbml0TGVuZ3RoWChrZXJuZWxVbml0TGVuZ3RoWCkKICAgICAsIG1fa2VybmVsVW5p
dExlbmd0aFkoa2VybmVsVW5pdExlbmd0aFkpCisgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJj
ZSkpCiB7CiB9CiAKLWJvb2wgRkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZh
Y2VTY2FsZSkKLXsKLSAgICBpZiAobV9zdXJmYWNlU2NhbGUgPT0gc3VyZmFjZVNjYWxlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUxpZ2h0aW5nOjpzZXRMaWdodGluZ0NvbG9y
KGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKG1fbGlnaHRpbmdDb2xvciA9PSBsaWdodGlu
Z0NvbG9yKQorICAgIGlmIChtX2NvbG9yID09IGNvbG9yKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBtX2xpZ2h0aW5nQ29sb3IgPSBsaWdodGluZ0NvbG9yOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhYKQotewotICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGhYID09IGtlcm5lbFVu
aXRMZW5ndGhYKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYID0ga2VybmVsVW5pdExlbmd0aFg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVM
aWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCi17
Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFkgPT0ga2VybmVsVW5pdExlbmd0aFkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0
TGVuZ3RoWTsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNpemUgPSA0Owotc3RhdGljIGNvbnN0ZXhwciBpbnQg
Y0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7Ci1zdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgY09wYXF1
ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRik7Ci0KLS8vIFRoZXNlIGZhY3RvcnMg
YW5kIHRoZSBub3JtYWwgY29lZmZpY2llbnRzIGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIgaHR0
cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50Lgotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKLXN0
YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7Ci1zdGF0aWMgY29u
c3RleHByIGZsb2F0IGNGYWN0b3IxZGl2NCA9IC0xIC8gNC5mOwotc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBjRmFjdG9yMmRpdjMgPSAtMiAvIDMuZjsKLQotaW5saW5lIEludFNpemUgRkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
IG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJu
IHsKLSAgICAgICAgLTIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21SaWdo
dCwKLSAgICAgICAgLTIgKiBjZW50ZXIgLSByaWdodCArIDIgKiBib3R0b20gKyBib3R0b21SaWdo
dAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
LSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b20gPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4g
ewotICAgICAgICAtMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9tUmln
aHQsCi0gICAgICAgIC1sZWZ0IC0gMiAqIGNlbnRlciAtIHJpZ2h0ICsgYm90dG9tTGVmdCArIDIg
KiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGln
aHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsK
LSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRv
bUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0
dXJuIHsKLSAgICAgICAgLTIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0
b20sCi0gICAgICAgIC1sZWZ0IC0gMiAqIGNlbnRlciArIGJvdHRvbUxlZnQgKyAyICogYm90dG9t
Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjps
ZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGNlbnRlciA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3BS
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b21SaWdo
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcCArIHRvcFJp
Z2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAg
ICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAg
fTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlv
ck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNvbnN0Ci17Ci0g
ICAgaW50IHJpZ2h0QWxwaGFPZmZzZXQgPSBvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldDsKLSAgICAKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShyaWdodEFscGhhT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplKSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSk7
Ci0KLSAgICBpbnQgbGVmdCA9IGFscGhhV2luZG93LmxlZnQoKTsKLSAgICBpbnQgdG9wTGVmdCA9
IGFscGhhV2luZG93LnRvcExlZnQoKTsKLSAgICBpbnQgdG9wID0gYWxwaGFXaW5kb3cudG9wKCk7
Ci0KLSAgICBpbnQgYm90dG9tTGVmdCA9IGFscGhhV2luZG93LmJvdHRvbUxlZnQoKTsKLSAgICBp
bnQgYm90dG9tID0gYWxwaGFXaW5kb3cuYm90dG9tKCk7Ci0KLSAgICAvLyBUaGUgYWxwaGFXaW5k
b3cgaGFzIGJlZW4gc2hpZnRlZCwgYW5kIGhlcmUgd2UgZmlsbCBpbiB0aGUgcmlnaHQgY29sdW1u
LgotICAgIGFscGhhV2luZG93LmFscGhhWzBdWzJdID0gdG9wUmlnaHQ7Ci0gICAgYWxwaGFXaW5k
b3cuYWxwaGFbMV1bMl0gPSByaWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsyXVsyXSA9IGJv
dHRvbVJpZ2h0OwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgdGhlIGFscGhhV2luZG93IGlzIHdv
cmtpbmcgd2l0aCBzb21lIHNwb3QtY2hlY2tzLgotICAgIEFTU0VSVChhbHBoYVdpbmRvdy50b3BM
ZWZ0KCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgLSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wTGVmdAotICAgIEFT
U0VSVChhbHBoYVdpbmRvdy50b3AoKSA9PSBwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcAotCi0gICAg
cmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3BSaWdodCAtIDIgKiBsZWZ0ICsgMiAqIHJp
Z2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtdG9wTGVmdCAtIDIgKiB0
b3AgLSB0b3BSaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAg
ICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0
Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3AgLSAy
ICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAotICAgICAgICAtdG9w
TGVmdCAtIDIgKiB0b3AgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50
ZXIgKyAyICogcmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQgKyAyICogY2VudGVy
ICsgcmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGlu
Z0RhdGE6OmJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorYm9vbCBGRUxpZ2h0aW5n
OjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQogewotICAgIGludCBsZWZ0ID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOwotICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsK
LSAgICAgICAgLXRvcExlZnQgKyB0b3BSaWdodCAtIDIgKiBsZWZ0ICsgMiAqIHJpZ2h0LAotICAg
ICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgLSB0b3BSaWdodCArIGxlZnQgKyAyICogY2VudGVyICsg
cmlnaHQKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc3VyZmFjZVNjYWxlLCBz
dXJmYWNlU2NhbGUpICE9IG1fc3VyZmFjZVNjYWxlOwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0
Citib29sIEZFTGlnaHRpbmc6OnNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQpCiB7Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGlu
dCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJl
dHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICogY2VudGVyLAot
ICAgICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgKyBsZWZ0ICsgMiAqIGNlbnRlcgotICAgIH07Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaWZmdXNlQ29uc3RhbnQsIGRpZmZ1c2VDb25zdGFu
dCkgIT0gbV9kaWZmdXNlQ29uc3RhbnQ7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWwo
aW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwg
ZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvcikKK2Jvb2wgRkVMaWdodGluZzo6
c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQogewotICAgIHNldFBp
eGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZh
Y3RvclksIG5vcm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zcGVjdWxhckNvbnN0
YW50LCBzcGVjdWxhckNvbnN0YW50KSAhPSBzcGVjdWxhckNvbnN0YW50OwogfQogCi12b2lkIEZF
TGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRh
JiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwy
RFZlY3RvciwgZmxvYXQgYWxwaGEpCitib29sIEZFTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25l
bnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkKIHsKLSAgICBmbG9hdCB6ID0gYWxwaGEgKiBkYXRh
LnN1cmZhY2VTY2FsZTsKLSAgICBMaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgbGln
aHRpbmdEYXRhID0gbV9saWdodFNvdXJjZS0+Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKHBhaW50
aW5nRGF0YSwgeCwgeSwgeik7Ci0KLSAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOwotICAgIGlmIChu
b3JtYWwyRFZlY3Rvci5pc1plcm8oKSkgewotICAgICAgICAvLyBOb3JtYWwgdmVjdG9yIGlzICgw
LCAwLCAxKS4gVGhpcyBpcyBhIHF1aXRlIGZyZXF1ZW50IGNhc2UuCi0gICAgICAgIGlmIChtX2xp
Z2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAgICAgICAgICBs
aWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0
b3IueigpIC8gbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gewotICAgICAgICAgICAg
ICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci54KCksCi0gICAgICAgICAgICAgICAgbGlnaHRp
bmdEYXRhLmxpZ2h0VmVjdG9yLnkoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3IueigpICsgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCi0gICAgICAgICAg
ICB9OwotICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0
b3IubGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCi0g
ICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3
YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aDsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93Ziho
YWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVu
dCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFs
VmVjdG9yID0gewotICAgICAgICAgICAgZmFjdG9yWCAqIG5vcm1hbDJEVmVjdG9yLndpZHRoKCkg
KiBkYXRhLnN1cmZhY2VTY2FsZSwKLSAgICAgICAgICAgIGZhY3RvclkgKiBub3JtYWwyRFZlY3Rv
ci5oZWlnaHQoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAgICAgICAgICAgMS4wZgotICAgICAg
ICB9OwotICAgICAgICBmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSBub3JtYWxWZWN0b3IubGVu
Z3RoKCk7Ci0KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1
c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFu
dCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZl
Y3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAg
ICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAgICAgICAgICAgICAgICBs
aWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndh
eVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0g
MSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICog
KG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhh
bGZ3YXlWZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBo
YWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3Ro
KSwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsaWdo
dFN0cmVuZ3RoID4gMSkKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDE7Ci0gICAgaWYgKGxpZ2h0
U3RyZW5ndGggPCAwKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMDsKLQotICAgIHVpbnQ4X3Qg
cGl4ZWxWYWx1ZVszXSA9IHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJl
bmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci54KCkgKiAyNTUuMGYpLAotICAgICAgICBz
dGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVj
dG9yLnkoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3Ry
ZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueigpICogMjU1LjBmKQotICAgIH07Ci0g
ICAgCi0gICAgZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFsdWUsIDMsIG9mZnNldCk7Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zcGVjdWxhckV4cG9uZW50LCBzcGVjdWxhckV4cG9u
ZW50KSAhPSBtX3NwZWN1bGFyRXhwb25lbnQ7CiB9CiAKLS8vIFRoaXMgYXBwZWFycyB0byByZWFk
IGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzYW1lIHBpeGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVh
ZHMgdGhlIGFscGhhIGNoYW5uZWwsIGFuZCB3cml0ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4K
LXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+
IDAgc2luY2Ugd2UgcmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCi0gICAg
QVNTRVJUKHN0YXJ0WSk7Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgZm9yIChp
bnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgcm93U3RhcnRPZmZz
ZXQgPSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHBy
ZXZpb3VzUm93U3RhcnQgPSByb3dTdGFydE9mZnNldCAtIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgICAgIGludCBuZXh0Um93U3RhcnQgPSByb3dTdGFydE9mZnNldCArIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0KLSAgICAgICAgLy8gYWxwaGFXaW5kb3cg
aXMgYSBsb2NhbCBjYWNoZSBvZiBhbHBoYSB2YWx1ZXMuCi0gICAgICAgIC8vIEZpbGwgdGhlIHR3
byByaWdodCBjb2x1bW5zIHB1dHRpbmcgdGhlIGxlZnQgZWRnZSB2YWx1ZSBpbiB0aGUgY2VudGVy
IGNvbHVtbi4KLSAgICAgICAgLy8gRm9yIGVhY2ggcGl4ZWwsIHdlIHNoaWZ0IGVhY2ggcm93IGxl
ZnQgdGhlbiBmaWxsIHRoZSByaWdodCBjb2x1bW4uCi0gICAgICAgIEFscGhhV2luZG93IGFscGhh
V2luZG93OwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3AoZGF0YS5waXhlbHMtPml0ZW0ocHJl
dmlvdXNSb3dTdGFydCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5k
b3cuc2V0VG9wUmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFydCArIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0
Q2VudGVyKGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRSaWdodChkYXRhLnBpeGVscy0+aXRlbShy
b3dTdGFydE9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAg
ICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tKGRhdGEucGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFy
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9t
UmlnaHQoZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3RhcnRPZmZzZXQg
KyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNy
ZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAgICAgYWxw
aGFXaW5kb3cuc2hpZnQoKTsKLSAgICAgICAgICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBk
YXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGNGYWN0b3IxZGl2NCwgY0ZhY3RvcjFkaXY0LCBkYXRh
LmludGVyaW9yTm9ybWFsKG9mZnNldCwgYWxwaGFXaW5kb3cpLCBhbHBoYVdpbmRvdy5jZW50ZXIo
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCkKIHsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0
ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlFbmQpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdl
KG1fa2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhYKSAhPSBtX2tlcm5lbFVuaXRM
ZW5ndGhYOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0
IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQotewotICAgIHVuc2lnbmVkIHJvd3NUb1Byb2Nlc3MgPSBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lIC0gMTsKLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gcm93c1RvUHJv
Y2VzcyAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVu
c2lnbmVkPigoKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSAtIDEpICogcm93c1RvUHJvY2Vzcykg
LyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2Jz
Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVy
cz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlciwgb3B0aW1hbFRocmVh
ZE51bWJlcik7Ci0KLSAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0gICAgICAg
IGludCBqb2IgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChqb2Ig
PiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInlTdGVwIi1zaXplZCBq
b2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIg
c2luY2UKLSAgICAgICAgICAgIC8vIHlTdGVwICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4
dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAg
ICAgICAgIGNvbnN0IGludCB5U3RlcCA9IHJvd3NUb1Byb2Nlc3MgLyBqb2I7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQgam9ic1dpdGhFeHRyYSA9IHJvd3NUb1Byb2Nlc3MgJSBqb2I7Ci0KLSAgICAg
ICAgICAgIGludCB5U3RhcnQgPSAxOwotICAgICAgICAgICAgZm9yICgtLWpvYjsgam9iID49IDA7
IC0tam9iKSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJz
JiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAg
cGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmRhdGEgPSBkYXRh
OwotICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSBwYWludGluZ0RhdGE7Ci0g
ICAgICAgICAgICAgICAgcGFyYW1zLnlTdGFydCA9IHlTdGFydDsKLSAgICAgICAgICAgICAgICB5
U3RhcnQgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IHlTdGVwICsgMSA6IHlTdGVwOwotICAgICAg
ICAgICAgICAgIHBhcmFtcy55RW5kID0geVN0YXJ0OwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4KLSAgICB9Ci0K
LSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGRhdGEsIHBhaW50aW5nRGF0YSwgMSwgZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCitib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVu
aXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKQogewotICAgIC8vIFRoZSBzZWxlY3Rp
b24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0
Zm9ybXMuCi0jaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01Q
SUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBwbGF0Zm9ybUFwcGx5TmVvbihkYXRhLCBwYWludGlu
Z0RhdGEpOwotI2Vsc2UKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhkYXRhLCBwYWludGluZ0Rh
dGEpOwotI2VuZGlmCisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rZXJuZWxVbml0TGVuZ3Ro
WSwga2VybmVsVW5pdExlbmd0aFkpICE9IG1fa2VybmVsVW5pdExlbmd0aFk7CiB9CiAKLWJvb2wg
RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3
aWR0aCwgaW50IGhlaWdodCkKK0Zsb2F0UmVjdCBGRUxpZ2h0aW5nOjpkcmF3aW5nUmVjdChjb25z
dCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KSBjb25zdAogewotICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRh
OwotICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotCi0gICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBp
ZiB3aWR0aCBvciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEgcGl4ZWwuCi0gICAgLy8gVGhlIFczIHNw
ZWMgZG9lcyBub3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5z
LgotICAgIGlmICh3aWR0aCA8PSAyIHx8IGhlaWdodCA8PSAyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBkYXRhLnBpeGVscyA9ICZwaXhlbHM7Ci0gICAgZGF0YS5zdXJmYWNlU2NhbGUg
PSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKLSAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplID0gd2lkdGggKiBjUGl4ZWxTaXplOwotICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9u
ZSA9IHdpZHRoIC0gMTsKLSAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0g
MTsKLQotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbV9saWdodGluZ0NvbG9yLnRvQ29sb3JDb21w
b25lbnRzSW5Db2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgcGFpbnRpbmdE
YXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QociwgZywg
Yik7Ci0KLSAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCp0aGlzLCBwYWludGlu
Z0RhdGEpOwotCi0gICAgLy8gVG9wIGxlZnQuCi0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIDAsIGNGYWN0b3IyZGl2MywgY0Zh
Y3RvcjJkaXYzLCBkYXRhLnRvcExlZnROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBUb3Agcmln
aHQuCi0gICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhl
bFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lk
dGhEZWNyZWFzZWRCeU9uZSwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9w
UmlnaHROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBCb3R0b20gbGVmdC4KLSAgICBvZmZzZXQg
PSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90
dG9tTGVmdE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8vIEJvdHRvbSByaWdodC4KLSAgICBvZmZz
ZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6
ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERl
Y3JlYXNlZEJ5T25lLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNG
YWN0b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5vcm1hbChvZmZzZXQpKTsKLQotICAgIGlmICh3
aWR0aCA+PSAzKSB7Ci0gICAgICAgIC8vIFRvcCByb3cuCi0gICAgICAgIG9mZnNldCA9IGNQaXhl
bFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIDAsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYy
LCBkYXRhLnRvcFJvd05vcm1hbChvZmZzZXQpKTsKLQotICAgICAgICAvLyBCb3R0b20gcm93Lgot
ICAgICAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAx
OyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXpl
KQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRh
LmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAoaGVpZ2h0ID49IDMp
IHsKLSAgICAgICAgLy8gTGVmdCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdE
YXRhLCAwLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5sZWZ0Q29sdW1uTm9y
bWFsKG9mZnNldCkpOwotCi0gICAgICAgIC8vIFJpZ2h0IGNvbHVtbi4KLSAgICAgICAgb2Zmc2V0
ID0gMiAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAg
ICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwg
b2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCi0gICAgICAgICAgICBz
ZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5yaWdodENvbHVtbk5vcm1h
bChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAod2lkdGggPj0gMyAmJiBoZWlnaHQgPj0gMykg
ewotICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCi0gICAgICAgIHBsYXRmb3JtQXBwbHkoZGF0
YSwgcGFpbnRpbmdEYXRhKTsKLSAgICB9Ci0KLSAgICBpbnQgbGFzdFBpeGVsID0gZGF0YS53aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKLSAgICBpZiAobV9saWdodGluZ1R5cGUg
PT0gRGlmZnVzZUxpZ2h0aW5nKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVs
T2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBkYXRh
LnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAg
ICAgdWludDhfdCBhMSA9IGRhdGEucGl4ZWxzLT5pdGVtKGkpOwotICAgICAgICAgICAgdWludDhf
dCBhMiA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAxKTsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTMg
PSBkYXRhLnBpeGVscy0+aXRlbShpICsgMik7Ci0gICAgICAgICAgICAvLyBhbHBoYSBzZXQgdG8g
c2V0IHRvIG1heChhMSwgYTIsIGEzKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpICsg
MywgYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBnZW9t
ZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzKTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUxpZ2h0aW5nOjphcHBs
eShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VC
dWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CisgICAg
QVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgp
OwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5p
dExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMK
LSAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJv
d3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKLSAgICAvLyBvdXRwdXQgZm9yIHZhcmlv
dXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxl
LgotICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGlt
cGxlbWVudGF0aW9uCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQo
eyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEludFNpemUgYWJzb2x1
dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkcmF3TGlnaHRp
bmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNv
bHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0
LCB7IGluIH0sIG51bGxwdHIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5o
CmluZGV4IDdmYjU2MDlkYmI1N2I3NjIwMWYzMzAzMzcwNTJlNDFhYzI1MDNjZjkuLmI4MjRjNDM2
N2QwMzkxMTllZWMyM2U2ZmVlYzI5ODdiYmIyNmIzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsMjYgKzI4LDI3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNv
bG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAj
aW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENs
YW1wZWRBcnJheS5oPgotCi0vLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRp
bmcgYW5kIEZFU3BlY3VsYXJMaWdodGluZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVj
dCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbjsKLQogY2xhc3MgRkVMaWdodGluZyA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9CisgICAgYm9vbCBzZXRDb2xvcihjb25zdCBDb2xvciYpOwogCiAg
ICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0K
ICAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CiAKLSAgICBjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQotICAgIGJvb2wg
c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9CisgICAgYm9vbCBzZXREaWZm
dXNlQ29uc3RhbnQoZmxvYXQpOworCisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQorICAgIGJvb2wgc2V0U3BlY3VsYXJDb25z
dGFudChmbG9hdCk7CisKKyAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1
cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9CisgICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZs
b2F0KTsKIAogICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QgeyByZXR1cm4gbV9r
ZXJuZWxVbml0TGVuZ3RoWDsgfQogICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQp
OwpAQCAtNTQsMTE1ICs1NiwyNSBAQCBwdWJsaWM6CiAgICAgZmxvYXQga2VybmVsVW5pdExlbmd0
aFkoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOyB9CiAgICAgYm9vbCBzZXRL
ZXJuZWxVbml0TGVuZ3RoWShmbG9hdCk7CiAKLSAgICBjb25zdCBMaWdodFNvdXJjZSYgbGlnaHRT
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOyB9CisgICAgY29uc3Qg
TGlnaHRTb3VyY2UmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdldCgpOyB9CiAK
IHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24g
PSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0K
LSAgICBlbnVtIExpZ2h0aW5nVHlwZSB7Ci0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAg
ICAgU3BlY3VsYXJMaWdodGluZwotICAgIH07Ci0gICAgCi0gICAgc3RydWN0IEFscGhhV2luZG93
IHsKLSAgICAgICAgdWludDhfdCBhbHBoYVszXVszXSB7IH07Ci0gICAgICAgIAotICAgICAgICAv
LyBUaGUgaW1wbGVtZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRp
Y2VzIGVhc2llci4KLSAgICAgICAgdWludDhfdCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMF1bMF07IH0KLSAgICAgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAg
ICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMF07IH0KLSAgICAgICAgdWludDhfdCBib3R0
b21MZWZ0KCkgY29uc3QgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KLQotICAgICAg
ICB1aW50OF90IHRvcCgpIGNvbnN0ICAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsx
XTsgfQotICAgICAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVy
biBhbHBoYVsxXVsxXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAg
ICAgICB7IHJldHVybiBhbHBoYVsyXVsxXTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wKHVpbnQ4
X3QgdmFsdWUpICAgICAgICAgIHsgYWxwaGFbMF1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lk
IHNldENlbnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0K
LSAgICAgICAgdm9pZCBzZXRCb3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsx
XSA9IHZhbHVlOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3BSaWdodCh1aW50OF90IHZhbHVlKSAg
ICAgeyBhbHBoYVswXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0UmlnaHQodWludDhf
dCB2YWx1ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNl
dEJvdHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KLQot
ICAgICAgICBzdGF0aWMgdm9pZCBzaGlmdFJvdyh1aW50OF90IGFscGhhWzNdKQotICAgICAgICB7
Ci0gICAgICAgICAgICBhbHBoYVswXSA9IGFscGhhWzFdOwotICAgICAgICAgICAgYWxwaGFbMV0g
PSBhbHBoYVsyXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzaGlmdCgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKLSAgICAgICAgICAgIHNo
aWZ0Um93KGFscGhhWzFdKTsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKLSAgICAgICAgLy8gVGhp
cyBzdHJ1Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkgKFNNUCBzYWZlKSBkYXRhCi0gICAg
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7Ci0gICAgICAgIGZsb2F0IHN1cmZhY2VTY2Fs
ZTsKLSAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQg
d2lkdGhEZWNyZWFzZWRCeU9uZTsKLSAgICAgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOwot
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
LSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29u
c3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFs
cGhhV2luZG93JikgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHJpZ2h0Q29sdW1uTm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21MZWZ0
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21S
b3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRv
bVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1
Y3QgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVMaWdodGluZyog
ZmlsdGVyOwotICAgICAgICBMaWdodGluZ0RhdGEgZGF0YTsKLSAgICAgICAgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgICAgIGludCB5U3RhcnQ7Ci0gICAgICAg
IGludCB5RW5kOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
Y1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqKTsKLSAgICBzdGF0aWMgdm9p
ZCBwbGF0Zm9ybUFwcGx5TmVvbldvcmtlcihGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbiop
OwotCi0gICAgRkVMaWdodGluZyhGaWx0ZXImLCBMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNl
PiYmLCBUeXBlKTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVMaWdodGluZyI7IH0KLQotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xh
bXBlZEFycmF5JiwgaW50LCBpbnQpOwotCi0gICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBj
b25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50
IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZl
Y3Rvcik7Ci0gICAgdm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0
aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHks
IGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9h
dCBhbHBoYSk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQ
YWludChjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRh
JiwgaW50IHN0YXJ0WCwgaW50IHN0YXJ0WSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
Yyhjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7
Ci0KLSNpZiBDUFUoQVJNX05FT04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVS
KEdDQ19DT01QQVRJQkxFKQotICAgIHN0YXRpYyBpbnQgZ2V0UG93ZXJDb2VmZmljaWVudHMoZmxv
YXQgZXhwb25lbnQpOwotICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uKGNvbnN0IExp
Z2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLSNlbmRpZgot
Ci0gICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdUeXBlOwotICAgIFJlZjxMaWdodFNvdXJjZT4g
bV9saWdodFNvdXJjZTsKLQotICAgIENvbG9yIG1fbGlnaHRpbmdDb2xvcjsKKyAgICBGRUxpZ2h0
aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291
cmNlPiYmKTsKKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKKworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIENvbG9yIG1fY29sb3I7CiAgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7CiAgICAgZmxvYXQg
bV9kaWZmdXNlQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckNvbnN0YW50OwogICAgIGZs
b2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwog
ICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7CisgICAgUmVmPExpZ2h0U291cmNlPiBtX3Nv
dXJjZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMGEyMDAw
MWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uM2EwOGNkMGRjMDNjODE1MTU0MGU1
MmFmOTRiOGE0NzBiNDc3NjgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1MSArMjMsNDggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3Ry
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUZFTWVyZ2U6OkZFTWVyZ2UoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJF
ZmZlY3QoZmlsdGVyLCBUeXBlOjpNZXJnZSkKK1JlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUo
dW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVNZXJnZShudW1iZXJPZkVmZmVjdElucHV0cykpOwogfQogCi1SZWY8RkVNZXJnZT4gRkVN
ZXJnZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVNZXJnZTo6RkVNZXJnZSh1bnNpZ25lZCBu
dW1iZXJPZkVmZmVjdElucHV0cykKKyAgICA6IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMobnVtYmVy
T2ZFZmZlY3RJbnB1dHMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShmaWx0
ZXIpKTsKKyAgICBBU1NFUlQobV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiB9CiAKLXZvaWQgRkVN
ZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2NvbnN0IEF0b21TdHJpbmcmIEZFTWVyZ2U6
OmVmZmVjdE5hbWUoKQogewotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0
cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIkZFTWVyZ2UiLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKK30K
KworRmlsdGVyUmVzdWx0KiBGRU1lcmdlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmls
dGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAoreworICAgIEFTU0VS
VChzdGFjay5zaXplKCkgPT0gbV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiAKLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICgh
cmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8UmVmPEZpbHRlclJlc3Vs
dD4+IGlucHV0czsKKyAgICBmb3IgKGF1dG8gaW5wdXRzU2l6ZSA9IG1fbnVtYmVyT2ZFZmZlY3RJ
bnB1dHM7IGlucHV0c1NpemUtLTsgKQorICAgICAgICBpbnB1dHMuYXBwZW5kKHN0YWNrLnRha2VM
YXN0KCkpOwogCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAq
dGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1h
Z2VCdWZmZXJSZXN1bHQoKSkKLSAgICAgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOwotICAgIH0KKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIGlucHV0
cywgbnVsbHB0cik7CiB9CiAKLVRleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlTWVyZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVj
dElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7Ci0gICAgdHMgPDwgIiBtZXJnZU5vZGVz
PVwiIiA8PCBzaXplIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBp
bmRlbnRTY29wZSh0cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgaW5wdXRFZmZlY3QoaSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJl
c2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IG1fbnVtYmVyT2ZFZmZl
Y3RJbnB1dHMgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVj
Yjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThmMjYwNy4uZjNmNDVjMzY4YTNhYTMxZjM4NWQ2
MmMwODQyYzYzZTY3YjVlOTRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDE2ICsyOSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZF
TWVyZ2U+IGNyZWF0ZSh1bnNpZ25lZCBtX251bWJlck9mRWZmZWN0SW5wdXRzKTsKKworICAgIHN0
YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgRkVN
ZXJnZShGaWx0ZXImKTsKKyAgICBGRU1lcmdlKHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRz
KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAi
RkVNZXJnZSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7
CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX251bWJl
ck9mRWZmZWN0SW5wdXRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCmluZGV4IDhhN2U1YjY2N2FiNzczYjkwYjg5MGUzODM4NjM5MzU2MmI5ZDhkZjUuLmYw
YmM5ODEzMmY4ZDFkMzQyZmEzYWUwM2YxYTI2NWE0MDIwNmViODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAy
MDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5j
LiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjUsMjY1ICsyNSw2MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTW9ycGhv
bG9neS5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JU
eXBlcy5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0j
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6TW9ycGhvbG9neSkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAg
ICwgbV9yYWRpdXNYKHJhZGl1c1gpCi0gICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKK1JlZjxGRU1v
cnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9s
b2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCiB7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KG1vcnBob2xvZ3lPcGVyYXRvciwgcmFkaXVzWCwg
cmFkaXVzWSkpOwogfQogCi1SZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShG
aWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNY
LCBmbG9hdCByYWRpdXNZKQorRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9w
ZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkK
KyAgICA6IG1fbW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVyYXRvcikKKyAgICAsIG1f
cmFkaXVzWChyYWRpdXNYKQorICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwgcmFkaXVz
WSkpOwogfQogCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK2Jvb2wgRkVNb3JwaG9sb2d5OjpzZXRNb3JwaG9sb2d5
T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcikKIHsKLSAgICBp
ZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0
eXBlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fbW9ycGhv
bG9neU9wZXJhdG9yLCBtb3JwaG9sb2d5T3BlcmF0b3IpICE9IG1vcnBob2xvZ3lPcGVyYXRvcjsK
IH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1goZmxvYXQgcmFkaXVzWCkKIHsKLSAg
ICBpZiAobV9yYWRpdXNYID09IHJhZGl1c1gpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X3JhZGl1c1ggPSByYWRpdXNYOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fcmFkaXVzWCwgcmFkaXVzWCkgIT0gbV9yYWRpdXNYOwogfQogCiBib29sIEZFTW9y
cGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKQogewotICAgIGlmIChtX3JhZGl1c1kg
PT0gcmFkaXVzWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fcmFkaXVzWSA9IHJhZGl1
c1k7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZm
ZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+
ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVz
b2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKLSAgICBpZiAoY2xpcHNUb0JvdW5k
cygpKQotICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwotfQotCi1zdGF0
aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpCi17
Ci0gICAgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7Ci19Ci0KLWlubGluZSBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tl
ZENvbG9yOjpSR0JBIHBpeGVsKQotewotICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NS
R0JBKHBpeGVsKSk7Ci19Ci0KLWlubGluZSBQYWNrZWRDb2xvcjo6UkdCQSBtYWtlUGl4ZWxWYWx1
ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBj
b21wb25lbnRzKQotewotICAgIHJldHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7IG1ha2VGcm9tQ29t
cG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsKLX0KLQotdGVtcGxhdGU8TW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBh
LCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIpCi17Ci0gICAgaWYgKHR5cGUg
PT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4gcGVyQ29tcG9u
ZW50TWluKGEsIGIpOwotCi0gICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChhLCBiKTsKLX0KLQot
dGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdp
ZHRoKQotewotICAgIGF1dG8gZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lk
dGgpKSB9KTsKLQotICAgIGZvciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7
Ci0gICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUo
UGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNy
Y1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7Ci0g
ICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVtdW0sIHBpeGVsKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGV4dHJlbXVtOwotfQotCi1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3Jj
UGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRVJPREU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgp
OwotCi0gICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxB
VEU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotfQotCi11c2luZyBD
b2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+Owot
Ci10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRy
ZW1hJiBrZXJuZWwpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVtdW0g
PSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwga2VybmVsW2ldKTsKLQotICAgIHJldHVybiBleHRy
ZW11bTsKLX0KLQotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2Vy
bmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VS
T0RFKQotICAgICAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9S
X0VST0RFPihrZXJuZWwpOwotCi0gICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9ESUxBVEU+KGtlcm5lbCk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0
YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgY29u
c3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKLSAg
ICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OwotCi0g
ICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKLSAgICBjb25zdCBp
bnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOwotICAgIGNvbnN0IGludCB3aWR0aCA9
IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRh
LmhlaWdodDsKLQotICAgIEFTU0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVp
Z2h0KTsKLSAgICBBU1NFUlQoc3RhcnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZ
IDwgZW5kWSk7Ci0KLSAgICBDb2x1bW5FeHRyZW1hIGV4dHJlbWE7Ci0gICAgZXh0cmVtYS5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRpdXNYICsgMSk7Ci0KLSAgICBmb3IgKGludCB5ID0g
c3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6
Om1heCgwLCB5IC0gcmFkaXVzWSk7Ci0gICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4o
aGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOwotCi0gICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOwot
Ci0gICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVt
ZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBy
YWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShz
cmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUp
KTsKLQotICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNv
bHVtbgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAgICAg
ICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBw
ZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3Rh
cnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAgICAgaWYgKHggPiBy
YWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAgICAg
ICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBp
eGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAgICAg
ICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5l
bEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkpLnZhbHVlOwotICAgICAgICB9Ci0gICAgfQorICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fcmFkaXVzWSwgcmFkaXVzWSkgIT0gbV9yYWRpdXNZOwog
fQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5
UGFyYW1ldGVycyogcGFyYW0pCitGbG9hdFJlY3QgRkVNb3JwaG9sb2d5OjpkcmF3aW5nUmVjdChj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KSBjb25zdAogewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
KCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CisgICAg
QVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0ID0g
aW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOworICAgIGRyYXdpbmdSZWN0LmluZmxhdGUoeyBtX3Jh
ZGl1c1gsIG1fcmFkaXVzWSB9KTsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4RHJhd2luZ1JlY3Qo
aW5wdXRzLCBkcmF3aW5nUmVjdCk7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorRmlsdGVyUmVzdWx0KiBGRU1v
cnBob2xvZ3k6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1bnRp
bWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3
aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0
KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKyAg
ICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0
KCk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxBcmVhID0gKDE2MCAqIDE2MCk7IC8v
IEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0gICAgCi0gICAgdW5zaWdu
ZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4OwotICAgIHVuc2lnbmVk
IG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKHBhaW50aW5nRGF0YS53
aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3IpIC8gbWluaW1hbEFyZWEs
IG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAg
ICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxK
b2JzKCZXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIsIG9wdGltYWxU
aHJlYWROdW1iZXIpOwotICAgICAgICBhdXRvIG51bU9mVGhyZWFkcyA9IHBhcmFsbGVsSm9icy5u
dW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bU9mVGhyZWFkcyA+IDEpIHsKLSAgICAgICAg
ICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSItc2l6ZWQgam9icyBidXQgdGhlcmUg
YSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAg
ICAgICAvLyBqb2JTaXplICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFu
ZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGludCBq
b2JTaXplID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAg
IGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRpbmdEYXRhLmhlaWdodCAlIG51bU9mVGhyZWFkczsK
LSAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2Ig
PSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQ
bGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpv
Yik7Ci0gICAgICAgICAgICAgICAgcGFyYW0uZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAg
ICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBq
b2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXplOwotICAgICAgICAgICAg
ICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAgICBwYXJhbS5wYWludGlu
Z0RhdGEgPSAmcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFyYWxs
ZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVsCi0gICAgfQorICAgIGlmIChhdXRv
IHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBh
aW50aW5nRGF0YS5oZWlnaHQpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBp
biB9LCBudWxscHRyKTsKIH0KIAotYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdl
bmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBp
bWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3ImIG1vcnBo
b2xvZ3lPcGVyYXRvcikKIHsKLSAgICBpZiAocmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwg
KCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhl
bEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShp
bi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0KLSAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX3JhZGl1
c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5h
dGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMud2lkdGgoKSwgcmFkaXVz
LmhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGll
ZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBp
ZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJhZGl1cyA9IGZs
b29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gs
IG1fcmFkaXVzWSB9KSk7Ci0gICAgaW50IHJhZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5n
UmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwotICAgIGludCByYWRpdXNZID0gc3Rk
OjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOwot
Ci0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwg
ZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBwYWludGluZ0RhdGEuc3Jj
UGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7Ci0gICAgcGFpbnRpbmdEYXRhLmRz
dFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS53
aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0
LmhlaWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRp
dXNYID0gY2VpbGYocmFkaXVzWCAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGlu
Z0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0K
LSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
JiB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAobW9ycGhvbG9neU9w
ZXJhdG9yKSB7CiAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAg
ICAgdHMgPDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTI5NywxNSArOTMsMTEgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVw
cmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVNb3Jw
aG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZU1vcnBob2xvZ3ki
OwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwogICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8IG1vcnBob2xvZ3lPcGVyYXRvcigp
IDw8ICJcIiAiCiAgICAgICAgPDwgInJhZGl1cz1cIiIgPDwgcmFkaXVzWCgpIDw8ICIsICIgPDwg
cmFkaXVzWSgpIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRl
bnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmlu
ZGV4IDQ4ZmMzNTQxMTdmYzI3Y2NmYzhlOTNmMTRlZGYwNzVkZTM5YzVhMTEuLmExOTUwMTY5YTVk
NWY1M2M4M2EwNzRlMDk1M2Y0YTE1MzVhZTBmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaApAQCAtMiw2ICsy
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTEgKzIzLDEw
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUg
IkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSB7CitlbnVtIE1vcnBob2xvZ3lPcGVyYXRvciB7CiAgICAgRkVNT1JQSE9MT0dZX09Q
RVJBVE9SX1VOS05PV04gPSAwLAogICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSA9IDEs
CiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSA9IDIKQEAgLTM0LDEwICszNCwxMCBA
QCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewogCiBjbGFzcyBGRU1vcnBob2xvZ3kgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFTW9ycGhvbG9n
eT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gs
IGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoTW9y
cGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAotICAgIE1v
cnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9Ci0gICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSk7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9CisgICAgYm9vbCBzZXRNb3JwaG9s
b2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yKTsKIAogICAgIGZsb2F0IHJhZGl1c1goKSBj
b25zdCB7IHJldHVybiBtX3JhZGl1c1g7IH0KICAgICBib29sIHNldFJhZGl1c1goZmxvYXQpOwpA
QCAtNDYsNDAgKzQ2LDE5IEBAIHB1YmxpYzoKICAgICBib29sIHNldFJhZGl1c1koZmxvYXQpOwog
CiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0ZXImLCBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBGRU1vcnBob2xvZ3koTW9y
cGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAogICAgIGNv
bnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNb3JwaG9sb2d5
IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBG
bG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShG
aWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYg
ZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50
IHJhZGl1c1kpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJy
YXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFy
cmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGlu
dCByYWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9OwotCi0gICAgc3RydWN0IFBs
YXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVNb3JwaG9sb2d5KiBmaWx0ZXI7Ci0g
ICAgICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgICAgICBjb25zdCBQYWlu
dGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZv
cm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwotCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdl
bmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwotCi0gICAg
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1f
bW9ycGhvbG9neU9wZXJhdG9yOwogICAgIGZsb2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBtX3Jh
ZGl1c1k7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMjcwZGI5MjQ4MWEzMzkyZDNkNWExZTkxN2MyZDY1
YWE0MTQwZjY5Li43MWQ4NDA2NDM2MjYyZmU3OTU2ODkzMjA3YWUzMzIxOTFmNzgwN2Y4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0
LDcxICsyNSw0NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFT2Zmc2V0Lmgi
CiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVPZmZzZXQ6OkZFT2Zmc2V0KEZpbHRlciYgZmls
dGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpPZmZzZXQpCi0gICAgLCBtX2R4KGR4KQorRkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBm
bG9hdCBkeSkKKyAgICA6IG1fZHgoZHgpCiAgICAgLCBtX2R5KGR5KQogewogfQogCi1SZWY8RkVP
ZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBk
eSkKK1JlZjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChkeCwgZHkpKTsKIH0KIAotdm9pZCBGRU9m
ZnNldDo6c2V0RHgoZmxvYXQgZHgpCitGbG9hdFJlY3QgRkVPZmZzZXQ6OmRyYXdpbmdSZWN0KGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0CiB7Ci0gICAgbV9keCA9IGR4OworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOwor
ICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBpbnB1dHNbMF0tPmRyYXdpbmdSZWN0KCk7CisgICAgZHJh
d2luZ1JlY3QubW92ZSh7IG1fZHgsIG1fZHkgfSk7CisgICAgcmV0dXJuIGRyYXdpbmdSZWN0Owog
fQogCi12b2lkIEZFT2Zmc2V0OjpzZXREeShmbG9hdCBkeSkKK0ZpbHRlclJlc3VsdCogRkVPZmZz
ZXQ6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgbV9keSA9IGR5OwotfQotCi12b2lkIEZFT2Zm
c2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0IHBhaW50
UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIGlmIChjbGlwc1RvQm91
bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19CisgICAg
QVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgp
OwogCi12b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGluQnVm
ZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAh
aW5CdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQu
cmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAg
c2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJh
d2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2lu
Z1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5
IH0pKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZm
ZXIsIGRyYXdpbmdSZWdpb24pOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBp
biB9LCBudWxscHRyKTsKIH0KIAotVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlv
bikgY29uc3QKK1RleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBp
bmRlbnQgPDwgIltmZU9mZnNldCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBkeD1cIiIgPDwgZHgoKSA8
PCAiXCIgZHk9XCIiIDw8IGR5KCkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVu
dFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5o
CmluZGV4IDY1YWJkYTkwYTQ3YjFiZmU3NmFlNWM3NGFhYjVhYTE2N2ZiMWU2OWUuLmE5OGU0YTk5
YzA1YjM3MWM1ZjRlNjBmYzNiZmJlNzU2MmJlOTU3NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDM0ICsyMyw2MCBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShG
aWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNy
ZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwogCiAgICAgZmxvYXQgZHgoKSBjb25zdCB7IHJldHVy
biBtX2R4OyB9Ci0gICAgdm9pZCBzZXREeChmbG9hdCk7CisgICAgdm9pZCBzZXREeChmbG9hdCBk
eCkgeyBtX2R4ID0gZHg7IH0KIAogICAgIGZsb2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9keTsg
fQotICAgIHZvaWQgc2V0RHkoZmxvYXQpOworICAgIHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9k
eSA9IGR5OyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBG
RU9mZnNldChGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIEZFT2Zmc2V0KGZsb2F0
IGR4LCBmbG9hdCBkeSk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gIkZFT2Zmc2V0IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBG
aWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9keDsKICAgICBmbG9hdCBtX2R5
OwogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
K3ZvaWQgRkVPZmZzZXQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgbV9keDsKKyAgICBlbmNvZGVyIDw8IG1fZHk7Cit9CiAKK3RlbXBsYXRlPGNsYXNz
IERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRU9mZnNldD4+IEZFT2Zmc2V0OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkeDsKKyAgICBk
ZWNvZGVyID4+IGR4OworICAgIGlmICghZHgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkeTsKKyAgICBkZWNvZGVyID4+IGR5OworICAg
IGlmICghZHkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVP
ZmZzZXQ6OmNyZWF0ZSgqZHgsICpkeSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAppbmRleCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0
MWY3NGY5YzQ4N2ExNDRjLi45OWFiOGRhNjRmY2Q1YTM2YjEyNjFmYTEyZjBkMWYwYThjMWRmMzAz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
U3BlY3VsYXJMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw0OSArMjMsMjYgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGRVNwZWN1bGFyTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUg
IkxpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5n
KEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFj
ZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBTcGVjdWxh
ckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3Rh
bnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3Ro
WSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OlNwZWN1bGFyTGlnaHRpbmcpCitSZWY8RkVT
cGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYg
Y29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxh
ckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSkpOwogfQogCi1SZWY8RkVTcGVjdWxhckxpZ2h0aW5n
PiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCitGRVNw
ZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQorICAgIDogRkVMaWdodGluZyhjb2xvciwgc3Vy
ZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxV
bml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVNwZWN1bGFyTGlnaHRpbmcoZmlsdGVyLCBsaWdodGluZ0Nv
bG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtl
cm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkp
KTsKIH0KIAotRkVTcGVjdWxhckxpZ2h0aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBkZWZh
dWx0OwotCi1ib29sIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChmbG9h
dCBzcGVjdWxhckNvbnN0YW50KQotewotICAgIGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3Bl
Y3VsYXJDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3BlY3VsYXJDb25z
dGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVT
cGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQpCi17Ci0gICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSBzcGVjdWxhckV4cG9uZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJF
eHBvbmVudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlU3BlY3VsYXJMaWdo
dGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNj
YWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1YWxDb25zdGFudD1cIiIgPDwgbV9zcGVjdWxh
ckNvbnN0YW50IDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1f
c3BlY3VsYXJFeHBvbmVudCA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2Nv
cGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuaAppbmRleCBlOTk4YTc2MDVkMWU0NzM1ZDlmNDk3OThkMzk4MThiZjNi
MjQ5NThhLi5jYWU1YjgyZmJlYmM1YWI2MzQzNTY5MDVlOWJlN2U2ZjNmMDMyZjc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI3LDIwICsyOCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0
IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3Vy
Y2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOworICAgIHN0YXRpYyBS
ZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0
U291cmNlPiYmKTsKIAotICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdCB7IHJldHVy
biBtX3NwZWN1bGFyQ29uc3RhbnQ7IH0KLSAgICBib29sIHNldFNwZWN1bGFyQ29uc3RhbnQoZmxv
YXQpOwotCi0gICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Bl
Y3VsYXJFeHBvbmVudDsgfQotICAgIGJvb2wgc2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCk7Citw
cml2YXRlOgorICAgIEZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGln
aHRTb3VyY2U+JiYpOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJG
RVNwZWN1bGFyTGlnaHRpbmciOyB9CiAKLXByaXZhdGU6Ci0gICAgRkVTcGVjdWxhckxpZ2h0aW5n
KEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0
LCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1
MWNiYjIyOWRlZTk2NDJkYzFlN2RjYTBjNWRiMmZjYWMyMGFkLi4xMzc5MmRkOGQwM2ZjMTliMmM2
MzIxZTMxNjJmNzEzYTc3MTY3MzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwu
Y29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDgwICsyMiwzNiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkZFVGlsZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRl
ICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVUaWxlOjpGRVRpbGUoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVy
LCBUeXBlOjpUaWxlKQorUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoKQogeworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFVGlsZSgpKTsKIH0KIAotUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVh
dGUoRmlsdGVyJiBmaWx0ZXIpCitGbG9hdFJlY3QgRkVUaWxlOjpkcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUaWxlKGZpbHRlcikpOworICAgIC8vIERv
bid0IHVzZSB0aGUgaW5wdXRzJyBzdWJyZWdpb25zIGZvciA8ZmVUaWxlPi4KKyAgICByZXR1cm4g
Z2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRVRpbGU6OmFwcGx5KEZpbHRl
ck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciop
IGNvbnN0CiB7Ci0vLyBGSVhNRTogU2VlIGJ1ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29y
ayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3Ro
ZXJ3aXNlLgotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBBU1NF
UlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAK
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdl
KCkpOwotCi0gICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMg
dGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBv
ZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lm
aWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgotICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5t
YXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGls
ZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4
RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgaWYgKGluLT5maWx0ZXJFZmZlY3RUeXBlKCkg
PT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0KSB7Ci0gICAgICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lv
bigpOwotICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndp
ZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIH0KLQotICAg
IGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
dGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVy
KCkucmVuZGVyaW5nTW9kZSgpKTsKLSAgICBpZiAoIXRpbGVJbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5j
b250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9j
YXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkpOwotICAgIHRpbGVJbWFnZUNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9j
YXRpb24oKSk7Ci0KLSAgICBhdXRvIHRpbGVJbWFnZUNvcHkgPSBJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZShXVEZNb3ZlKHRpbGVJbWFnZSkpOwotICAgIGlmICghdGlsZUltYWdlQ29w
eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zv
cm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUoaW5NYXhFZmZlY3RMb2NhdGlvbiAt
IG1heEVmZmVjdExvY2F0aW9uKTsKLQotICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0
ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRy
YW5zZm9ybSB9KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3Vs
dEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZN
b3ZlKHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFwcGx5
UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCi1UZXh0U3RyZWFtJiBGRVRp
bGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9u
VHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0
CiB7Ci0gICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiXVxu
IjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotCisgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlXVxuIjsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oCmluZGV4IDQ5YmQ5OWYwOTQ0N2RhZTFjZjA5YWYxMjM1OGM2ZGU4NDA2ODc3MTQuLjYxM2E1
ODU2ZjVjOWIxOGRhZjc2MWNjZTc3OTQ4YWQ0NmVhZTg2MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMiw2ICsyLDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjcgKzIzLDI1IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRl
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRVRpbGUgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKEZp
bHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToKLSAg
ICBGRVRpbGUoRmlsdGVyJik7CisgICAgdXNpbmcgRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3Q7
CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
VGlsZSI7IH0KIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVUaWxlOyB9CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYs
IEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3Zl
cnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJl
Y3QoKSkpOyB9CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGFjMjM0NmU4YTRiYTU4YWFh
OTI0YTZkNjdiZDVlNGI3N2RkMjI2OGYuLjgyYmY4N2M1YTQxZGI0MzI5YjE2NDAzNTZjMTRjMzdk
ODUyNDY5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgogICogQ29weXJp
Z2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMzEgKzI2LDE4IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLS8qCi0gICAgUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0g
Ml0uIEFsZ29yaXRobSBpczoKLSAgICByID0gKGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFt
cGxpdHVkZSA9IDE2ODA3IGFuZAotICAgIG0gPSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIx
NDc0ODM2NDcsIHIgPSBzZWVkLgotICAgIFNlZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAz
MSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4Ci0gICAgVG8gdGVzdDogdGhlIGFsZ29yaXRobSBz
aG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUKLSAgICBhcyB0aGUgMTAsMDAwdGgg
Z2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgotKi8KLXN0YXRpYyBj
b25zdCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRN
YXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCi1zdGF0aWMgY29uc3QgaW50IHNfcmFu
ZEFtcGxpdHVkZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMg
Y29uc3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCi1zdGF0aWMgY29uc3QgaW50IHNf
cmFuZFIgPSAyODM2OyAvLyBtICUgYQorUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpj
cmVhdGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJh
c2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxl
cykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZy
ZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykp
OworfQogCi1GRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVs
ZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZ
LCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlR1cmJ1bGVuY2UpCi0gICAgLCBtX3R5cGUodHlwZSkK
K0ZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJh
c2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0
IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fYmFz
ZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lZKGJhc2VG
cmVxdWVuY3lZKQogICAgICwgbV9udW1PY3RhdmVzKG51bU9jdGF2ZXMpCkBAIC01OSw0MDUgKzQ2
LDQ3IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxl
bmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlCiB7CiB9CiAKLVJlZjxGRVR1cmJ1bGVuY2U+
IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBl
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3Rh
dmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFVHVyYnVsZW5jZShmaWx0ZXIsIHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJl
cXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKLX0KLQogYm9vbCBGRVR1
cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsZW5jZVR5cGUgdHlwZSkKIHsKLSAgICBpZiAobV90eXBl
ID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVko
ZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi17Ci0gICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVkgPT0gYmFz
ZUZyZXF1ZW5jeVkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Jhc2VGcmVxdWVuY3lZ
ID0gYmFzZUZyZXF1ZW5jeVk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhj
aGFuZ2UobV90eXBlLCB0eXBlKSAhPSBtX3R5cGU7CiB9CiAKIGJvb2wgRkVUdXJidWxlbmNlOjpz
ZXRCYXNlRnJlcXVlbmN5WChmbG9hdCBiYXNlRnJlcXVlbmN5WCkKIHsKLSAgICBpZiAobV9iYXNl
RnJlcXVlbmN5WCA9PSBiYXNlRnJlcXVlbmN5WCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fYmFzZUZyZXF1ZW5jeVggPSBiYXNlRnJlcXVlbmN5WDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Jhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WCkg
IT0gbV9iYXNlRnJlcXVlbmN5WDsKIH0KIAotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFNlZWQoZmxv
YXQgc2VlZCkKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNl
RnJlcXVlbmN5WSkKIHsKLSAgICBpZiAobV9zZWVkID09IHNlZWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3NlZWQgPSBzZWVkOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBz
dGQ6OmV4Y2hhbmdlKG1fYmFzZUZyZXF1ZW5jeVksIGJhc2VGcmVxdWVuY3lZKSAhPSBtX2Jhc2VG
cmVxdWVuY3lZOwogfQogCiBib29sIEZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyhpbnQgbnVt
T2N0YXZlcykKIHsKLSAgICBpZiAobV9udW1PY3RhdmVzID09IG51bU9jdGF2ZXMpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX251bU9jdGF2ZXMgPSBudW1PY3RhdmVzOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0
Y2gpCi17Ci0gICAgaWYgKG1fc3RpdGNoVGlsZXMgPT0gc3RpdGNoKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbV9zdGl0Y2hUaWxlcyA9IHN0aXRjaDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLy8gVGhlIHR1cmJ1bGVuY2UgY2FsY3VsYXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZlcnNp
b24gb2Ygd2hhdCBhcHBlYXJzIGluIHRoZSBTVkcgMS4xIHNwZWNpZmljYXRpb246Ci0vLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlCi0KLS8vIENv
bXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCi1pbmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6OlBh
aW50aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAgICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVk
ZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3JhbmRSICogKHNlZWQgLyBzX3JhbmRRKTsKLSAgICBp
ZiAocmVzdWx0IDw9IDApCi0gICAgICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOwotICAgIHNl
ZWQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIGZsb2F0IHNtb290
aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0dXJuIHQgKiB0ICogKDMgLSAyICogdCk7Ci19Ci0K
LWlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0
IGIpCi17Ci0gICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVu
Y2U6OmluaXRQYWludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICBmbG9hdCBu
b3JtYWxpemF0aW9uRmFjdG9yOwotCi0gICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhl
IHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCi0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVk
IDw9IDApCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAl
IChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKLSAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBz
X3JhbmRNYXhpbXVtIC0gMSkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhp
bXVtIC0gMTsKLQotICAgIGZsb2F0KiBncmFkaWVudDsKLSAgICBmb3IgKGludCBjaGFubmVsID0g
MDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNfYmxvY2tTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbaV0gPSBpOwotICAgICAgICAgICAgZ3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1baV07Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgZ3JhZGll
bnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICog
c19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAg
ICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9t
KCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAg
ICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAhZ3JhZGllbnRbMV0pOwotICAgICAg
ICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRp
ZW50WzFdKTsKLSAgICAgICAgICAgIGdyYWRpZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7
Ci0gICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0t
aSkgewotICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0g
ICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgc19ibG9ja1NpemU7Ci0gICAg
ICAgIEFTU0VSVChqID49IDApOwotICAgICAgICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSAr
IDIpOwotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3RvcltqXSA9IGs7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6
ZSArIDI7ICsraSkgewotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxv
Y2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBm
b3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICAg
ICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07Ci0gICAgICAgICAgICBwYWludGlu
Z0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotRkVUdXJi
dWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXpl
IHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fc3RpdGNoVGlsZXMpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHRpbGVI
ZWlnaHQgPSB0aWxlU2l6ZS5oZWlnaHQoKTsKLSAgICBBU1NFUlQodGlsZVdpZHRoID4gMCAmJiB0
aWxlSGVpZ2h0ID4gMCk7Ci0KLSAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNl
LCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAotICAgIC8vIHNvIHRoYXQgdGhlIHRp
bGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCi0gICAgaWYgKGJhc2VGcmVxdWVuY3lYKSB7
Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGggKiBiYXNlRnJl
cXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWls
Zih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIC8vIEJh
c2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5k
YXJkLgotICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJl
cXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGxv
d0ZyZXF1ZW5jeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBo
aWdoRnJlcXVlbmN5OwotICAgIH0KLSAgICBpZiAoYmFzZUZyZXF1ZW5jeVkpIHsKLSAgICAgICAg
ZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkg
LyB0aWxlSGVpZ2h0OwotICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZUhl
aWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGlmIChiYXNlRnJl
cXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkK
LSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotCi0g
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgIHN0aXRjaERhdGEud2lkdGggPSByb3VuZGYo
dGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOwotICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Bl
cmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsKLSAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJv
dW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpOwotICAgIHN0aXRjaERhdGEud3JhcFkg
PSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gc3RpdGNo
RGF0YTsKLX0KLQotLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3
dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1Db2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChjb25zdCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3Qg
RmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpIGNvbnN0Ci17Ci0gICAgc3RydWN0IE5vaXNlUG9zaXRp
b24gewotICAgICAgICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGluIHRoZSBzcGVjIHRleHQuCi0g
ICAgICAgIGludCBuZXh0SW5kZXg7IC8vIGJ4MSwgYnkxIGluIHRoZSBzcGVjIHRleHQuCi0gICAg
ICAgIGZsb2F0IGZyYWN0aW9uOyAvLyByeDAsIHJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgotCi0gICAg
ICAgIE5vaXNlUG9zaXRpb24oZmxvYXQgY29tcG9uZW50KQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyAgdCA9IHZlY1swXSArIFBlcmxpbk47Ci0gICAgICAgICAgICAvLyAgYngwID0gKGludCl0
OwotICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4MCsxOwotICAgICAgICAgICAgLy8gIHJ4MCA9IHQg
LSAoaW50KXQ7Ci0gICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVudCArIHNfcGVy
bGluTm9pc2U7Ci0gICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24p
OwotICAgICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXggKyAxOwotICAgICAgICAgICAgZnJhY3Rp
b24gPSBwb3NpdGlvbiAtIGluZGV4OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lk
IHN0aXRjaChpbnQgc2l6ZSwgaW50IHdyYXBTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBpZiAoYngwID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4MCAt
PSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IHdyYXBTaXpl
KQotICAgICAgICAgICAgICAgIGluZGV4IC09IHNpemU7Ci0KLSAgICAgICAgICAgIC8vIGlmIChi
eDEgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKLSAgICAgICAgICAgIC8vICAgYngxIC09IHBTdGl0
Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAgICBpZiAobmV4dEluZGV4ID49IHdyYXBTaXplKQot
ICAgICAgICAgICAgICAgIG5leHRJbmRleCAtPSBzaXplOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIE5vaXNlUG9zaXRpb24gbm9pc2VYKG5vaXNlVmVjdG9yLngoKSk7Ci0gICAgTm9pc2VQb3Np
dGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKLQotICAgIC8vIElmIHN0aXRjaGluZywgYWRq
dXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7
Ci0gICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0aCwgc3RpdGNoRGF0YS53cmFw
WCk7Ci0gICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5oZWlnaHQsIHN0aXRjaERhdGEu
d3JhcFkpOwotICAgIH0KLQotICAgIC8vIGJ4MCAmPSBCTTsKLSAgICAvLyBieDEgJj0gQk07Ci0g
ICAgLy8gYnkwICY9IEJNOwotICAgIC8vIGJ5MSAmPSBCTTsKLSAgICBub2lzZVguaW5kZXggJj0g
c19ibG9ja01hc2s7Ci0gICAgbm9pc2VYLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBu
b2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLm5leHRJbmRleCAmPSBzX2Js
b2NrTWFzazsKLQotICAgIC8vIGkgPSB1TGF0dGljZVNlbGVjdG9yW2J4MF07Ci0gICAgLy8gaiA9
IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKLSAgICBpbnQgbGF0dGljZUluZGV4ID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVguaW5kZXhdOwotICAgIGludCBuZXh0TGF0dGljZUlu
ZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVgubmV4dEluZGV4XTsKLQot
ICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUocngwKSk7Ci0gICAgLy8gc3kgPSBkb3VibGUoc19j
dXJ2ZShyeTApKTsKLSAgICBmbG9hdCBzeCA9IHNtb290aEN1cnZlKG5vaXNlWC5mcmFjdGlvbik7
Ci0gICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkuZnJhY3Rpb24pOwotCi0gICAgYXV0
byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50IGNoYW5uZWwpIHsKLSAgICAgICAgLy8gYjAwID0g
dUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQotICAgICAgICBpbnQgYjAwID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAv
LyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMF07IHUgPSByeDAgKiBxWzBdICsgcnkw
ICogcVsxXTsKLSAgICAgICAgY29uc3QgZmxvYXQqIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1bYjAwXTsKLSAgICAgICAgZmxvYXQgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0g
KyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwotCi0gICAgICAgIC8vIGIxMCA9IHVMYXR0aWNlU2Vs
ZWN0b3JbaiArIGJ5MF07Ci0gICAgICAgIGludCBiMTAgPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAvLyByeDEg
PSByeDAgLSAxLjBmOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2Ix
MF07IHYgPSByeDEgKiBxWzBdICsgcnkwICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOwotICAgICAgICBmbG9hdCB2ID0gKG5vaXNlWC5mcmFj
dGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0gICAgICAgIC8vIGEg
PSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxvYXQgYSA9IGxpbmVhckludGVycG9sYXRpb24o
c3gsIHUsIHYpOwotCi0gICAgICAgIC8vIGIwMSA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MV07
Ci0gICAgICAgIGludCBiMDEgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJ
bmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwotICAgICAgICAvLyByeTEgPSByeTAgLSAxLjBmOwot
ICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMV07IHUgPSByeDAgKiBx
WzBdICsgcnkxICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFu
bmVsXVtiMDFdOwotICAgICAgICB1ID0gbm9pc2VYLmZyYWN0aW9uICogcVswXSArIChub2lzZVku
ZnJhY3Rpb24gLSAxKSAqIHFbMV07Ci0KLSAgICAgICAgLy8gYjExID0gdUxhdHRpY2VTZWxlY3Rv
cltqICsgYnkxXTsKLSAgICAgICAgaW50IGIxMSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwotICAgICAgICAvLyBxID0g
ZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMV07IHYgPSByeDEgKiBxWzBdICsgcnkxICogcVsx
XTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTFdOwotICAg
ICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIChub2lzZVkuZnJhY3Rpb24g
LSAxKSAqIHFbMV07Ci0gICAgICAgIC8vIGIgPSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxv
YXQgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwotCi0gICAgICAgIC8vIHJldHVy
biBsZXJwKHN5LCBhLCBiKTsKLSAgICAgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ks
IGEsIGIpOwotICAgIH07Ci0KLSAgICByZXR1cm4gewotICAgICAgICBub2lzZUZvckNoYW5uZWwo
MCksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgxKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVs
KDIpLAotICAgICAgICBub2lzZUZvckNoYW5uZWwoMykKLSAgICB9OwotfQotCi0vLyBodHRwczov
L3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50IGRlc2Ny
aWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50cy4KLS8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4oU1JHQkE8ZmxvYXQ+KSB0byBn
ZXQgdGhlIHNhbWUgYmVoYXZpb3IuCi1zdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykKLXsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6
OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1
KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+
KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8
dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAy
NTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRD
b21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fbnVtT2N0YXZlcywgbnVtT2N0YXZlcykgIT0gbV9udW1PY3RhdmVzOwogfQogCi1D
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxl
bmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNo
RGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wgRkVU
dXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNlZWQpCiB7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQ7Ci0gICAgRmxvYXRQb2ludCBub2lzZVZl
Y3Rvcihwb2ludC54KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAq
IHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WSk7Ci0gICAgZmxvYXQgcmF0aW8gPSAxOwotICAg
IGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsK
LSAgICAgICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAg
ICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRh
LCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBz
dGl0Y2hEYXRhLCBub2lzZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKLQotICAgICAgICBub2lzZVZl
Y3Rvci5zZXRYKG5vaXNlVmVjdG9yLngoKSAqIDIpOwotICAgICAgICBub2lzZVZlY3Rvci5zZXRZ
KG5vaXNlVmVjdG9yLnkoKSAqIDIpOwotICAgICAgICByYXRpbyAqPSAyOwotCi0gICAgICAgIGlm
IChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4g
U3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAot
ICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0
aW5nIGl0IG9uY2UuCi0gICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Ci0gICAgICAg
ICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5v
aXNlOwotICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKLSAgICAgICAgICAgIHN0
aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1
KSAvIDIgYnkgZnJhY3RhbE5vaXNlCi0gICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlw
ZTo6RnJhY3RhbE5vaXNlKQotICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKLQotICAgIHJldHVybiB0b0ludEJh
c2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CisgICAgcmV0dXJu
IHN0ZDo6ZXhjaGFuZ2UobV9zZWVkLCBzZWVkKSAhPSBtX3NlZWQ7CiB9CiAKLXZvaWQgRkVUdXJi
dWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkgY29uc3QKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhi
b29sIHN0aXRjaFRpbGVzKQogewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIElu
dFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBmaWx0ZXJSZWdp
b24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRQb2ludCBwb2ludCgw
LCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKLSAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5l
bCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkuaW52
ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgIGZvciAoaW50IHkgPSBz
dGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAx
KTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBw
b2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBv
aW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQb2ludChwb2ludCk7Ci0gICAgICAgICAgICBhdXRv
IHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldFJhbmdl
KHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7Ci0gICAg
ICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
cmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zdGl0Y2hUaWxlcywgc3RpdGNoVGlsZXMpICE9IG1fc3Rp
dGNoVGlsZXM7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxS
ZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQorRmxvYXRSZWN0IEZFVHVyYnVsZW5jZTo6ZHJh
d2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5KSBjb25zdAogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbigq
cGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1l
dGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsK
KyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7CiB9CiAKLXZv
aWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0
b3ImLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1
ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5h
dGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRT
aXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIHJlc3VsdFNp
emUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZElu
dFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKLQotICAgIGZsb2F0IGJh
c2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5
WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0
ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLQot
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1
ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKLQot
ICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgpOwotICAgIGlmIChhcmVhLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGhlaWdodCA9IHJlc3VsdFNpemUu
aGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKLSAg
ICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEg
LyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8RmlsbFJlZ2lv
blBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVn
aW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBw
YXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgYXV0byBudW1Kb2JzID0gcGFyYWxsZWxKb2JzLm51bWJl
ck9mSm9icygpOwotICAgICAgICBpZiAobnVtSm9icyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNw
bGl0IHRoZSBqb2IgaW50byAic3RlcFkiLXNpemVkIGpvYnMsIGRpc3RyaWJ1dGluZyB0aGUgZXh0
cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAiam9ic1dpdGhFeHRyYSIgam9icy4KLSAgICAgICAgICAg
IHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0IC8gbnVtSm9iczsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQgJSBudW1Kb2JzOwotICAgICAgICAgICAgdW5zaWduZWQg
c3RhcnRZID0gMDsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpv
YnM7ICsraSkgewotICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMg
PSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0
ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0
aW9uUGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBh
aW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERh
dGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKLQotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGpvYkhlaWdodCA9IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSAr
IDEgOiBzdGVwWTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkg
KyBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc3RhcnRZICs9IGpvYkhlaWdodDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRw
dXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0g
ICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9v
bSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBm
aWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRh
LCAwLCBoZWlnaHQpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyB9LCBudWxs
cHRyKTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IFR1cmJ1bGVuY2VUeXBlIHR5cGUpCkBAIC00NzYsMTAgKzEwNSw5IEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQogICAg
IHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNlOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlVHVyYnVsZW5jZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiB0eXBlPVwi
IiA8PCB0eXBlKCkgPDwgIlwiICIKICAgICAgICA8PCAiYmFzZUZyZXF1ZW5jeT1cIiIgPDwgYmFz
ZUZyZXF1ZW5jeVgoKSA8PCAiLCAiIDw8IGJhc2VGcmVxdWVuY3lZKCkgPDwgIlwiICIKICAgICAg
ICA8PCAic2VlZD1cIiIgPDwgc2VlZCgpIDw8ICJcIiAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0ZDUz
NmIzN2E4MGFhZGY5MTFlYmZjZTg5Nzc0Y2QzY2NlY2I1Y2ZiLi44ZjcxMmZlZTUzYmMwYTY2MjIy
ZGNkZDVlMDQwYjcwYzMyZDU2ZDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKQEAgLTQsNyArNCw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw5ICsyNCw3IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzgsNyArMzYsNyBAQCBlbnVtIGNsYXNzIFR1cmJ1bGVuY2VUeXBlIHsKIAogY2xhc3MgRkVU
dXJidWxlbmNlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShGaWx0ZXImLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZs
b2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKyAgICBzdGF0aWMgUmVmPEZFVHVyYnVsZW5jZT4gY3Jl
YXRlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAog
ICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBi
b29sIHNldFR5cGUoVHVyYnVsZW5jZVR5cGUpOwpAQCAtNTksNjggKzU3LDE3IEBAIHB1YmxpYzoK
ICAgICBib29sIHNldFN0aXRjaFRpbGVzKGJvb2wpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBj
b25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2Nr
TWFzayA9IHNfYmxvY2tTaXplIC0gMTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFs
UmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3Ig
cGFyYWxsZWwgam9icy4KLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWlu
dGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAg
OiBzZWVkKHBhaW50aW5nU2VlZCkKLSAgICAgICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1Np
emUpCi0gICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAg
ICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIg
KiBzX2Jsb2NrU2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9j
a1NpemUgKyAyXVsyXTsKLSAgICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9h
dCBiYXNlRnJlcXVlbmN5WDsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAg
ICAgaW5saW5lIGxvbmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRh
IHsKLSAgICAgICAgU3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGgg
eyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAg
ICAgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAg
IGludCBoZWlnaHQgeyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2Jz
OwotCi0gICAgc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxl
bmNlKiBmaWx0ZXI7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwotICAg
ICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICAgICAgU3RpdGNoRGF0YSBzdGl0
Y2hEYXRhOwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICB9Owot
Ci0gICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyop
OwotCi0gICAgRkVUdXJidWxlbmNlKEZpbHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxv
YXQsIGludCwgZmxvYXQsIGJvb2wpOworICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZl
cywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KIAotICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwotICAgIFN0aXRjaERhdGEg
Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgs
IGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNh
bGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRj
aERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZpbGxSZWdpb24oVWlu
dDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkgY29uc3Q7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRw
dXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Up
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lk
Kik7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKICAgICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lYOwpAQCAt
MTMxLDQgKzc4LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjMyMmM4NjA4NGQxNWYyNDA5NWU0OTg1NGZmZDkzZjcwNTk5YWYwMWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlci5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmls
dGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyOjpGaWx0ZXIoUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlLCBUeXBlIHR5cGUpCisgICAgOiBtX3JlbmRlcmluZ01vZGUocmVu
ZGVyaW5nTW9kZSkKKyAgICAsIG1fdHlwZSh0eXBlKQoreworfQorCitzdGQ6OnR1cGxlPFJlZlB0
cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gRmlsdGVyOjphcHBseShJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkgY29u
c3QKK3sKKyAgICBGaWx0ZXJSZXN1bHRWZWN0b3Igc3RhY2s7CisgICAgRmlsdGVyT3V0cHV0IG91
dHB1dChXVEZNb3ZlKGdlb21ldHJ5KSwgbV9yZW5kZXJpbmdNb2RlKTsKKworICAgIGF1dG8gcmVz
dWx0ID0gYXBwbHkob3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2UpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQVNTRVJUKHN0YWNrLmlzRW1wdHkoKSk7Cisg
ICAgcmVzdWx0LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOworICAgIHJldHVybiB7IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKSwgcmVzdWx0LT5hYnNv
bHV0ZURyYXdpbmdSZWN0KCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXgg
YTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEwYmMxZi4uYjQ0MWY2ZTgxZDMwNjk2
MDc2YWZjMGNmNmIxY2EzZTMyZmE1OWViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIwLDU5ICsyMSw0MiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0
ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmls
dGVyRnVuY3Rpb24geworICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9uOjphcHBseTsKIAotY2xhc3Mg
RmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVy
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNj
YWxlID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3Jt
KQotICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmly
dHVhbCB+RmlsdGVyKCkgPSBkZWZhdWx0OworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
eyBDU1MsIFNWRyB9OwogCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZm
ZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2Up
OyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFn
ZS5nZXQoKTsgfQotCi0gICAgRmxvYXRTaXplIGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICB2b2lkIHNldEZpbHRlclJlc29sdXRpb24o
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7IG1fZmlsdGVyUmVzb2x1dGlvbiA9
IGZpbHRlclJlc29sdXRpb247IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KIAotICAgIGZsb2F0IGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1
cm4gbV9maWx0ZXJTY2FsZTsgfQotICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUoZmxvYXQgc2NhbGUp
IHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxlOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp0dXBs
ZTxSZWZQdHI8SW1hZ2VCdWZmZXI+LCBGbG9hdFJlY3Q+IGFwcGx5KEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKSBjb25zdDsKIAotICAg
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX2Fic29sdXRlVHJhbnNmb3JtOyB9Citwcm90ZWN0ZWQ6CisgICAgRmlsdGVyKFJlbmRlcmlu
Z01vZGUsIFR5cGUpOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdN
b2RlOyB9CisgICAgdmlydHVhbCBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZp
bHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qg
PSAwOwogCi0gICAgdmlydHVhbCBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIFR5cGUgbV90eXBl
OworfTsKIAotICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihG
bG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbjsg
fQotICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCA9IDA7Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIo
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVz
b2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQotICAgIHsKLSAgICB9CituYW1lc3BhY2UgV1RGIHsK
IAotcHJpdmF0ZToKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7Ci0gICAg
RmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNv
bHV0ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKLSAgICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9
OwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXI6OlR5cGU+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXI6
OlR5cGUsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlcjo6VHlwZTo6Q1NTLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXI6OlR5cGU6OlNWRworICAgID47CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRm
YzViYmNhNTFjMzQ4ZWM3ZjYzZTRjYzkyN2RiMTA4Li5mY2E4NDZkZjE1OGUzZTZhOTNjMGQwNmQ1
YjNhMzliYzNkZjU5MDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNCw2NjAgKzI0LDM3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRp
bGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25l
b24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0
ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlciYg
ZmlsdGVyLCBUeXBlIHR5cGUpCi0gICAgOiBtX2ZpbHRlcihmaWx0ZXIpCi0gICAgLCBtX2ZpbHRl
ckVmZmVjdENsYXNzVHlwZSh0eXBlKQotewotfQotCi1GaWx0ZXJFZmZlY3Q6On5GaWx0ZXJFZmZl
Y3QoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpCi17Ci0gICAgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKLSAgICBm
b3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQotICAgICAgICBtX2Fic29sdXRlUGFp
bnRSZWN0LnVuaXRlKGVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgY2xpcEFic29s
dXRlUGFpbnRSZWN0KCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQYWlu
dFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29u
c3QKIHsKLSAgICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1pdGl2ZSBzdWJyZWdpb24s
IHdoaWxlIENTUyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3VuZHMpCi0gICAgICAgIG1f
YWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RS
ZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVuY2xv
c2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
OworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVu
aXRlKGlucHV0LT5kcmF3aW5nUmVjdCgpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4RHJhd2lu
Z1JlY3QoaW5wdXRzLCBkcmF3aW5nUmVjdCk7CiB9CiAKLUZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0
OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50
KSBjb25zdAorRmlsdGVyUmVzdWx0KiBGaWx0ZXJFZmZlY3Q6OmFwcGx5UGxhdGZvcm0oRmlsdGVy
T3V0cHV0JiBvdXRwdXQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0CiB7Ci0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50
ID0gbWFwUG9pbnQodXNlclNwYWNlUG9pbnQsIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uLCBt
X2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uKTsKLSAgICBhYnNvbHV0ZVBvaW50Lm1vdmVCeSgt
bV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gYWJzb2x1dGVQb2lu
dDsKLX0KLQotSW50UmVjdCBGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihjb25zdCBJbnRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAotewotICAgIEludFBvaW50
IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpOwotICAgIGxvY2F0aW9u
Lm1vdmVCeSgtZWZmZWN0UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gSW50UmVjdChsb2Nh
dGlvbiwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotfQotCi1GbG9hdFJlY3QgRmlsdGVy
RWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIEZsb2F0U2l6ZSBzY2Fs
ZTsKLSAgICBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCksIHNjYWxlKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNm
b3JtLnNjYWxlKHNjYWxlKS50cmFuc2xhdGUoLW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24o
KSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybS5tYXBSZWN0KHNyY1JlY3QpOwotfQotCi1GbG9hdFJl
Y3QgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQotewot
ICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNlLCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZm
ZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSByZWN0LgotICAgIEZsb2F0UmVj
dCBzdWJyZWdpb247Ci0gICAgaWYgKHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gaW5w
dXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAgICAgIHN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KDAp
LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kpIHsKLSAgICAgICAgICAg
IGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdpb24gPSBpbnB1dEVmZmVjdChpKS0+ZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgICAgICAgICBzdWJyZWdpb24udW5pdGUo
aW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAg
IHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCk7Ci0KLSAgICAv
LyBBZnRlciBjYWxsaW5nIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBvbiB0aGUg
dGFyZ2V0IGVmZmVjdCwgcmVzZXQgdGhlIHN1YnJlZ2lvbiBhZ2FpbiBmb3IgPGZlVGlsZT4uCi0g
ICAgaWYgKGZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlVGlsZSkKLSAgICAg
ICAgc3VicmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAg
IGF1dG8gYm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXMoKTsKLSAgICBpZiAoaGFzWCgpKQot
ICAgICAgICBzdWJyZWdpb24uc2V0WChib3VuZGFyaWVzLngoKSk7Ci0gICAgaWYgKGhhc1koKSkK
LSAgICAgICAgc3VicmVnaW9uLnNldFkoYm91bmRhcmllcy55KCkpOwotICAgIGlmIChoYXNXaWR0
aCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0V2lkdGgoYm91bmRhcmllcy53aWR0aCgpKTsKLSAg
ICBpZiAoaGFzSGVpZ2h0KCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRIZWlnaHQoYm91bmRhcmll
cy5oZWlnaHQoKSk7Ci0KLSAgICBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9u
KTsKLQotICAgIGF1dG8gYWJzb2x1dGVTdWJyZWdpb24gPSBtX2ZpbHRlci5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLm1hcFJlY3Qoc3VicmVnaW9uKTsKLSAgICBhdXRvIGZpbHRlclJlc29sdXRpb24gPSBt
X2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCk7Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUo
ZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAgLy8gU2F2ZSB0aGlzIGJlZm9yZSBjbGlwcGluZyBzbyB3
ZSBjYW4gdXNlIGl0IHRvIG1hcCBsaWdodGluZyBwb2ludHMgZnJvbSB1c2VyIHNwYWNlIHRvIGJ1
ZmZlciBjb29yZGluYXRlcy4KLSAgICBzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihhYnNv
bHV0ZVN1YnJlZ2lvbik7Ci0KLSAgICAvLyBDbGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhl
IGZpbHRlciByZWdpb24uCi0gICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IG1f
ZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNj
YWxlKGZpbHRlclJlc29sdXRpb24pOwotICAgIGFic29sdXRlU3VicmVnaW9uLmludGVyc2VjdChh
YnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbik7Ci0KLSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29s
dXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4gc3VicmVnaW9uOwotfQotCi1GaWx0ZXJFZmZlY3Qq
IEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdAotewotICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG51bWJlciA8IG1faW5wdXRFZmZlY3Rz
LnNpemUoKSk7Ci0gICAgcmV0dXJuIG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7Ci19
Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb2xsZWN0RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3QqZWZm
ZWN0LCBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQotewotICAgIGFs
bEVmZmVjdHMuYWRkKGVmZmVjdCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVtYmVy
T2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkpOwot
ICAgICAgICBjb2xsZWN0RWZmZWN0cyhpbiwgYWxsRWZmZWN0cyk7Ci0gICAgfQotICAgIHJldHVy
biBhbGxFZmZlY3RzLnNpemUoKTsKLX0KLQotdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51
bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRlckVm
ZmVjdCo+IGFsbEVmZmVjdHM7Ci0gICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFsbEVm
ZmVjdHMpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6YXBwbHkoKQotewotICAgIGlmIChoYXNS
ZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZm
ZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCk7Ci0g
ICAgICAgIGluLT5hcHBseSgpOwotICAgICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBDb252ZXJ0IGlucHV0IHJlc3VsdHMgdG8gdGhl
IGN1cnJlbnQgZWZmZWN0J3MgY29sb3Igc3BhY2UuCi0gICAgICAgIHRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UoaW4sIGkpOwotICAgIH0KLQotICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCk7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwg
ZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZl
Y3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNs
aXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAg
YWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZm
ZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmls
dGVyLmZpbHRlclJlc29sdXRpb24oKSk7CisgICAgYXV0byBkcmF3aW5nUmVjdCA9IHRoaXMtPmRy
YXdpbmdSZWN0KGlucHV0cywgb3V0cHV0Lmdlb21ldHJ5KCkpOwogCi0gICAgaWYgKG1fYWJzb2x1
dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyht
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChy
ZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29y
cmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7Ci0gICAgfQotICAgIAotICAgIC8vIEFkZCBwbGF0
Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCi0g
ICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3Jj
ZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpCi17Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHBy
ZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBw
aXhlbHMuCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0g
ICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOwotCi0gICAgLy8g
V2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0g
ICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1
aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNm
KTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkg
NjQuCi0gICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBp
eGVsRGF0YSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNp
eHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBz
aXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0
ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZt
aW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAg
ICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAg
cGl4ZWxEYXRhICs9IDY0OwotICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwp
OwotCi0gICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhl
bEFycmF5TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
aW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBv
dmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9u
ZW50cyBpZiBuZWNlc3NhcnkKLSAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAg
ICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEg
PSAqKHBpeGVsRGF0YSArIDMpOwotICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBh
bHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAg
ICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwot
ICAgICAgICB9Ci0gICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhl
bERhdGE7Ci0gICAgfQotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQotewot
ICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBzdGQ6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1
cnNpdmUoKQotewotICAgIC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhl
IGN1cnJlbnQgZWZmZWN0IGhhcwotICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBl
ZmZlY3QgaXMgaW4gYW4gZXJyb25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAg
ICAgICAgY2xlYXJSZXN1bHQoKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0
cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwot
fQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwg
ZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhp
c3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOwotCi0gICAgaWYgKCFoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCk7Ci0KLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5n
TW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVs
Rm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
UmVzdWx0LmdldCgpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVj
dDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVk
U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRP
dmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAg
ICBhdXRvIHJlc3VsdCA9IG91dHB1dC5jcmVhdGVGaWx0ZXJSZXN1bHQoZHJhd2luZ1JlY3QsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJh
eSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgq
cGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19
Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUo
KSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6
ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
YXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7
Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJy
YXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi12b2lk
IEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0
LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRT
aXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUuc2Nh
bGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0
aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkg
dGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgp
IDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNj
YWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1z
ZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAv
LyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNv
dXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFko
KSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNj
YWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJu
OwogCi0gICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAw
OwotICAgIGlmICh4T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAg
ICAgICB4T3JpZ2luID0gMDsKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBpZiAob3V0cHV0LnJl
bmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgeworICAgICAgICBp
ZiAoYXBwbHlDb3JlSW1hZ2UoaW5wdXRzLCBzb3VyY2VJbWFnZSwgKnJlc3VsdCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2Fs
ZWRSZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQot
ICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdp
biA9IHNjYWxlZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4g
PCAwKSB7Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwot
ICAgIH0KLSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4g
c2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXpl
LmhlaWdodCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKLSAgICBp
bnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50
IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OwotICAgIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2Nh
bGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAgY29uc3QgdWludDhfdCogc291cmNl
UGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRo
KCkpICsgeE9yaWdpbikgKiA0OwotCi0gICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAg
ICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNl
UGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsreU9yaWdpbjsKLSAgICB9Ci19Ci0K
LXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6
ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRl
cyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAg
IHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNp
emUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9C
dWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVz
dC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5
dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9u
LmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29t
cG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VD
b21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCog
ZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAo
c291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBv
bmVudFszXTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxp
bnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBh
bHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2Fz
dDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7
Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0K
LXN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRT
aXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5
dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0g
ICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0
U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdl
X0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBk
ZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93
Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRp
b24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291
cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS52YWx1ZSgpOwotICAgIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOwotICAgIHdoaWxl
IChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29t
cG9uZW50WzNdOwotICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1
IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19j
YXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFsyXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzBdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzFdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKLSAgICAg
ICAgfQotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBz
b3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsK
LSAgICB9Ci0jZW5kaWYKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZm
ZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpCi17Ci0g
ICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRvIHBlcmZvcm0gdGhlIGNvbG9yIHNw
YWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNhbiBkbyBpdCBkaXJlY3RseS4KLQot
ICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUo
KSk7Ci0gICAgZGVzdGluYXRpb25SZWN0LnNjYWxlKDEgLyBtX2ZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
ZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRv
IHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVy
LmZpbHRlclNjYWxlKCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4
KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBi
dWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAg
IHJldHVybiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwg
KmJ1ZmZlciwgZGVzdGluYXRpb25SZWN0LCBwaXhlbEJ1ZmZlci5mb3JtYXQoKS5hbHBoYUZvcm1h
dCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFy
Z2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEFscGhhRm9ybWF0KQotewotICAgIC8v
IEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUgZGlyZWN0bHkgdXNpbmcgUGl4ZWxCdWZmZXJD
b252ZXJzaW9uLgotCi0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNs
YW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKLQotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3
aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xv
ciBzcGFjZSBjb252ZXJzaW9uCi0gICAgYXV0byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVy
LmZpbHRlclNjYWxlKCksIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0g
ICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRy
YXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZm
ZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIAot
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IG91dHB1dEFscGhhRm9ybWF0LCBQaXhlbEZv
cm1hdDo6UkdCQTgsIHRhcmdldENvbG9yU3BhY2UgfTsKLSAgICByZXR1cm4gY29udmVydGVkQnVm
ZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KQotewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVy
UmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxC
dWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1h
Z2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkg
fSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEo
KSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlD
b252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29u
dmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBz
YXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZl
cnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAg
aWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFn
ZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVj
dCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhh
c1Jlc3VsdCgpKTsKLSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20g
dGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAg
ICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29s
b3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rl
c3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xv
clNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1
ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7
Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1
dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBp
bnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29s
b3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBp
bnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5n
QWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlv
biwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8
PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAg
Ly8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhl
bEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAg
ICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNv
bG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNT
RVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENv
bG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAg
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0g
ICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlD
cmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5
UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGlu
YXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3Bh
Y2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0K
LQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQot
ewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgpLCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAg
ICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVz
dWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZl
cjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VC
dWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFj
ZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVy
RWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgp
LCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAg
QVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNp
emUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAg
IExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQg
dHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7
Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwot
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsK
LSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVz
dWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1i
b29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0
aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgot
ICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Ig
c3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVy
IGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JT
cGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLSNl
bHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVk
ZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgZGVzdGluYXRp
b25Db2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNw
YWNlIGFkanVzdG1lbnRzIGludGVybmFsbHkuCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9u
Q29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIGlmICghaGFzUmVzdWx0KCkgfHwgZGVzdGluYXRpb25D
b2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdl
QnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3Jt
IHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVm
ZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2Up
OwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0g
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKICNlbmRpZgotfQogCi1UZXh0U3Ry
ZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBkdW1wIHRoZSBzdWJSZWdpb25zIG9mIHRoZSBmaWx0ZXIgcHJpbWl0
aXZlcyBoZXJlIGxhdGVyLiBUaGlzIGlzbid0Ci0gICAgLy8gcG9zc2libGUgYXQgdGhlIG1vbWVu
dCwgYmVjYXVzZSB3ZSBuZWVkIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zIGZyb20gdGhlIHRh
cmdldCBvYmplY3QuCi0gICAgCi0gICAgaWYgKHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNl
bnRhdGlvblR5cGU6OkRlYnVnZ2luZykgewotICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29w
ZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEgaW1hZ2Ui
LCBtX2FscGhhSW1hZ2UpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm9wZXJhdGluZyBjb2xv
cnNwYWNlIiwgbV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJyZXN1bHQgY29sb3JzcGFjZSIsIG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgIHRzIDw8
ICJcbiIgPDwgaW5kZW50OwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19CisgICAgaWYgKGFwcGx5
U29mdHdhcmUoaW5wdXRzLCBzb3VyY2VJbWFnZSwgKnJlc3VsdCkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQubGVha1JlZigpOwogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlcikKLXsKLSAgICAvLyBVc2UgYSBuZXcgc3RyZWFt
IGJlY2F1c2Ugd2Ugd2FudCBtdWx0aWxpbmUgbW9kZSBmb3IgbG9nZ2luZyBmaWx0ZXJzLgotICAg
IFRleHRTdHJlYW0gZmlsdGVyU3RyZWFtOwotICAgIGZpbHRlci5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKGZpbHRlclN0cmVhbSwgRmlsdGVyRWZmZWN0OjpSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVn
Z2luZyk7Ci0gICAgCi0gICAgcmV0dXJuIHRzIDw8IGZpbHRlclN0cmVhbS5yZWxlYXNlKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCmluZGV4IGJmYTg3N2NhYTNlNWY0MjExZjczOWMxYmUzNzY3MDdkZjZlY2QyYTYuLmZiNWJl
MWE5NDg1YmEwNWRiYzYwNzAwOGNiZmY4NTI0NDQ1NmQyNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAt
MjIsMzggKzIyLDE0IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0
RXh0ZW50LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07
Ci19CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlcjsKLWNsYXNzIEZpbHRlckVm
ZmVjdDsKLWNsYXNzIEltYWdlQnVmZmVyOwotCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVy
RWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwotCi1lbnVtIEZpbHRlckVmZmVjdFR5cGUgewot
ICAgIEZpbHRlckVmZmVjdFR5cGVVbmtub3duLAotICAgIEZpbHRlckVmZmVjdFR5cGVJbWFnZSwK
LSAgICBGaWx0ZXJFZmZlY3RUeXBlVGlsZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5w
dXQKLX07CitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKIAotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVi
bGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJs
aWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgogICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4
X3QgewogICAgICAgICBCbGVuZCwKQEAgLTY3LDcgKzQzLDYgQEAgcHVibGljOgogICAgICAgICBG
bG9vZCwKICAgICAgICAgR2F1c3NpYW5CbHVyLAogICAgICAgICBJbWFnZSwKLSAgICAgICAgTGln
aHRpbmcsCiAgICAgICAgIE1lcmdlLAogICAgICAgICBNb3JwaG9sb2d5LAogICAgICAgICBPZmZz
ZXQsCkBAIC03NywxODIgKzUyLDIyIEBAIHB1YmxpYzoKICAgICAgICAgU291cmNlQWxwaGEsCiAg
ICAgICAgIFNvdXJjZUdyYXBoaWMKICAgICB9OwotICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdCgp
OwotCi0gICAgdm9pZCBjbGVhclJlc3VsdCgpOwotICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJz
aXZlKCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwg
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50
UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9w
dCk7Ci0gICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0K
LSAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKLSAgICB1bnNp
Z25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3Rz
LnNpemUoKTsgfQotICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25z
dDsKLSAgICAKLSAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVja3MsIGlmIHRo
ZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBkb25lIGJ5IEZpbHRlckVmZmVjdC4KLSAgICAgICAg
cmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Owot
ICAgIH0KLQotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKLSAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgCi0gICAgLy8gUmVjdXJzZXMgb24gaW5w
dXRzLgotICAgIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsK
LQotICAgIC8vIFNvbGlkIGJsYWNrIGltYWdlIHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVlcy4K
LSAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFJbWFnZTsgfQot
ICAgIHZvaWQgc2V0SXNBbHBoYUltYWdlKGJvb2wgYWxwaGFJbWFnZSkgeyBtX2FscGhhSW1hZ2Ug
PSBhbHBoYUltYWdlOyB9Ci0KLSAgICBJbnRSZWN0IGFic29sdXRlUGFpbnRSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9hYnNvbHV0ZVBhaW50UmVjdDsgfQotICAgIHZvaWQgc2V0QWJzb2x1dGVQYWlu
dFJlY3QoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50
UmVjdCA9IGFic29sdXRlUGFpbnRSZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZm
ZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0
ID0gbWF4RWZmZWN0UmVjdDsgfSAKLQotICAgIHZvaWQgYXBwbHkoKTsKLQotICAgIC8vIENvcnJl
Y3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBm
aWx0ZXIgb3BlcmF0aW9uLgotICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZh
bGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0Lgot
ICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRv
IHBlcmZvcm0gY29ycmVjdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKTsKLQotICAgIHZpcnR1YWwgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBl
KCkgY29uc3QgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVVua25vd247IH0KLQotICAgIHZpcnR1
YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gSW50T3V0c2V0cygpOyB9Ci0K
LSAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2lu
ZyB9OwotICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJlc2VudGF0aW9uVHlw
ZTo6VGVzdE91dHB1dCkgY29uc3Q7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBh
cmUgU1ZHIHNwZWNpZmljIGFuZCB3aWxsIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUuCi0gICAgLy8gU2VlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDU2MTQuCi0gICAgYm9vbCBoYXNYKCkgY29uc3QgeyByZXR1cm4gbV9oYXNYOyB9
Ci0gICAgdm9pZCBzZXRIYXNYKGJvb2wgdmFsdWUpIHsgbV9oYXNYID0gdmFsdWU7IH0KLQotICAg
IGJvb2wgaGFzWSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWTsgfQotICAgIHZvaWQgc2V0SGFzWShi
b29sIHZhbHVlKSB7IG1faGFzWSA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1dpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNXaWR0aDsgfQotICAgIHZvaWQgc2V0SGFzV2lkdGgoYm9vbCB2YWx1
ZSkgeyBtX2hhc1dpZHRoID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNIZWlnaHQ7IH0KLSAgICB2b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVl
KSB7IG1faGFzSGVpZ2h0ID0gdmFsdWU7IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsg
fQotICAgIHZvaWQgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0g
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRh
cmllcygpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQotICAgIHZvaWQgc2V0
RWZmZWN0Qm91bmRhcmllcyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdEJvdW5kYXJpZXMpIHsgbV9l
ZmZlY3RCb3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllczsgfQotICAgIAotICAgIHZvaWQgc2V0
VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fYWJzb2x1
dGVVbmNsaXBwZWRTdWJyZWdpb24gPSByOyB9Ci0gICAgCi0gICAgRmxvYXRQb2ludCBtYXBQb2lu
dEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50KSBjb25zdDsKLSAgICAKLSAgICBUeXBl
IGZpbHRlckVmZmVjdENsYXNzVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Q2xh
c3NUeXBlOyB9Ci0KLSAgICBGaWx0ZXImIGZpbHRlcigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0g
ICAgY29uc3QgRmlsdGVyJiBmaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcjsgfQotCi0g
ICAgYm9vbCBjbGlwc1RvQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwc1RvQm91bmRzOyB9
Ci0gICAgdm9pZCBzZXRDbGlwc1RvQm91bmRzKGJvb2wgdmFsdWUpIHsgbV9jbGlwc1RvQm91bmRz
ID0gdmFsdWU7IH0KLQotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNl
OyB9Ci0gICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXN1bHRDb2xvclNwYWNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNl
KSB7IG1fcmVzdWx0Q29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkg
eyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9
Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYpOwotICAgIAotICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9h
dHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQotICAgIHsKLSAgICAgICAgVmVjdG9yPGZs
b2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRW
YWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKLSAgICAgICAgcmV0dXJuIG5v
cm1hbGl6ZWRWYWx1ZXM7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KEZp
bHRlciYsIFR5cGUpOwotICAgIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0ID0gMDsKLQotICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLQotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIg
d2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCi0g
ICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFs
cGhhXS4KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMo
KSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAvLyBJZiBhIHByZS1tdWx0aXBsaWVkIGltYWdlLCBj
aGVjayBldmVyeSBwaXhlbCBmb3IgdmFsaWRpdHkgYW5kIGNvcnJlY3QgaWYgbmVjZXNzYXJ5Lgot
ICAgIHZvaWQgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLQotICAgIHZvaWQgY2xp
cEFic29sdXRlUGFpbnRSZWN0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsKLQotICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VCdWZm
ZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZv
aWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYsIFBpeGVsQnVmZmVyJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgSW50
UmVjdCYpOwotICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7Ci0gICAgc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24pOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQ
aXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBQaXhl
bEJ1ZmZlciYpOwogICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRyYXdp
bmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYpIGNvbnN0OwogCi0gICAgRmlsdGVyJiBtX2ZpbHRlcjsKLSAgICBGaWx0ZXJFZmZlY3RW
ZWN0b3IgbV9pbnB1dEVmZmVjdHM7Ci0KLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VC
dWZmZXJSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAg
ICAKLSAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZH
IHRoaXMgaXMgdGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBz
cGFjZS4KLSAgICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmln
Z2VyIHRoYW4gbV9tYXhFZmZlY3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7
Ci0gICAgCi0gICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3Jk
aW5nIHRvIHRoZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMu
Ci0gICAgLy8gVGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uOwotCi0gICAgLy8geCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0
dWFsIFNWR0ZFKkVsZW1lbnQuIElzIG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBv
ZiB0aGUKLSAgICAvLyBmaWx0ZXIgcHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9h
dFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOworICAgIHZpcnR1YWwgYm9vbCBhcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0ID0gMDsKICAgICAKLSAgICAvLyBmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24gbWFwcGVkIHRvIGFic29sdXRlIGNvb3JkaW5hdGVzIGJlZm9yZSBjbGlwcGlu
Zy4KLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbjsKLQotICAgIGJv
b2wgbV9hbHBoYUltYWdlIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzWCB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2hhc1kgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNXaWR0aCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2hhc0hlaWdodCB7IGZhbHNlIH07Ci0KLSAgICAvLyBTaG91bGQgdGhlIGVm
ZmVjdCBjbGlwIHRvIGl0cyBwcmltaXRpdmUgcmVnaW9uLCBvciBleHBhbmQgdG8gdXNlIHRoZSBj
b21iaW5lZCByZWdpb24gb2YgaXRzIGlucHV0cy4KLSAgICBib29sIG1fY2xpcHNUb0JvdW5kcyB7
IHRydWUgfTsKLQotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JH
QikKLSAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgfTsKLSNlbHNlCi0gICAgRGVzdGluYXRp
b25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpIH07CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmlydHVhbCBib29sIGFwcGx5
Q29yZUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVy
UmVzdWx0JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgotICAgIERlc3RpbmF0aW9u
Q29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7CisK
KyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5UGxhdGZvcm0oRmlsdGVyT3V0cHV0JiwgY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Q7
CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZmZWN0Jik7Cit1c2luZyBGaWx0ZXJFZmZlY3RWZWN0
b3IgPSBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+OwordXNpbmcgRmlsdGVyRWZmZWN0c0lucHV0
cyA9IEhhc2hNYXA8UmVmPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYTg1NWNkYjk2MzE3YjgyZGUz
NTY3ZmMzMWU1YjllOWE5ZWM2MDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgot
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgot
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgot
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3RSZW5kZXJlci5oIgotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0jaW5jbHVkZSAiRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gRmlsdGVyRWZmZWN0UmVu
ZGVyZXI6OnRyeUNyZWF0ZShib29sIGFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCwg
RmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQotewotI2lmIFVTRShDT1JFX0lNQUdFKQotICAgIGlm
IChhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKGxhc3RFZmZlY3QpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oYWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKTsKLSAg
ICBVTlVTRURfUEFSQU0obGFzdEVmZmVjdCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotCi19IC8vIG5hbXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTI0NzM2MWY1M2IzYzA5ZWNiNTcx
MzIyYjc1YTc1NzNlOWNjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0q
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICAKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiB0cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7Ci0gICAg
dmlydHVhbCBib29sIGhhc1Jlc3VsdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEltYWdlQnVm
ZmVyKiBvdXRwdXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3Qo
Y29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJl
c3VsdCgpID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0g
ZGVmYXVsdDsKLSAgICAKLXByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0g
ZGVmYXVsdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZl
Y3QmKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmY2ZjFiMzNiYWVkN2RmMDhmMDQ1MmM2YzRhYjRhOTdjNWRjYzMwYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRnVuY3Rpb24uaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVy
UmVwcmVzZW50YXRpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNl
IFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVyT3V0cHV0OworCitjbGFzcyBGaWx0ZXJG
dW5jdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckZ1bmN0aW9uPiB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIElu
dE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQorCisgICAgdmlydHVhbCBG
aWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QgPSAwOworICAgIAorICAgIHZpcnR1
YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uID0gRmlsdGVyUmVwcmVzZW50YXRpb246OlRlc3RPdXRw
dXQpIGNvbnN0ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9t
ZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTMyN2NjMmY0YjNlZjgxNDE3NjU0MWQ5M2NiNjE2MGNkMzc0
ZGY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmls
dGVyR2VvbWV0cnk6OkZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkKKyAgICA6IG1fZmlsdGVyUmVnaW9u
KGZpbHRlclJlZ2lvbikKKyAgICAsIG1fc291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCkK
K3sKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjptYXhEcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0KSBjb25zdAor
eworICAgIHJldHVybiBkcmF3aW5nUmVjdDsKKy8vICAgICAgICBhdXRvIG1heERyYXdpbmdSZWN0
ID0gZHJhd2luZ1JlY3Q7CisvLyAgICAgICAgbWF4RHJhd2luZ1JlY3QuaW50ZXJzZWN0KG1heFBy
aW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpKTsKKy8vICAgICAgICByZXR1cm4gbWF4RHJhd2luZ1Jl
Y3Q7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJHZW9tZXRyeTo6cHJpbWl0aXZlU3VicmVnaW9uKGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdAoreworICAgIGlmIChpbnB1dHMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmlsdGVyUmVnaW9uKCk7CisKKyAgICBGbG9hdFJl
Y3Qgc3VicmVnaW9uOworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIHN1
YnJlZ2lvbi51bml0ZShpbnB1dC0+cHJpbWl0aXZlU3VicmVnaW9uKCkpOworCisgICAgcmV0dXJu
IHN1YnJlZ2lvbjsKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjptYXhQcmltaXRpdmVT
dWJyZWdpb24oY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0Cit7CisgICAg
RmxvYXRSZWN0IHN1YnJlZ2lvbiA9IHByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpOworICAgIHN1
YnJlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyUmVnaW9uKCkpOworICAgIHJldHVybiBzdWJyZWdpb247
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgRmlsdGVyR2VvbWV0cnk6OmVu
Y29kZShFbmNvZGVyJikgY29uc3QKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4g
c3RkOjpvcHRpb25hbDxzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+PiBGaWx0ZXJHZW9t
ZXRyeTo6ZGVjb2RlKERlY29kZXImKQoreworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzMzMzM4OWE2ZmZm
ZDQzMTZiOGFmODUyNDc0YWJiNmMwNGE3OWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeSB7CitwdWJsaWM6CisgICAgRmlsdGVyR2Vv
bWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0KTsKKyAgICB2aXJ0dWFsIH5GaWx0ZXJHZW9tZXRyeSgpID0gZGVmYXVsdDsK
KworICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJl
Z2lvbjsgfQorICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZUltYWdlUmVjdDsgfQorCisgICAgdmlydHVhbCBGbG9hdFJlY3QgcHJpbWl0aXZlU3Vi
cmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEZsb2F0UmVjdCB0cmFuc2Zvcm1Ub0Fic29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpIGNvbnN0IHsgcmV0dXJuIHJlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBtYXhEcmF3aW5nUmVj
dChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0
KSBjb25zdDsKKyAgICBGbG9hdFJlY3QgbWF4UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRl
clJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2Vv
bWV0cnk+PiBkZWNvZGUoRGVjb2RlciYpOworCitwcm90ZWN0ZWQ6CisgICAgRmxvYXRSZWN0IG1f
ZmlsdGVyUmVnaW9uOworICAgIEZsb2F0UmVjdCBtX3NvdXJjZUltYWdlUmVjdDsKK307CisgICAg
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNk
NzdlYTVmMDUxZTg0NWE5MzFlYmFjMmJhZmQ5MWY5YjM2YTZjMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNw
cApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIK
KworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQoc3Rk
Ojp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5LCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUpCisgICAgOiBtX2dlb21ldHJ5KFdURk1vdmUoZ2VvbWV0cnkpKQorICAgICwg
bV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCit7Cit9CisKK1JlZlB0cjxGaWx0ZXJSZXN1
bHQ+IEZpbHRlck91dHB1dDo6Y3JlYXRlRmlsdGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgZHJh
d2luZ1JlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHJldHVy
biBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZSgqbV9nZW9tZXRyeSwgZHJhd2luZ1JlY3QsIG1fcmVuZGVy
aW5nTW9kZSwgMSwgY29sb3JTcGFjZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3V0cHV0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxZThjZmYxNzNiMDRlOTkzOTJhYjI3ZTE0MjJhY2I0YmY1
MjM5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck91dHB1dC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKK2NsYXNzIEZpbHRlclJlc3VsdDsK
K2NsYXNzIEZpbHRlckZ1bmN0aW9uOworCitjbGFzcyBGaWx0ZXJPdXRwdXQgeworcHVibGljOgor
ICAgIHVzaW5nIFJlc3VsdHMgPSBIYXNoTWFwPFJlZjxjb25zdCBGaWx0ZXJGdW5jdGlvbj4sIFJl
ZjxGaWx0ZXJSZXN1bHQ+PjsKKworICAgIEZpbHRlck91dHB1dChzdGQ6OnVuaXF1ZV9wdHI8Rmls
dGVyR2VvbWV0cnk+JiYsIFJlbmRlcmluZ01vZGUpOworCisgICAgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KCkgeyByZXR1cm4gKm1fZ2VvbWV0cnk7IH0KKyAgICBSZXN1bHRzJiByZXN1bHRzKCkg
eyByZXR1cm4gbV9yZXN1bHRzOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisKKyAgICBSZWZQdHI8RmlsdGVyUmVz
dWx0PiBjcmVhdGVGaWx0ZXJSZXN1bHQoY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgRGVz
dGluYXRpb25Db2xvclNwYWNlKTsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmls
dGVyR2VvbWV0cnk+IG1fZ2VvbWV0cnk7CisgICAgUmVzdWx0cyBtX3Jlc3VsdHM7CisgICAgUmVu
ZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJSZWZlcmVuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDNhNWFiNzRjMDk0MGVmOGFhZTJmOWNl
ZTliNzVlMmYxZDA2NWFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZWZlcmVuY2UuaApAQCAtMCwwICsxLDM0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlcjsKKwordXNpbmcgRmlsdGVy
UmVmZXJlbmNlID0gUmVmPEZpbHRlcj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVw
cmVzZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyUmVwcmVzZW50YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZGJmZjdkODA0N2NlZjllZjYzYTM2
ZWNjMzVlNWU5YjIwMTFjZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oCkBAIC0wLDAgKzEs
MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEZpbHRlclJlcHJl
c2VudGF0aW9uIDogdWludDhfdCB7CisgICAgVGVzdE91dHB1dCwKKyAgICBEZWJ1Z2dpbmcKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
ZWRlMjJlZGI5NzViMGFiMDBmZTlhZDYzMDQ4N2Q4ZjZkNGUyZTg5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQu
Y3BwCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQu
aCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0
U29mdHdhcmUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFH
RSkKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIKKyNlbmRpZgorCisjaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2luY2x1ZGUgPGFybV9uZW9uLmg+CisjZW5kaWYKKwor
I2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEZpbHRlclJlc3VsdD4gRmls
dGVyUmVzdWx0OjpjcmVhdGUoY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBG
bG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7Cisg
ICAgaWYgKGRyYXdpbmdSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhnZW9tZXRyeS50cmFu
c2Zvcm1Ub0Fic29sdXRlUmVjdChkcmF3aW5nUmVjdCkuc2l6ZSgpKSk7CisjaWYgVVNFKENPUkVf
SU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRlclJlc3VsdENvcmVJbWFnZShn
ZW9tZXRyeSwgZHJhd2luZ1JlY3QsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSkpOworI2VuZGlmCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVyUmVzdWx0
U29mdHdhcmUoZ2VvbWV0cnksIGRyYXdpbmdSZWN0LCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UpKTsKK30KKworRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQoY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVz
dGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2dlb21ldHJ5KGdlb21ldHJ5
KQorICAgICwgbV9kcmF3aW5nUmVjdChkcmF3aW5nUmVjdCkKKyAgICAsIG1fcmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxl
KQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9CisKK0Zsb2F0UmVjdCBGaWx0
ZXJSZXN1bHQ6OmFic29sdXRlRHJhd2luZ1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2dl
b21ldHJ5LnRyYW5zZm9ybVRvQWJzb2x1dGVSZWN0KG1fZHJhd2luZ1JlY3QpOworfQorCitzdGF0
aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlu
cHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBp
bnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMu
d2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhl
aWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsK
KyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRh
KCkpOworCisgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVu
dCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9u
ZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBk
ZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChz
b3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9u
ZW50WzNdOworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFs
cGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0
PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsK
KyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKwor
c3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNp
emUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0
ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAg
ICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRT
aXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRl
c3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dC
eXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlv
bi5kYXRhKCkpOworCisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywg
JmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNl
Q29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3Vy
Y2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdo
aWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNl
Q29tcG9uZW50WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICog
MjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRp
Y19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBv
bmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAg
ICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAg
ICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0g
NDsKKyAgICB9CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRl
clJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhh
Rm9ybWF0KQoreworICAgIHJldHVybiBhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQgPyBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyIDogbV9w
cmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9CisKK1BpeGVsQnVmZmVyKiBGaWx0ZXJSZXN1bHQ6
OnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAg
YXV0byYgcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KTsKKyAg
ICBpZiAocGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsK
KworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1h
dDo6UkdCQTgsIG1fY29sb3JTcGFjZSB9OworICAgIGF1dG8gbG9naWNhbFNpemUgPSBhYnNvbHV0
ZURyYXdpbmdSZWN0KCkuc2l6ZSgpOworCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFn
ZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+
Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIEludFNpemUobG9naWNhbFNpemUp
IH0pOworICAgICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisgICAgCisg
ICAgSW50U2l6ZSBzY2FsZWRTaXplKGxvZ2ljYWxTaXplKTsKKyAgICBBU1NFUlQoIUltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CisgICAgc2NhbGVkU2l6ZS5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBwaXhlbEJ1ZmZlciA9IFBpeGVsQnVmZmVyOjp0
cnlDcmVhdGUoZm9ybWF0LCBzY2FsZWRTaXplKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgIGNvcHlQcmVtdWx0
aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXpl
KTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKHBp
eGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkt
PmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisKKyAgICByZXR1cm4g
JnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmls
dGVyUmVzdWx0OjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9y
bWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkp
OworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUp
KTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGF1dG8g
Y2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAg
IGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIAorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb3B5UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVy
LCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIHBpeGVsQnVmZmVy
OworfQorCitib29sIEZpbHRlclJlc3VsdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VD
b252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNl
KSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMg
d2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNp
b24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNv
bG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAvLyBBTkQgMikgdGhlIGZp
bHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVybiBjb2xvclNwYWNlICYm
IG1fY29sb3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNlCisgICAgLy8gQWRkaXRpb25hbCBj
b2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCisgICAgVU5VU0VE
X1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lk
IEZpbHRlclJlc3VsdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKKyAgICBzY2FsZWRSZWN0
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXpl
KGFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlv
biB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNv
dXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8
fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVz
dGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJs
eSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4K
KyAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAw
IHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAg
IGlmICh4T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4
T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKKyAg
ICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gc2Nh
bGVkUGFpbnRTaXplLndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgp
OworICAgIGludCB5RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlE
ZXN0ID0gLXlPcmlnaW47CisgICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVu
ZCA9IHNjYWxlZFJlY3QubWF4WSgpOworICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpKQorICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOworCisgICAg
aW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2Fu
bGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0g
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4
ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSAr
IHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0
YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0
OworCisgICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5h
dGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwg
Kz0gZGVzdGluYXRpb25TY2FubGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2Nh
bmxpbmU7CisgICAgICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEZpbHRlclJlc3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25z
dCBJbnRSZWN0JiByZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QK
K3sKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
cmVjdC5zaXplKCkpOworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3Jy
ZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252
ZXJzaW9uCisgICAgYXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghY29udmVy
dGVkSW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gQ29s
b3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20g
b25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCisgICAgY29udmVydGVkSW1hZ2VCdWZmZXItPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9y
U3BhY2UgfTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVy
KGZvcm1hdCwgcmVjdCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlclJl
c3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxC
dWZmZXIuc2l6ZSgpKTsKKyAgICByZWN0LnNjYWxlKDEgLyBtX3Jlc29sdXRpb25TY2FsZSk7Cisg
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Qu
c2l6ZSgpKTsKKworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWlu
ZyBQaXhlbEJ1ZmZlcgorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25T
Y2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+
cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0
ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNl
KTsKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBjb2xvclNwYWNlKQoreworICAgIGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4
aXN0cyhhbHBoYUZvcm1hdCkgPyAmcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFs
dWUoKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChy
ZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAg
ICAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVy
LgorICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3Rz
KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJ
bnRTaXplKGFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkpIH07CisgICAgICAgICAgICAgICAg
aWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAg
ICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRl
c3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBwaXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVy
KGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0g
Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9y
U3BhY2UpKQorICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXIt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY29weUltYWdlQnl0ZXMocGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNy
Y1JlY3QpOworfQorCit2b2lkIEZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcigpCit7CisgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3Vs
dHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFt
X3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhD
bGFtcGVkQXJyYXkmIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0
YSgpOworICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGlu
dCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11
c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFT
U0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJ
TlNJQ1MpCisgICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhf
dCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7Cisg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0Lgor
ICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERh
dGEpOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVu
UGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVl
blBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBp
eGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91
OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAg
ICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVs
RGF0YSArPSA2NDsKKyAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKwor
ICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJh
eUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBu
dW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBl
YWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMg
aWYgbmVjZXNzYXJ5CisgICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8g
QWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihw
aXhlbERhdGEgKyAzKTsKKyAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEs
IGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAg
ICAgICAgICAgKnBpeGVsRGF0YSA9IGE7CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRh
OworICAgIH0KK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8g
Q0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNF
RF9QQVJBTShjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9jb2xv
clNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRo
aXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRp
bmcKKyAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59
bXVsdGlwbGllZCBhcnJheXMuCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFn
ZUJ1ZmZlcigpKQorICAgICAgICBpbWFnZUJ1ZmZlci0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX2Nv
bG9yU3BhY2UsIGNvbG9yU3BhY2UpOworCisgICAgbV9jb2xvclNwYWNlID0gY29sb3JTcGFjZTsK
KyAgICBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworICAgIG1f
cHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworI2VuZGlmCit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1YjlkYTkxNTIz
YTY4OGM0MmY2M2QyNWRhN2MzOGM5Y2UwMzMzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCkBAIC0wLDAg
KzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVsQnVm
ZmVyOworCitjbGFzcyBGaWx0ZXJSZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJSZXN1
bHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlclJlc3VsdD4gY3JlYXRlKGNv
bnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgUmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwor
CisgICAgdmlydHVhbCB+RmlsdGVyUmVzdWx0KCkgPSBkZWZhdWx0OworICAgIAorICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ1JlY3Q7IH0KKyAgICBG
bG9hdFJlY3QgYWJzb2x1dGVEcmF3aW5nUmVjdCgpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IHBy
aW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9
CisgICAgCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9yZW5kZXJpbmdNb2RlOyB9CisgICAgCisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KKyAgICB2b2lkIHNldElzQWxwaGFJbWFnZShib29sIGFs
cGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFnZTsgfQorCisgICAgdmlydHVhbCBS
ZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgPSAwOworICAgIHZpcnR1
YWwgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgPSAwOworCisgICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7
CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwor
CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0
IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51
bGxvcHQpOworICAgIAorICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigp
OworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7
CisKK3Byb3RlY3RlZDoKKyAgICBGaWx0ZXJSZXN1bHQoY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBj
b25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKKyAgICBib29sIHJlcXVpcmVzUGl4
ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4pIGNvbnN0OworICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVy
dGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25z
dCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisKKyAg
ICBGbG9hdFJlY3QgbV9wcmltaXRpdmVTdWJyZWdpb247CisgICAgYm9vbCBtX2FscGhhSW1hZ2Ug
eyBmYWxzZSB9OworICAgIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBtX2dlb21ldHJ5OworCisgICAg
RmxvYXRSZWN0IG1fZHJhd2luZ1JlY3Q7CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01v
ZGU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgRGVzdGluYXRpb25Db2xvclNw
YWNlIG1fY29sb3JTcGFjZTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5w
cmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
bV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9OworCit1c2luZyBGaWx0ZXJSZXN1bHRWZWN0
b3IgPSBWZWN0b3I8UmVmPEZpbHRlclJlc3VsdD4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAppbmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2YTc1
MDM4NzkxMjhmNTRiNDRiLi40YmM2YmM3MWM4NWRmYjFhZTM5MWRlYjI0M2RjODE0NTc1ZGIwYzFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM2LDEyICszNiwxMiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0
YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQg
UG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQ
YWludGluZ0RhdGEmKQogewotICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0
Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkp
OwotICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNl
UG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBwZWRa
ID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3Bh
Y2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3Np
dGlvbi55KCkgfSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9i
dWZmZXJQb3NpdGlvbi54KCkpOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJF
ZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54
eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3Vz
ZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2lu
dCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsg
bV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2Vy
U3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVk
Wi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRl
ZExpZ2h0aW5nRGF0YSBQb2ludExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkw
OTBhZDZjZjNhMy4uMWUwNjlmOTI2YTgwM2ZjYzJjMTQ2OTZjZmFlNmIyNTUzNTEwODlkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIw
LDE5ICsyMSwxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNvdXJjZUFscGhh
LmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVJlZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZShGaWx0ZXJFZmZl
Y3QmIHNvdXJjZUVmZmVjdCkKK1JlZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZSgp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoKSk7CiB9CiAKIGNvbnN0IEF0
b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKQEAgLTQxLDM5ICszOSwyMSBAQCBj
b25zdCBBdG9tU3RyaW5nJiBTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpCiAgICAgcmV0dXJuIHNf
ZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQorRmlsdGVyUmVzdWx0KiBTb3VyY2VBbHBoYTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBv
dXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsK
LSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci19Ci0KLXZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAg
ICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0
JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBBU1NFUlQoIXN0
YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBJ
bWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1
dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKIAotICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFn
ZVJlY3QsIENvbG9yOjpibGFjayk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25J
bik7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwog
fQogCi1UZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUFscGhhXVxu
IjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJF
ZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3QuZmls
dGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uo
c291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3RzKCku
YXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4uY2Nk
MWRiZjRmZWVjNTBlNWRhN2Y5OTUxZThhN2IzZGM2NTNhNmIwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTcsOCArMTgsNyBAQAogICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0j
ZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCiAKQEAgLTI2LDIxICsyNiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAg
ICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CisgICAgc3Rh
dGljIFJlZjxTb3VyY2VBbHBoYT4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0
cmluZyYgZWZmZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUFscGhh
KEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQor
ICAgIHVzaW5nIEZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0OwogCiAgICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0Jiwg
RmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25z
dCBvdmVycmlkZTsKKworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBj
b25zdCBvdmVycmlkZTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7CiB9OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNvdXJjZUFscGhh
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IDg4YTM2YTQxMDI2YmQzYTU4NTQ0NzgyMDI3NGMx
MTA3ZDc4MzkyZTkuLjRlMTdkZWZlODQyYjBiZjlhZDJjODExNTcyNTk1ZDYyZTE4MTVhOWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjAsMTggKzIxLDE2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNl
R3JhcGhpYy5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVm
PFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1Jl
ZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKQogewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU291cmNlR3JhcGhpYygpKTsKIH0KIAogY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSgpCkBAIC00MCwyNyArMzksMjAgQEAgY29uc3QgQXRvbVN0cmluZyYg
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCiAgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0K
IAotdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9h
dFJlY3QgU291cmNlR3JhcGhpYzo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRl
ci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBwYWludFJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclJl
c29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsK
LSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwor
ICAgIHJldHVybiBnZW9tZXRyeS5zb3VyY2VJbWFnZVJlY3QoKTsKIH0KIAotdm9pZCBTb3VyY2VH
cmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBTb3VyY2VHcmFw
aGljOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhp
cy0+ZmlsdGVyKCk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQo
eyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFn
ZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlc3VsdEltYWdlLT5j
b250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAg
cmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IH0sIHNvdXJjZUltYWdlKTsKIH0KIAotVGV4
dFN0cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNlR3JhcGhp
Yzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbU291cmNlR3JhcGhpY11cbiI7
CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCAzMGNkNTRmMjQ1M2JiYThhMzc3
NjMyMTMyOGVmMjEwNmI3ZmNhNWJmLi4xMzVjN2MwNzQyNzdjMWM4YWY2MDU3YTljZjk1Mjk0OWIz
NTU1Njk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTE4LDQxICsxOSwzNCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNl
R3JhcGhpY19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2lu
Y2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdy
YXBoaWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRp
YyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8U291
cmNlR3JhcGhpYz4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZm
ZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIFNvdXJjZUdyYXBoaWMoRmlsdGVyJiBmaWx0ZXIp
Ci0gICAgICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6U291cmNlR3JhcGhpYykKLSAg
ICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOwotICAgIH0KKyAgICB1c2luZyBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdDsK
IAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291
cmNlR3JhcGhpYyI7IH0KIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZm
ZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJ
bnB1dDsgfQotfTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRl
clJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKLX0gLy9uYW1lc3BhY2UgV2ViQ29yZQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdl
LCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19CRUdJTihXZWJDb3JlOjpTb3VyY2VHcmFwaGljKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRl
ckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNl
R3JhcGhpYzsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorI2lmIFVTRShDT1JFX0lN
QUdFKQorICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBp
bnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3Zl
cnJpZGU7CisjZW5kaWYKIAorICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7Cit9OwogCi0jZW5kaWYgLy8gU291cmNlR3JhcGhpY19oCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKaW5kZXggNzE2MDdhYjAwZmY5ZDZhNmQwMTY5MWQ5
YmJiODU1M2QxZjM0OGQwMC4uZDFiZWMxMjAyMDZhNTM2ZTEwYjEwYmYyYzExMzBmNGYzNDJiYmEx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
cG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcApAQCAtNDEsMzYgKzQxLDM2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIC8vIGFjY29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNz
aW9uIHRlc3RzCiBzdGF0aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7
CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVm
ZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgU3Bv
dExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFw
UG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0g
ICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3Np
dGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBm
aWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBv
c2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9u
LnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZl
clBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9
IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOwotICAgIHBhaW50aW5n
RGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXplKCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdD
b25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7
Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xk
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1p
dGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAg
ICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAg
ICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29u
ZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBj
b3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRp
bmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50
aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0gICAgLy8gT3B0aW1pemF0aW9uIGZvciBjb21tb24g
c3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAgICBpZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1f
c3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJF
eHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAyOworLy8gICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
bV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBw
b2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBi
eSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJv
bVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFj
ZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZl
clBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisvLwor
Ly8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQg
LSBtX3VzZXJTcGFjZVBvc2l0aW9uOworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rv
ci5ub3JtYWxpemUoKTsKKy8vCisvLyAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKKy8v
ICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsKKy8vICAgICAgICBw
YWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IC1hbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0g
ZWxzZSB7CisvLyAgICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29u
ZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA8IDAuMGYpCisvLyAgICAg
ICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAg
IGlmIChsaW1pdGluZ0NvbmVBbmdsZSA+IDkwLjBmKQorLy8gICAgICAgICAgICBsaW1pdGluZ0Nv
bmVBbmdsZSA9IDkwLjBmOworLy8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQg
PSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKKy8vICAgICAgICBw
YWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQg
LSBhbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0KKy8vCisvLyAgICAvLyBPcHRpbWl6YXRpb24g
Zm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZhbHVlcworLy8gICAgaWYgKCFtX3NwZWN1bGFy
RXhwb25lbnQpCisvLyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOwor
Ly8gICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEuMGYpCisvLyAgICAgICAgcGFp
bnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAxOworLy8gICAgZWxzZSAvLyBJdCBpcyBuZWl0
aGVyIDAuMGYgbm9yIDEuMGYKKy8vICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVu
dCA9IDI7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBTcG90TGlnaHRT
b3VyY2U6OmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdh
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUJsZW5kU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2NjNlZjFhNGU4YjkyNWQ3ZDEyY2Ni
ZDkwOWJkYzAyOTM2MDZjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQmxlbmQuaCIKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmQ6OmFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVy
KiwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMik7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW4y
ID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVm
ZmVyKCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlcjIgPSBpbjIuaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAo
IXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKy8vICAgIEdyYXBoaWNzQ29u
dGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisvLyAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworLy8gICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6
ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKworICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hOWI0OTkwMWU3YTMyZWM4ODVhMDQ2YjRkM2VmMzBjNDgzNmQyMzU3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8
QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitpbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1
ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgZmxv
YXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7Cisg
ICAgZmxvYXQgYSA9IGFscGhhOworCisgICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFs
dWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0
XSAqIDI1NTsKKyAgICBncmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyAr
IHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OworICAg
IGJsdWUgICAgPSB2YWx1ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAq
IGIgKyB2YWx1ZXNbMTNdICogYSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9IHZh
bHVlc1sxNV0gKiByICsgdmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sx
OF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1NTsKK30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRI
dWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxv
YXQqIGNvbXBvbmVudHMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3Jl
ZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisKKyAgICByZWQgICAgID0gciAqIGNvbXBvbmVudHNb
MF0gKyBnICogY29tcG9uZW50c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOworICAgIGdyZWVuICAg
PSByICogY29tcG9uZW50c1szXSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVudHNb
NV07CisgICAgYmx1ZSAgICA9IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNbN10g
KyBiICogY29tcG9uZW50c1s4XTsKK30KKworLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0aGUg
bHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2b2lk
IGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYg
YWxwaGEpCit7CisgICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAu
MDcyMSAqIGJsdWU7CisgICAgcmVkID0gMDsKKyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9IDA7
Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0
ZXJUeXBlPgorYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBw
aXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNb
OV0sIEludFNpemUgYnVmZmVyU2l6ZSkKK3sKKyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgo
KSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOworICAgIAorICAgIGlmIChmaWx0ZXJUeXBlID09
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4TXVs
dGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxh
c3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8gaXMg
bm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2YWx1
ZXNbNF0gfHwgdmFsdWVzWzldIHx8IHZhbHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAy
NTY7CisgICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOworCisgICAgdkltYWdl
X0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIHNy
Yy5oZWlnaHQgPSBidWZmZXJTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZl
clNpemUud2lkdGgoKSAqIDQ7CisgICAgc3JjLmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJbWFn
ZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAg
IGRlc3QuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0g
YnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAgICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAgc3dp
dGNoIChmaWx0ZXJUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7
CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSks
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRp
dmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
MTVdICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKworICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29y
KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbMTJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNv
cikpLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgm
c3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9G
bGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewor
ICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNv
cikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNb
Nl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBk
aXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoY29tcG9uZW50c1syXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29y
KSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICBkaXZpc29yLAorICAgICAgICB9OworICAgICAgICB2
SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29y
LCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7CisgICAg
ICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZigwLjcxNTQgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZigwLjA3MjEgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAgIHZJ
bWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3Is
IG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTxD
b2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KK3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRB
cnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1
ZmZlclNpemUpCit7CisgICAgZmxvYXQgY29tcG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0ZXJU
eXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1hdHJp
eDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Cisg
ICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQor
ICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBv
bmVudHMsIHZhbHVlc1swXSk7CisKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4
ZWxBcnJheS5sZW5ndGgoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZlY3RB
cHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50
cywgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGJ1ZmZlclNpemUpOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4
ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4
ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOworICAgICAgICAgICAgZmxvYXQg
YWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgICAg
ICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJy
YXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhl
bEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhl
bEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJy
YXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBw
aXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBh
bHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAg
IHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOworICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VU
T0FMUEhBOgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVs
Qnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Cisg
ICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsK
KyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVt
KHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNl
dCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEs
IGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIs
IGJsdWUpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywg
YWxwaGEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYm9vbCBGRUNv
bG9yTWF0cml4OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VS
VChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOwor
CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHJlc3VsdEltYWdl
ID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QgPSB7IHsgfSwgaW4u
YWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUoKSB9OworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0
KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlY3QpOworICAgIAorICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSB9OworICAgIAorICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdElt
YWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2Ut
PmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1
ZmZlci0+c2l6ZSgpOworCisgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBtX3ZhbHVlczsKKwor
ICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9X
TjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgor
ICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXks
IHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9S
TUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVu
c2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVS
T1RBVEU6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4o
cGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAg
IGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJy
YXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICByZXN1bHQuc2V0SXNB
bHBoYUltYWdlKHRydWUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXN1bHRJbWFn
ZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFu
c2ZlclNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ZTNmMmRkZGJkNWZlNDkxMDE0MGMwZWM4ODBjMTQ2NDFiYWQ1YWQyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9u
ZW50VHJhbnNmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VC
dWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0
ZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjg2ZmNjNTZmMzM0MThlY2I1MDMxN2NiYzBlYTM1
MGRhNjY2ZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApAQCAtMCwwICsx
LDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBG
RUNvbXBvc2l0ZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFn
ZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzA5YjMzNGMyYmQ1OGI5YWU0
ODg0OTA0NWZhZDc5YmFjZjBjY2M0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdh
cmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworYm9vbCBGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFj
ZW1lbnRNYXBTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFjYjM0MWYwZTU3NmRmM2JkMTM2ZjZhMWM3N2UzZWEyOTAyMGJhNmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRGlzcGxh
Y2VtZW50TWFwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRURpc3BsYWNlbWVu
dE1hcDo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZl
ciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dT
b2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzE2ZmNmYjlmYjllNTZhNGMwZDRkYTg3OTZhNmQ0ZTNl
YWRjYThlNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEs
ODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVE
cm9wU2hhZG93LmgiCisKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgorI2luY2x1ZGUgIkZp
bHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgi
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIEZFRHJvcFNoYWRvdzo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IGlucHV0cywgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5n
ZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOworICAgIGlm
ICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0
SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKy8vICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVy
KCk7CisvLworLy8gICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5
RmlsdGVyUmVzb2x1dGlvbih7IG1fc3RkWCwgbV9zdGRZIH0pOworLy8gICAgYmx1clJhZGl1cy5z
Y2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisvLyAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmls
dGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7CisvLworLy8gICAg
RmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKKy8vICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9m
ZnNldChkcmF3aW5nUmVnaW9uKTsKKy8vICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUo
b2Zmc2V0KTsKKy8vCisvLyAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworLy8gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRv
d09wYWNpdHkpOworLy8gICAgcmVzdWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldCk7CisvLyAgICByZXN1bHRDb250ZXh0LnNldEFs
cGhhKDEpOworLy8KKy8vICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBv
ZmZzZXQsIG1fc2hhZG93Q29sb3IpOworLy8KKy8vICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07CisvLyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworLy8gICAgYXV0byBwaXhlbEJ1
ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwor
Ly8gICAgaWYgKCFwaXhlbEJ1ZmZlcikKKy8vICAgICAgICByZXR1cm4gbnVsbHB0cjsKKy8vCisv
LyAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKy8vICAg
IGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBp
eGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworLy8K
Ky8vICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0Fy
ZWEpOworLy8KKy8vICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBv
c2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CisvLyAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFk
b3dDb2xvcik7CisvLyAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKKy8vCisvLyAgICByZXN1bHRJbWFnZS0+
Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb24pOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVG
bG9vZFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWVjYWJhMDExYTJm
YmFlY2M5ZjIyZGJmZjIzZTkwYmUzNDJhYWIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUu
Y3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFRmxvb2QuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIEZFRmxvb2Q6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAg
ICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1
bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb2xvciA9IG1fY29s
b3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkobV9vcGFjaXR5KTsKKyAgICBhdXRvIGltYWdl
UmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVzdWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXpl
KCkgfTsKKyAgICAKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KGltYWdlUmVj
dCwgY29sb3IpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44M2Q3MGE2ODBkOGVjMWM1YzdjOTQ5MjdiNGJiNmQ5YjQzMmYyNjhhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OmFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1
bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZWNjMTIwMTA5OWJkOTU5ZGZhY2IxMmY5NzEwNmE1YmI1MmJmZWFlMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Wm9sdGFuIEhlcmN6ZWcKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZFTGlnaHRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFTGlnaHRpbmc6
OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBG
aWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44NWY4MjViZGE4ZWMyMzUwYmJjMTUzMDk0ZTQzMGZhNWMyOGM1N2JiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU1lcmdlLmgiCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNZXJnZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3Vs
dCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlucHV0cy5pc0VtcHR5KCkpOworCisgICAgYXV0byBy
ZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2Up
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29u
dGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0IDog
aW5wdXRzKSB7CisgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC0+aW1hZ2VCdWZmZXIo
KTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGlu
cHV0LT5hYnNvbHV0ZURyYXdpbmdSZWN0KCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVN
b3JwaG9sb2d5U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjMzhjYTQ0ZTVhYWIxYjcyMjJjZTZh
Nzc4YWFjNzkwNWY2NmM4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgRkVNb3JwaG9sb2d5OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNv
ZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYxNWNiYjgzNGJiNGU4OTZk
OGJkNzhmNjNmM2Q2MGRlOGIzZmIyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAK
QEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2Jvb2wgRkVPZmZzZXQ6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0u
Z2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlc3Vs
dEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0LnNldElzQWxwaGFJbWFnZShpbi5pc0Fs
cGhhSW1hZ2UoKSk7CisKKyAgICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVz
dWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkgfTsKKyAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdh
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRVRpbGVTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFlNTBjZWJiODZlNjg5YzYwYWYzMGMz
YTRjMWY4NjNlMTA2YTBmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNz
ZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUaWxl
LmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5j
bHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFVGlsZTo6YXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNv
bnN0Cit7CisvLyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKy8vICAgIGF1dG8mIGlu
ID0gaW5wdXRzWzBdLmdldCgpOworLy8KKy8vICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQu
aW1hZ2VCdWZmZXIoKTsKKy8vICAgIGF1dG8gaW5CdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOwor
Ly8gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCisvLyAgICAgICAgcmV0dXJuIGZh
bHNlOworLy8KKy8vICAgIHJlc3VsdC5zZXRJc0FscGhhSW1hZ2UoaW4uaXNBbHBoYUltYWdlKCkp
OworLy8KKy8vICAgIC8vIFNvdXJjZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFz
IHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQorLy8gICAgLy8gc2l6
ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3Bl
Y2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgorLy8gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0g
aW4ubWF4RWZmZWN0UmVjdCgpOworLy8gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9u
ID0gdGlsZVJlY3QubG9jYXRpb24oKTsKKy8vICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRp
b24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKKy8vICAgIGlmIChpbi5maWx0ZXJFZmZl
Y3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0KSB7CisvLyAgICAgICAgRmls
dGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKy8vICAgICAgICB0aWxlUmVjdCA9IGZpbHRl
ci5maWx0ZXJSZWdpb24oKTsKKy8vICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVy
UmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkp
OworLy8gICAgfQorLy8KKy8vICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKKy8vICAgIGlmICghdGls
ZUltYWdlKQorLy8gICAgICAgIHJldHVybiBudWxscHRyOworLy8KKy8vICAgIEdyYXBoaWNzQ29u
dGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOworLy8gICAgdGls
ZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhF
ZmZlY3RMb2NhdGlvbi55KCkpOworLy8gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmluQnVmZmVyLCBpbi5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOworLy8KKy8v
ICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KFdURk1vdmUodGlsZUltYWdlKSk7CisvLyAgICBpZiAoIXRpbGVJbWFnZUNvcHkpCisvLyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisvLworLy8gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFu
c2Zvcm07CisvLyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0
aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOworLy8KKy8vICAgIGF1dG8gcGF0dGVybiA9IFBhdHRl
cm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwg
cGF0dGVyblRyYW5zZm9ybSB9KTsKKy8vCisvLyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNv
bnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworLy8gICAgZmlsdGVyQ29udGV4dC5zZXRG
aWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKKy8vICAgIGZpbHRlckNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
VHVyYnVsZW5jZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJi
NGFkN2MxMDg4ZjJhNTBkZDYwOWRmNjQ2ODA5MDUxNmM5ZGVmMDgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVy
YnVsZW5jZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworYm9vbCBGRVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRl
clJlc3VsdFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMWQx
NjAwM2M0NmZmODczYWRmNjc5ZTYxZTc3ZTk3MDY1NTU4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJl
c3VsdFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlciogRmlsdGVyUmVzdWx0U29mdHdhcmU6
OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBhdXRvIGxvZ2ljYWxTaXplID0gYWJzb2x1dGVE
cmF3aW5nUmVjdCgpLnNpemUoKTsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0
aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1f
aW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCByZWN0
IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShsb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChw
aXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
KQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4
aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAg
ZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4
ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
LCByZWN0KTsKKworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3
YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjM4YzQ1NjhmNTFjMzYyYjlmY2E5NmI0YWZiNDM1YjQzM2U5OTEy
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuaApAQCAtMCwwICsxLDQ3IEBACisv
KgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
KgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
KgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyUmVz
dWx0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyUmVzdWx0U29mdHdh
cmUgOiBwdWJsaWMgRmlsdGVyUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1
bHQ6OkZpbHRlclJlc3VsdDsKKyAgICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVmZmVy
PiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92ZXJyaWRlIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXI7
IH0KKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsKKworICAgIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJSZXN1bHRT
b2Z0d2FyZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyUmVz
dWx0JiByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkgPT0gV2ViQ29yZTo6
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19F
TkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzlhY2E3MGVhNGY1MGNhM2I0NDhmZjE3ZTAzN2M3NDMzOTVjMWNmOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJl
c3VsdCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOwor
ICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9
IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOwor
ICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
aW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCByZXN1bHQuYWJzb2x1dGVEcmF3aW5nUmVjdCgp
LnNpemUoKSB9OworCisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChpbWFnZVJl
Y3QsIENvbG9yOjpibGFjayk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGlu
YXRpb25Jbik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ3MTY0ZWI1ZDVlOGE0NDY0OGMzZjMxNTI0MTMxMjY3YWVlMTgyYjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIFNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmIHJl
c3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc291cmNlSW1hZ2UpOworCisgICAgYXV0byByZXN1
bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5jcHAKaW5kZXggNjRlOTgzODRhZjAwNGVmNjk5YmM2MmU2YTZjOTc3NTZmNTljNjZmZi4uNzVm
Mzc3NTM1MTQxYzI5ZDIxM2Q1N2U0Y2YzZmQyYjJmNDBlYjczMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNyw0MTEgKzI4LDMwMSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkVs
ZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKICNpbmNsdWRlICJG
RUNvbXBvbmVudFRyYW5zZmVyLmgiCiAjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCiAjaW5jbHVk
ZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNpbmNsdWRlICJGRU1lcmdlLmgiCi0jaW5jbHVkZSAiRmls
dGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRmls
dGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
RmlsdGVyQnVpbGRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oIgotI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVy
LmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUg
PGQyZDEuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxDU1NGaWx0ZXI+
IENTU0ZpbHRlcjo6Y3JlYXRlKCkKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRp
b25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKG5ldyBDU1NGaWx0
ZXIob3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSkpOworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxk
RnVuY3Rpb25zKHJlbmRlcmVyLCBvcGVyYXRpb25zKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgCisgICAgcmV0dXJuIGZpbHRlcjsKIH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQot
ICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEsIDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhT
b3VyY2VHcmFwaGljOjpjcmVhdGUoKnRoaXMpKQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KQorICAgIDogRmlsdGVyKHJlbmRlcmluZ01vZGUsIFR5cGU6OkNTUykKIHsKKyAgICBtX2hhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
KCk7CisgICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdp
biA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlP
cmlnaW4oKTsKIH0KIAotQ1NTRmlsdGVyOjp+Q1NTRmlsdGVyKCkgPSBkZWZhdWx0Oworc3RhdGlj
IFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihGaWx0ZXImIGZpbHRlciwgUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCAmcHJldmlvdXNFZmZlY3QsIGNvbnN0IFJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQoreworICAgIGF1dG8mIHJl
ZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3Vy
Y2VzKCk7CisgICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMu
cmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0
aW9uKTsKKworICAgIGlmICghZmlsdGVyRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gU1ZHRmlsdGVyOjpjcmVhdGUoKmZpbHRlckVsZW1lbnQsIGZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksICZwcmV2aW91c0VmZmVjdCk7Cit9CiAKLUdyYXBoaWNzQ29udGV4dCog
Q1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNy
ZWF0ZUdyYXlTY2FsZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
JiBjb2xvck1hdHJpeE9wZXJhdGlvbikKIHsKLSAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZz
b3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOworICAgIGRvdWJsZSBvbmVNaW51c0Ft
b3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEu
MCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3Rp
cC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZv
cm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRl
cnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAw
LjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAw
LAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAu
Mjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAs
CisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVN
aW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43
MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAu
MDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwK
KworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAg
ICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JN
QVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGNyZWF0ZVNlcGlhRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQogewotICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSBy
ZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCkucmVmZXJlbmNlZEZpbHRlckVs
ZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKLSAgICBpZiAoIWZp
bHRlckVsZW1lbnQpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8
PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQg
dG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmls
dGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOwotICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90
IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUg
ZG9jdW1lbnQuCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJP
YmplY3RzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMxMDg1PgotICAgICAgICAvLyBGSVhNRTog
VW5jbGVhciBpZiB0aGlzIGRvZXMgYW55dGhpbmcuCi0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGZpbHRlck9wZXJhdGlvbi5m
cmFnbWVudCgpLCAqZWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAg
ICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlv
bi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcv
aGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAor
ICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkz
ICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAor
ICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0
OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4
NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAg
IDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41
MzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4x
MzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKwor
ICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAw
LAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRS
SVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAgICBhdXRv
IGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KCZwcmV2aW91c0VmZmVjdCk7
Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoU291cmNlQWxwaGE6
OmVmZmVjdE5hbWUoKSk7CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJh
dGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRy
aXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAg
IHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
LCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0OwotICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0
czsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoY29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24p
Cit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNo
aWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRl
ckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoYnVpbGRl
ci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAi
IGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVpbGQgZWZmZWN0IGZyb20gIiA8PCBl
ZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Citz
dGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlSW52ZXJ0RWZmZWN0KGNvbnN0IEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElO
RUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSAxIC0gMiAqIGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3Vu
dDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJl
dHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KIAotICAgICAg
ICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAg
ICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFU
SU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVy
YXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHls
ZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246Okxp
bmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3Bl
cmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYK
LSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwg
ZWZmZWN0KTsKLSAgICAgICAgcmVmZXJlbmNlRWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAg
fQotICAgIAotICAgIG1fZWZmZWN0cy5hcHBlbmRWZWN0b3IoV1RGTW92ZShyZWZlcmVuY2VFZmZl
Y3RzKSk7Ci0gICAgcmV0dXJuIGVmZmVjdDsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBj
cmVhdGVPcGFjaXR5RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkp
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5j
dGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxs
RnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShudWxsRnVu
Y3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKIH0K
IAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKK3N0
YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uKQogewotICAgIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKLSAgICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJl
c3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxk
QmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOworICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3Vu
dCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CiAKLSAgICBtX2VmZmVjdHMuY2xlYXIoKTsK
LSAgICBtX291dHNldHMgPSB7IH07CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRl
Q29udHJhc3RFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Cisg
ICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7CisKKyAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVh
dGVCbHVyRWZmZWN0KGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24pCit7
CisgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0
aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgLypjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1l
cjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDoqLyBFREdFTU9ERV9EVVBMSUNBVEUp
OworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVj
dChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQor
eworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7Cisg
ICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0
aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29s
b3IoKSwgMSk7Cit9CisKK2Jvb2wgQ1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKK3sKKyAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKTsK
KyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CiAgICAgZm9y
IChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlv
biA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkg
ewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAgICAgICAg
ICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVy
ZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24p
OworICAgICAgICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7CisKKyAgICAgICAgQVNTRVJUKGVm
ZmVjdCk7CisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAgICAgICAgIGZpbHRlciA9IGNyZWF0
ZVNWR0ZpbHRlcigqdGhpcywgcmVuZGVyZXIsICplZmZlY3QsIGRvd25jYXN0PFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZWZmZWN0ID0gbnVsbHB0
cjsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0
aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAt
IGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAg
IC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMv
aW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3Jt
YXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBh
cmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2
ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNB
bW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUy
ICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIy
ICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNy
ZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFt
ZXRlcnMpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkdSQVlTQ0FMRToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChk
b3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0VQSUE6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsK
LSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBo
dHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRt
bCNzZXBpYUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJh
bWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25l
TWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43
NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4x
NjggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAg
ICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAu
MjcyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCi0g
ICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgMSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
ZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9y
TWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJh
bWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91
bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhp
cywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykp
OworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJB
VEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTYXR1cmF0ZUVmZmVjdChkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JP
VEFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZm
ZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVF
Uk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSHVlUm90
YXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlw
ZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBh
bW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
LmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAq
IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50
OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsK
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywg
dHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
SU5WRVJUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNv
bG9yLWZpbHRlci4KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6T1BBQ0lUWTogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3Qg
PSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIG51bGxGdW5jdGlvbiwgbnVsbEZ1
bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24pOworCisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlT3Bh
Y2l0eUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgYXV0byYgY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVu
Y3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRy
YW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRuZXNz
RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlv
bi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZs
b2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFt
b3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFt
b3VudCArIDAuNTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRy
YW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24s
IHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24g
PSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0
aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5C
bHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9
PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1P
REVfRFVQTElDQVRFKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKKyAg
ICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBh
dXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNoYWRv
dzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCBkcm9w
U2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRyb3BTaGFk
b3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJh
dGlvbi5jb2xvcigpLCAxKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9T
SEFET1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGRvd25j
YXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGVmZmVjdCkgewotICAgICAgICAgICAgLy8gVW5s
aWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMgb24g
dGhlIGZpbHRlcgotICAgICAgICAgICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBu
b3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3VicmVnaW9ucy4KLSAgICAgICAgICAgIGVmZmVj
dC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVu
Y3Rpb24pOwotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KGZpbHRlck9wZXJhdGlvbi50eXBlKCkgIT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsK
LSAgICAgICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZp
b3VzRWZmZWN0KSB9OwotICAgICAgICAgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZm
ZWN0KTsKKyAgICAgICAgaWYgKGZpbHRlcikgeworICAgICAgICAgICAgZWZmZWN0ID0gZmlsdGVy
LT5sYXN0RWZmZWN0KCk7CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJl
bGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVy
IHdlIGFyZSBub3QgdmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIG1fZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBp
ZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNldE1heEVmZmVj
dFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7Ci0jaWYgVVNFKENPUkVfSU1BR0UpCi0gICAg
aWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVy
RWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFj
Y2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsK
LSNlbmRpZgorICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOworICAgIH0K
KyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KQorSW50T3V0c2V0cyBDU1NG
aWx0ZXI6Om91dHNldHMoKSBjb25zdAogewotICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8
fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyB8
fCAhbV9vdXRzZXRzLmlzWmVybygpKQorICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwogCi0gICAg
aWYgKGZpbHRlclJlY3QgPT0gc291cmNlSW1hZ2VSZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIG1fb3V0
c2V0cyArPSBmdW5jdGlvbi0+b3V0c2V0cygpOwogCi0gICAgc2V0U291cmNlSW1hZ2VSZWN0KGZp
bHRlclJlY3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENTU0ZpbHRlcjo6YWxsb2Nh
dGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRl
eHQpCi17Ci0gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZWZmZWN0IGNoYWluIGhhcyBiZWVuIGJ1
aWx0LCBhbmQgdGhlCi0gICAgLy8gc291cmNlIGltYWdlIHNpemVzIHNldC4gV2UganVzdCBuZWVk
IHRvIGF0dGFjaCB0aGUgZ3JhcGhpYwotICAgIC8vIGJ1ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQg
ZG9uZSBzby4KLQotICAgIGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEludFNpemUgbG9naWNhbFNpemUgeyBtX3NvdXJjZURyYXdpbmdSZWdpb24u
c2l6ZSgpIH07Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSgpIHx8IHNvdXJjZUltYWdlKCktPmxvZ2lj
YWxTaXplKCkgIT0gbG9naWNhbFNpemUpIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHNl
dFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01v
ZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRlclNjYWxlKCksIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXRDb250ZXh0KTsKLSAgICAgICAgUmVuZGVyaW5nTW9kZSBtb2RlID0gbV9maWx0
ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogcmVuZGVyaW5nTW9kZSgp
OwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXpl
LCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4
ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0
dGFjaGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbigpCi17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0
KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC5tYXhFZmZlY3RSZWN0
KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdl
IHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9y
cy4KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHND
bGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAgc2V0RmlsdGVyUmVz
b2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCk7Ci0gICAgfQorICAgIHJldHVybiBtX291dHNldHM7CiB9CiAKLXZvaWQg
Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQorRmlsdGVyUmVzdWx0KiBDU1NG
aWx0ZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0
YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0CiB7Ci0gICAgbV9zb3VyY2VHcmFw
aGljLT5jbGVhclJlc3VsdCgpOwotICAgIGlmIChtX3NvdXJjZUFscGhhKQotICAgICAgICBtX3Nv
dXJjZUFscGhhLT5jbGVhclJlc3VsdCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZl
Y3RzKQotICAgICAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7Ci19CisgICAgZm9yIChhdXRvJiBm
dW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuY3Rpb24t
PmFwcGx5KG91dHB1dCwgc3RhY2ssIHNvdXJjZUltYWdlKTsKKyAgICAgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkK
LXsKLSAgICBhdXRvJiBlZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGlmICht
X2ZpbHRlclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0
cyhlZmZlY3QpOwotICAgICAgICBpZiAobV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsK
LSAgICAgICAgICAgIGVmZmVjdC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAg
ICAgICBzdGFjay5hcHBlbmQoeyAqcmVzdWx0IH0pOworICAgICAgICBvdXRwdXQucmVzdWx0cygp
LmFkZChmdW5jdGlvbiwgUmVmPEZpbHRlclJlc3VsdD4oKnJlc3VsdCkpOwogICAgIH0KLSAgICBl
ZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci19Ci0KLUxheW91dFJlY3QgQ1NTRmlsdGVyOjpj
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRl
ckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICAvLyBUaGUgcmVz
dWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGFyZWEgaW4gdGhlICJmaWx0ZXJCb3hSZWN0IiB0
aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZCwgc28gdGhhdCB3ZSBmdWxseSBjb3ZlciB0aGUgImRp
cnR5UmVjdCIuCi0gICAgYXV0byByZWN0Rm9yUmVwYWludCA9IGRpcnR5UmVjdDsKLSAgICBpZiAo
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCi0gICAgICAgIHJlY3RGb3JSZXBhaW50ICs9IG91
dHNldHMoKTsKLSAgICByZWN0Rm9yUmVwYWludC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7Ci0g
ICAgcmV0dXJuIHJlY3RGb3JSZXBhaW50OwotfQotCi1JbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpv
dXRwdXQoKSBjb25zdAotewotICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVu
ZGVyZXItPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm4gbV9maWx0ZXJSZW5kZXJlci0+b3V0
cHV0KCk7Ci0gICAgCi0gICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0KCktPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci19Ci0KLXZvaWQgQ1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCi17Ci0gICAgbV9zb3VyY2VEcmF3aW5nUmVnaW9uID0g
c291cmNlSW1hZ2VSZWN0OwotICAgIHNldE1heEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCk7
Ci0gICAgc2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgbV9ncmFwaGljc0J1
ZmZlckF0dGFjaGVkID0gZmFsc2U7Ci19CiAKLXZvaWQgQ1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RS
ZWN0cyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdFJlY3QpCi17Ci0gICAgZm9yIChhdXRvJiBlZmZl
Y3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIGVmZmVjdC0+c2V0TWF4RWZmZWN0UmVjdChlZmZlY3RS
ZWN0KTsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID09IDEpOworICAgIGF1dG8gcmVzdWx0ID0g
c3RhY2sudGFrZUxhc3QoKTsKKyAgICByZXN1bHQtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgcmV0dXJuICZyZXN1bHQubGVha1JlZigp
OwogfQogCi1JbnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0CitUZXh0U3RyZWFt
JiBDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIGF1dG8mIGxhc3RF
ZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIAotICAgIGlmIChsYXN0RWZmZWN0
Lmhhc1Jlc3VsdCgpIHx8IChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhh
c1Jlc3VsdCgpKSkKLSAgICAgICAgcmV0dXJuIGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKLSAgICAKLSAgICBy
ZXR1cm4geyB9OwotfQotCi1JbnRPdXRzZXRzIENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscykKLSAgICAgICAgcmV0dXJuIHsg
fTsKLQotICAgIGlmICghbV9vdXRzZXRzLmlzWmVybygpKQotICAgICAgICByZXR1cm4gbV9vdXRz
ZXRzOwotCi0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0
c2V0cyArPSBlZmZlY3QtPm91dHNldHMoKTsKLSAgICByZXR1cm4gbV9vdXRzZXRzOworICAgIGZv
ciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAgZnVuY3Rpb24tPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICByZXR1cm4gdHM7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
aAppbmRleCAwMGI5MTkxN2I4MDRjOTJkOTQwOGI3NThlMzc1YzI1MmYyOWRiMGM1Li5iZDNmOGE3
ZWM4M2ZlYTlmOWVlZTQzZmVmNTIxNjk4YTJjZjcwMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsODYgKzI2LDU0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKLSNpbmNsdWRlICJMYXlv
dXRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFz
cyBGaWx0ZXJFZmZlY3RSZW5kZXJlcjsKLWNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Ci1jbGFzcyBH
cmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBS
ZW5kZXJFbGVtZW50OwotY2xhc3MgU291cmNlQWxwaGE7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwot
Ci1lbnVtIGNsYXNzIEZpbHRlckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0
aW9uIH07CiAKIGNsYXNzIENTU0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRl
cnM7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOwotCi0gICAg
dm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRG
aWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdp
b24gPSBmaWx0ZXJSZWdpb247IH0KIAotICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdDsK
LQotICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
LCBGaWx0ZXJDb25zdW1lcik7Ci0gICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsK
LSAgICB2b2lkIGFwcGx5KCk7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+
IGNyZWF0ZShSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmlu
Z01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIAogICAgIGJvb2wgaGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3Vy
aXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmlj
dGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBDU1NGaWx0ZXIoKTsKLSAgICB2aXJ0dWFsIH5DU1NGaWx0ZXIoKTsKLQotICAgIGJv
b2wgaXNDU1NGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBGbG9h
dFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2VEcmF3
aW5nUmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5V
c2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorICAgIElu
dE91dHNldHMgb3V0c2V0cygpIGNvbnN0IGZpbmFsOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdCYgcHJl
dmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZWY8Q1NTRmlsdGVyPj4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZv
aWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQqIGlucHV0Q29udGV4dCgpOwotCi0gICAgYm9vbCB1cGRhdGVCYWNraW5nU3RvcmVSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworcHJpdmF0ZToKKyAgICBDU1NG
aWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01vZGUpOwogCi0gICAgSW50
UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7CisgICAgYm9vbCBidWlsZEZ1bmN0aW9ucyhSZW5kZXJF
bGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogCi0gICAgTGF5b3V0UmVjdCBjb21w
dXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJv
eFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCk7CisgICAgRmlsdGVyUmVzdWx0KiBh
cHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UpIGNvbnN0IGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJh
d2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisgICAgVGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0IGZpbmFsOwogCi0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVj
dHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBoaWM+IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBtX3NvdXJjZUFscGhhOworICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07CiAKKyAgICBWZWN0b3I8UmVmPEZpbHRl
ckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CiAgICAgbXV0YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0
czsKK307CiAKLSAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2Ug
fTsKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgQ1NTRmlsdGVyOjplbmNvZGUoRW5j
b2RlciYpIGNvbnN0Cit7CiAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJl
bmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOwotfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVj
b2Rlcj4gc3RkOjpvcHRpb25hbDxSZWY8Q1NTRmlsdGVyPj4gQ1NTRmlsdGVyOjpkZWNvZGUoRGVj
b2RlciYpCit7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNTU0ZpbHRl
cikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIp
IHsgcmV0dXJuIGZpbHRlci5pc0NTU0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIudHlwZSgpID09
IFdlYkNvcmU6OkZpbHRlcjo6VHlwZTo6Q1NTOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDFiZjIyZTQyYzM1
MTg2MTg3OWVmNWFmMGNmMWVjMGI0NzE0OWI1ZWEuLjAwZjY2ZThhYjIxOGJlNGYwMWZhNzJiY2Nj
YWU5MWU3ZTg2M2EzNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBA
IC02Miw3ICs2Miw2IEBAIGNsYXNzIFRleHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgQ2xpcFJlY3RzOwogY2xhc3MgQ2xpcFJlY3RzQ2Fj
aGU7CiBjbGFzcyBFdmVudFJlZ2lvbkNvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCmluZGV4IDI1MGE3ZDVjMGJhYTBhYzc0MWE5MGM4
MThiNjFhMDVmOTViOTY0YTQuLmEyZWU3ODkwYzRhN2VkZmRhYTNlYmRiYjdmNDQ1ZGIwNzk2MTcy
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMu
Y3BwCkBAIC0zMSw5ICszMSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyRmlsdGVycy5oIgogCi0jaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVkZSAi
Q2FjaGVkU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgi
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC0xMTYsMzkgKzExNyw1MSBAQCB2
b2lkIFJlbmRlckxheWVyRmlsdGVyczo6cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpCiAg
ICAgbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXll
ckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBzY2Fs
ZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQordm9pZCBSZW5kZXJMYXllckZp
bHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewotICAgIGlmICghbV9maWx0ZXIpIHsKLSAgICAgICAg
bV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOwotICAgICAgICBtX2ZpbHRlci0+c2V0Rmls
dGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICBtX2ZpbHRlci0+c2V0UmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9IGVsc2UgaWYgKG1fZmlsdGVyLT5maWx0ZXJTY2FsZSgp
ICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2Fs
ZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsK
LSAgICB9CisgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVy
ZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSk7Cit9CisKK0dyYXBoaWNzQ29udGV4
dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnB1dENvbnRleHQoKQoreworICAgIHJldHVybiBtX3Nv
dXJjZUltYWdlID8gJm1fc291cmNlSW1hZ2UtPmNvbnRleHQoKSA6IG51bGxwdHI7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKK3sK
KyAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSB7IG1fc291cmNlSW1hZ2VSZWN0LnNpemUoKSB9Owor
ICAgIG1fc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtX2Zp
bHRlci0+cmVuZGVyaW5nTW9kZSgpLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVp
bGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCi0g
ICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBi
dXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCi0gICAgLy8gRklYTUU6IHRoaXMgcmVidWlsZHMgdGhl
IGVudGlyZSBlZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hh
bmdlLgotICAgIGlmICghbV9maWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgp
LmZpbHRlcigpLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkpKQotICAgICAgICBtX2Zp
bHRlciA9IG51bGxwdHI7CisgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKIH0K
IAotR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0
KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBm
aWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJl
Y3QmIGxheWVyUmVwYWludFJlY3QpCitHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYg
ZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRS
ZWN0JiBsYXllclJlcGFpbnRSZWN0KQogewogICAgIGlmICghbV9maWx0ZXIpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgYXV0byYgZmlsdGVyID0gKm1fZmlsdGVyOwotICAgIGF1dG8g
ZmlsdGVyU291cmNlUmVjdCA9IGZpbHRlci5jb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KGZpbHRlckJveFJlY3QsIGRpcnR5UmVjdCk7CisgICAgCisgICAgYXV0byBmaWx0ZXJTb3Vy
Y2VSZWN0ID0gZGlydHlSZWN0OworICAgIGlmIChmaWx0ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzKCkpCisgICAgICAgIGZpbHRlclNvdXJjZVJlY3QgKz0gZmlsdGVyLm91dHNldHMoKTsKKyAg
ICBmaWx0ZXJTb3VyY2VSZWN0LmludGVyc2VjdChmaWx0ZXJCb3hSZWN0KTsKKwogICAgIGlmIChm
aWx0ZXJTb3VyY2VSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBib29sIGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUgPSBmaWx0ZXIudXBkYXRlQmFja2luZ1N0b3Jl
UmVjdChmaWx0ZXJTb3VyY2VSZWN0KTsKKyAgICAKKyAgICBpZiAoZmlsdGVyU291cmNlUmVjdCAh
PSBtX3NvdXJjZUltYWdlUmVjdCkgeworICAgICAgICBtX3NvdXJjZUltYWdlUmVjdCA9IGZpbHRl
clNvdXJjZVJlY3Q7CisgICAgICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IGZhbHNlOwor
ICAgIH0KKyAgICAKICAgICBpZiAoIWZpbHRlci5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkK
ICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGRpcnR5UmVjdDsKICAgICBlbHNlIHsKLSAgICAgICAg
aWYgKGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUpCisgICAgICAgIGlmICghbV9ncmFwaGljc0J1ZmZl
ckF0dGFjaGVkKQogICAgICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGZpbHRlclNvdXJjZVJlY3Q7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGRpcnR5UmVjdDsK
QEAgLTE1OSwxMSArMTcyLDkgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6
OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXQKICAgICBtX3BhaW50
T2Zmc2V0ID0gZmlsdGVyU291cmNlUmVjdC5sb2NhdGlvbigpOwogICAgIHJlc2V0RGlydHlTb3Vy
Y2VSZWN0KCk7CiAKLSAgICBmaWx0ZXIuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KCk7Ci0KLSAgICBmaWx0ZXIuYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChkZXN0aW5hdGlv
bkNvbnRleHQpOwotICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9IGZpbHRlci5pbnB1
dENvbnRleHQoKTsKLSAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4dCB8fCBmaWx0ZXIuZmls
dGVyUmVnaW9uKCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhm
aWx0ZXIuZmlsdGVyUmVnaW9uKCkuc2l6ZSgpKSkKKyAgICBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKCk7CisgICAgYXV0byogc291cmNlR3JhcGhpY3NDb250ZXh0ID0gaW5wdXRDb250ZXh0
KCk7CisgICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgLy8gVHJhbnNsYXRlIHRoZSBjb250ZXh0IHNvIHRoYXQgdGhlIGNvbnRlbnRz
IG9mIHRoZSBsYXllciBpcyBjYXB0dXJlZCBpbiB0aGUgb2Zmc2NyZWVuIG1lbW9yeSBidWZmZXIu
CkBAIC0xNzcsMjUgKzE4OCwyNiBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdAogCiB2b2lkIFJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0
aW5hdGlvbkNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKG1fZmlsdGVyLT5pbnB1dENvbnRleHQoKSk7
CisgICAgQVNTRVJUKGlucHV0Q29udGV4dCgpKTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIlxuUmVuZGVyTGF5ZXJGaWx0ZXJzICIgPDwgdGhpcyA8PCAiIGFwcGx5
RmlsdGVyRWZmZWN0Iik7CiAKICAgICBhdXRvJiBmaWx0ZXIgPSAqbV9maWx0ZXI7Ci0gICAgZmls
dGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7Ci0KLSAgICBmaWx0ZXIuYXBwbHkoKTsKLQot
ICAgIC8vIEdldCB0aGUgZmlsdGVyZWQgb3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgotICAg
IExheW91dFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIub3V0cHV0UmVjdCgpOwotICAgIGRlc3RSZWN0
Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKLQotICAgIGlmIChh
dXRvKiBvdXRwdXRCdWZmZXIgPSBmaWx0ZXIub3V0cHV0KCkpCi0gICAgICAgIGRlc3RpbmF0aW9u
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91dHB1dEJ1ZmZlciwgc25hcFJlY3RUb0RldmljZVBp
eGVscyhkZXN0UmVjdCwgbV9sYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSkpOwotCi0gICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJGaWx0ZXJz
ICIgPDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOworICAgIGlucHV0Q29u
dGV4dCgpLT5yZXN0b3JlKCk7CisKKyAgICBhdXRvIGdlb21ldHJ5ID0gc3RkOjptYWtlX3VuaXF1
ZTxGaWx0ZXJHZW9tZXRyeT4obV9zb3VyY2VJbWFnZVJlY3QsIG1fc291cmNlSW1hZ2VSZWN0KTsK
KyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKGZpbHRlciwgbV9z
b3VyY2VJbWFnZS5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOworCisvLworLy8gICAgLy8gR2V0
IHRoZSBmaWx0ZXJlZCBvdXRwdXQgYW5kIGRyYXcgaXQgaW4gcGxhY2UuCisvLyAgICBMYXlvdXRS
ZWN0IGRlc3RSZWN0ID0gZmlsdGVyLm91dHB1dFJlY3QoKTsKKy8vICAgIGRlc3RSZWN0Lm1vdmUo
bV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKKy8vCisvLyAgICBkZXN0aW5h
dGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKGZpbHRlciwgbV9zb3VyY2VJbWFnZS5n
ZXQoKSk7CisvLworLy8gICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOworLy8K
Ky8vICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyRmls
dGVycyAiIDw8IHRoaXMgPDwgIiBhcHBseUZpbHRlckVmZmVjdCBkb25lXG4iKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4ZjE1NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDVi
ZjcuLjJhZjZmYjQ3ZTE4NGY2OTQwNDdjMGU3MTUyNzNhYzE0MmFhNWJmYjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKQEAgLTM3LDggKzM3LDEw
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZFNWR0RvY3VtZW50OworY2xh
c3MgQ1NTRmlsdGVyOwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Citj
bGFzcyBJbWFnZUJ1ZmZlcjsKIAogY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzIGZpbmFsIDogcHJp
dmF0ZSBDYWNoZWRTVkdEb2N1bWVudENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CkBAIC02OSwxNCArNzEsMTkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIG5vdGlm
eUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikgZmlu
YWw7CiAgICAgdm9pZCByZXNldERpcnR5U291cmNlUmVjdCgpIHsgbV9kaXJ0eVNvdXJjZVJlY3Qg
PSBMYXlvdXRSZWN0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOwor
ICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOwogCiAgICAgUmVuZGVyTGF5
ZXImIG1fbGF5ZXI7CiAKICAgICBWZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiBtX2ludGVybmFsU1ZH
UmVmZXJlbmNlczsKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9j
dW1lbnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJlbmNlczsKIAorICAgIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gbV9zb3VyY2VJbWFnZTsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7CiAgICAg
UmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7CiAgICAgTGF5b3V0UmVjdCBtX2RpcnR5U291cmNl
UmVjdDsKKyAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAgICAg
CiAgICAgLy8gRGF0YSB1c2VkIHBlciBwYWludAogICAgIExheW91dFBvaW50IG1fcGFpbnRPZmZz
ZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDQxNjJiODFmZjNiYWM4Y2MxYzJkOGY0ODkxODE0OTkx
ZWM3NTU3YTEuLjRkNmJhYmNmMTdhYzJlYjhiNGE2YzczN2Y2ZGRmZmM2OGE5MmYxMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0zNSw2ICszNiw4IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2lu
Y2x1ZGUgIlNWR0ZpbHRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckdlb21ldHJ5LmgiCiAjaW5j
bHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCkBAIC04MCw2MiAr
ODMsMjcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVtb3ZlQ2xpZW50RnJvbUNh
Y2hlKFJlbmRlckVsZW1lbnQmIGNsaWVudCwgYm9vbAogICAgIG1hcmtDbGllbnRGb3JJbnZhbGlk
YXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlv
biA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHRmls
dGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyhTVkdG
aWx0ZXImIGZpbHRlcikgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291
bnRDaGlsZE5vZGVzID0gMjAwOwotICAgIGlmIChmaWx0ZXJFbGVtZW50KCkuY291bnRDaGlsZE5v
ZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94
KCk7Ci0KLSAgICAvLyBBZGQgZWZmZWN0cyB0byB0aGUgYnVpbGRlcgotICAgIGF1dG8gYnVpbGRl
ciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oU291cmNlR3JhcGhpYzo6Y3JlYXRlKGZp
bHRlcikpOwotICAgIGJ1aWxkZXItPnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1lbnQoKS5w
cmltaXRpdmVVbml0cygpKTsKLSAgICBidWlsZGVyLT5zZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJn
ZXRCb3VuZGluZ0JveCk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogY2hpbGRyZW5P
ZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50
KCkpKSB7Ci0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWxlbWVudC5idWlsZChidWlsZGVyLmdldCgp
LCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgYnVpbGRlci0+
Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQot
ICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNv
cHlSZWYoKSwgZWxlbWVudC5yZW5kZXJlcigpKTsKLSAgICAgICAgZWxlbWVudC5zZXRTdGFuZGFy
ZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RCb3Vu
ZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWxlbWVudCwgZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2
ZVVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KSk7Ci0gICAgICAgIGlmIChlbGVtZW50LnJlbmRl
cmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0Ip
Ci0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWxlbWVudC5yZW5k
ZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09
IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpM
aW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAg
ICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChl
bGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVp
bGRlcjsKLX0KLQogYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1v
ZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2VN
b2RlLCAhcmVzb3VyY2VNb2RlKTsKIAotICAgIExPRyhGaWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIgJXAgYXBwbHlSZXNvdXJjZSByZW5kZXJlciAlcCIsIHRoaXMsICZyZW5kZXJlcik7
Ci0KLSAgICBpZiAobV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSkg
ewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0gbV9yZW5kZXJlckZpbHRlckRhdGFN
YXAuZ2V0KCZyZW5kZXJlcik7Ci0gICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0
ZXJEYXRhOjpQYWludGluZ1NvdXJjZSB8fCBmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRh
OjpBcHBseWluZykKLSAgICAgICAgICAgIGZpbHRlckRhdGEtPnN0YXRlID0gRmlsdGVyRGF0YTo6
Q3ljbGVEZXRlY3RlZDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBbHJlYWR5IGJ1aWx0LCBv
ciB3ZSdyZSBpbiBhIGN5Y2xlLCBvciB3ZSdyZSBtYXJrZWQgZm9yIHJlbW92YWwuIFJlZ2FyZGxl
c3MsIGp1c3QgZG8gbm90aGluZyBtb3JlIG5vdy4KLSAgICB9Ci0KKyAgICAvLyBCdWlsZCB0aGUg
U1ZHRmlsdGVyCiAgICAgYXV0byBmaWx0ZXJEYXRhID0gbWFrZVVuaXF1ZTxGaWx0ZXJEYXRhPigp
OwotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IHJlbmRlcmVyLm9iamVjdEJvdW5k
aW5nQm94KCk7CisgICAgYXV0byByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5h
Y2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAKLSAgICBmaWx0ZXJEYXRhLT5ib3VuZGFy
aWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50
PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0
Qm91bmRpbmdCb3gpOwotICAgIGlmIChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1wdHkoKSkK
KyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50
KCksIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmlsdGVyRGF0YS0+ZmlsdGVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0g
cmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVz
ID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50Pigm
ZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91
bmRpbmdCb3gpOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2VJbWFnZVJlY3QKKyAgICBm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsK
KyAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3Vu
ZGFyaWVzKTsKIAotICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRy
aXggZm9yIGZpbHRlci4gCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZVRyYW5zZm9ybQog
ICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJl
bmRlcmVyKTsKICAgICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDMsNjUgKzExMSwyMiBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25z
dCBSZW5kZQogICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3Jt
YXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2Vz
IGZvciBmZVRpbGUuCiAgICAgZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0g
PSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAsIDAsIGFic29s
dXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKIAotICAgIC8vIERldGVybWluZSBhYnNvbHV0
ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4KLSAgICBm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsK
LSAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3Vu
ZGFyaWVzKTsKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZpbHRlciByZXNvbHV0aW9uCiAgICAgRmxv
YXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbik7CisgICAgZmls
dGVyRGF0YS0+c2NhbGUgPSB7IDEsIDEgfTsKKyAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUoKSwgZmlsdGVyRGF0YS0+c2NhbGUpOwog
Ci0gICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgotICAgIGJvb2wgcHJpbWl0aXZl
Qm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZH
VW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRlckRh
dGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBm
aWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpOwotCi0gICAg
Ly8gQ3JlYXRlIGFsbCByZWxldmFudCBmaWx0ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRh
LT5idWlsZGVyID0gYnVpbGRQcmltaXRpdmVzKCpmaWx0ZXJEYXRhLT5maWx0ZXIpOwotICAgIGlm
ICghZmlsdGVyRGF0YS0+YnVpbGRlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
RGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlh
dGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4K
LSAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247Ci0g
ICAgRmxvYXRTaXplIHNjYWxlKDEsIDEpOwotICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxlKTsKLSAgICB0ZW1wU291cmNlUmVjdC5z
Y2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBTZXQgdGhlIHNj
YWxlIGxldmVsIGluIFNWR0ZpbHRlci4KLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRl
clJlc29sdXRpb24oc2NhbGUpOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFs
T2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmls
dGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBs
YXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0
SW5wdXRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmls
dGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZVxu
IiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpKTsKLQotICAgIGxhc3RFZmZl
Y3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEZsb2F0UmVjdCBz
dWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qg
b25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsCi0gICAgLy8gcmVjYWxj
dWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmIChJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7
Ci0gICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7
Ci0gICAgICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
OwotICAgIH0KLQotICAgIC8vIElmIHRoZSBkcmF3aW5nUmVnaW9uIGlzIGVtcHR5LCB3ZSBoYXZl
IHNvbWV0aGluZyBsaWtlIDxnIGZpbHRlcj0iLi4iLz4uCi0gICAgLy8gRXZlbiBpZiB0aGUgdGFy
Z2V0IG9iamVjdEJvdW5kaW5nQm94KCkgaXMgZW1wdHksIHdlIHN0aWxsIGhhdmUgdG8gZHJhdyB0
aGUgbGFzdCBlZmZlY3QgcmVzdWx0IGltYWdlIGluIHBvc3RBcHBseVJlc291cmNlLgotICAgIGlm
IChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQo
IW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwotICAgICAgICBm
aWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtX3JlbmRlcmVyRmls
dGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZpbHRlckRhdGEpKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoYW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFu
c2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBmaWx0ZXJlZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhl
IHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4KKyAgICAvLyBDYWxjdWxhdGUgZWZmZWN0aXZlVHJh
bnNmb3JtCiAgICAgQWZmaW5lVHJhbnNmb3JtIGVmZmVjdGl2ZVRyYW5zZm9ybTsKLSAgICBlZmZl
Y3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOworICAg
IGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShmaWx0ZXJEYXRhLT5zY2FsZSk7CiAgICAgZWZmZWN0
aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNm
b3JtKTsKIAotICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNj
ZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xP
Ul9TUEFDRV9MSU5FQVJfU1JHQikKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OkxpbmVhclNSR0IoKTsKICNlbHNlCiAgICAgYXV0byBjb2xvclNwYWNlID0gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAjZW5kaWYKKwogICAgIGF1dG8gc291cmNlR3Jh
cGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEt
PmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgcmVuZGVyaW5n
TW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VS
VCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CkBAIC0yMTAs
MTkgKzEzNSwxNSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIAotICAgIC8vIFNldCB0aGUgcmVuZGVyaW5nIG1vZGUgZnJvbSB0aGUg
cGFnZSdzIHNldHRpbmdzLgotICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0UmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKTsKLQorICAgIC8vIFNldCB0aGUgd29ya2luZyBHcmFwaGljQ29udGV4
dCB0byB0aGUgZmlsdGVyIHNvdXJjZUdyYXBoaWMKICAgICBHcmFwaGljc0NvbnRleHQmIHNvdXJj
ZUdyYXBoaWNDb250ZXh0ID0gc291cmNlR3JhcGhpYy0+Y29udGV4dCgpOwotICAKKyAgICAKICAg
ICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyID0gV1RGTW92ZShzb3VyY2VHcmFwaGlj
KTsKICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwotCisgICAgCiAgICAg
Y29udGV4dCA9ICZzb3VyY2VHcmFwaGljQ29udGV4dDsKIAotICAgIEFTU0VSVCghbV9yZW5kZXJl
ckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgbV9yZW5kZXJlckZpbHRl
ckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShmaWx0ZXJEYXRhKSk7Ci0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMjY3LDM4ICsxODgsMTggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBo
aWMKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0
ID0gZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0KLSAgICBpZiAobGFzdEVmZmVj
dCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+Zmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMg
dGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUgY2Fs
bGVkIG9uIHRoZQotICAgICAgICAvLyBpbml0aWFsIGZpbHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0
IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9uIGEKLSAgICAgICAgLy8gc2Vjb25kIGRy
YXdpbmcuCi0gICAgICAgIGlmIChmaWx0ZXJEYXRhLnN0YXRlICE9IEZpbHRlckRhdGE6OkJ1aWx0
KQotICAgICAgICAgICAgZmlsdGVyRGF0YS5maWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUo
ZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyKSk7Ci0KLSAgICAgICAgLy8gQWx3YXlzIHRy
dWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0IChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0
ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlmICghbGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkpIHsK
LSAgICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKLSAg
ICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5j
b3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwot
ICAgICAgICB9CisgICAgaWYgKCFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKIAotICAgICAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNh
dENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1
ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotCi0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShG
bG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgo
KSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGxhc3RF
ZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUo
ZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7CisgICAgICAgIGNvbnRleHQt
PmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2Uo
KS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgICAgICBjb250ZXh0LT5zY2FsZShG
bG9hdFNpemUoMSAvIGZpbHRlckRhdGEuc2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuc2Nh
bGUuaGVpZ2h0KCkpKTsKIAotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRh
dGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgICAgICB9CisgICAgICAgIGF1dG8g
Z2VvbWV0cnkgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZpbHRlckdlb21ldHJ5PihmaWx0ZXJEYXRh
LmJvdW5kYXJpZXMsIGZpbHRlckRhdGEuZHJhd2luZ1JlZ2lvbiwgZmlsdGVyRGF0YS5zaGVhckZy
ZWVBYnNvbHV0ZVRyYW5zZm9ybSwgZmlsdGVyRGF0YS5zY2FsZSk7CisgICAgICAgIGNvbnRleHQt
PmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcigqZmlsdGVyRGF0YS5maWx0ZXIsIGZpbHRlckRhdGEuc291
cmNlR3JhcGhpY0J1ZmZlci5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgIAorICAgICAg
ICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLnNjYWxlKTsKKyAgICAgICAgY29udGV4dC0+Y29u
Y2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIH0KLSAg
ICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOwotCi0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8
PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9uZVxuIik7CiB9CiAKIEZsb2F0UmVjdCBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCkKQEAgLTMwNiwxMCArMjA3LDggQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpyZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYgb2Jq
ZWMKICAgICByZXR1cm4gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0
ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMo
KSwgb2JqZWN0Lm9iamVjdEJvdW5kaW5nQm94KCkpOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCit2b2lkIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCosIGNvbnN0IFF1
YWxpZmllZE5hbWUmKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cyogcHJpbWl0dmUgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMqPihvYmplY3QtPm5vZGUoKSk7Ci0KICAgICBMT0coRmlsdGVycywgIlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyICVwIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQgcmVuZGVyZXIgJXAiLCB0
aGlzLCBvYmplY3QpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBvYmplY3RGaWx0ZXJEYXRhUGFp
ciA6IG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwKSB7CkBAIC0zMTcsMTYgKzIxNiw2IEBAIHZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvCiAgICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSAhPSBGaWx0
ZXJEYXRhOjpCdWlsdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFNWR0ZpbHRl
ckJ1aWxkZXIqIGJ1aWxkZXIgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLmdldCgpOwotICAgICAgICBG
aWx0ZXJFZmZlY3QqIGVmZmVjdCA9IGJ1aWxkZXItPmVmZmVjdEJ5UmVuZGVyZXIob2JqZWN0KTsK
LSAgICAgICAgaWYgKCFlZmZlY3QpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8g
U2luY2UgYWxsIGVmZmVjdHMgc2hhcmVzIHRoZSBzYW1lIGF0dHJpYnV0ZSB2YWx1ZSwgYWxsCi0g
ICAgICAgIC8vIG9yIG5vbmUgb2YgdGhlbSB3aWxsIGJlIGNoYW5nZWQuCi0gICAgICAgIGlmICgh
cHJpbWl0dmUtPnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShlZmZlY3QsIGF0dHJpYnV0ZSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJ1aWxkZXItPmNsZWFyUmVzdWx0c1JlY3Vyc2l2
ZShlZmZlY3QpOwotCiAgICAgICAgIC8vIFJlcGFpbnQgdGhlIGltYWdlIG9uIHRoZSBzY3JlZW4u
CiAgICAgICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oKm9iamVjdEZpbHRlckRhdGFQYWly
LmtleSwgUmVwYWludEludmFsaWRhdGlvbik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDU2NGFh
YWQ0OGEyMmUzYzQ1MDdlZWY1MGFkYzY0NDAxZDg3MDNmODMuLjE0OGFjMDhiMzllODFjZjI5NmM2
NGZjYmRlZDgzMTk2ZTFhODlkNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKQEAgLTIzLDEwICsyMyw5IEBACiAK
ICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUg
IlNWR0ZpbHRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJT
VkdGaWx0ZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCiAjaW5jbHVkZSA8
d3RmL0lzb01hbGxvYy5oPgpAQCAtNDIsOCArNDEsNyBAQCBwdWJsaWM6CiAKICAgICBGaWx0ZXJE
YXRhKCkgPSBkZWZhdWx0OwogCi0gICAgUmVmUHRyPFNWR0ZpbHRlcj4gZmlsdGVyOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZGVyOworICAgIFJlZlB0cjxGaWx0
ZXI+IGZpbHRlcjsKICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWNCdWZmZXI7
CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzYXZlZENvbnRleHQgeyBudWxscHRyIH07CiAgICAgQWZm
aW5lVHJhbnNmb3JtIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtOwpAQCAtNzEsOCArNjksNiBA
QCBwdWJsaWM6CiAKICAgICBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5k
ZXJPYmplY3QmKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWls
ZGVyPiBidWlsZFByaW1pdGl2ZXMoU1ZHRmlsdGVyJikgY29uc3Q7Ci0KICAgICBTVkdVbml0VHlw
ZXM6OlNWR1VuaXRUeXBlIGZpbHRlclVuaXRzKCkgY29uc3QgeyByZXR1cm4gZmlsdGVyRWxlbWVu
dCgpLmZpbHRlclVuaXRzKCk7IH0KICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1p
dGl2ZVVuaXRzKCkgY29uc3QgeyByZXR1cm4gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRz
KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5jcHAKaW5kZXggYjQ3Mzk0MzhjNWYzZTJjNjkxZWYzYjAyYmJiZWM5ZDI5MjA3
MDNiNy4uZDJlNTlkMTM5ZDhjOWY0MmM1N2IwNGNjOWFjNzMxZjc0YWVhOGUwYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCiAj
aW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5o
IgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC00OSw2ICs1MCw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdFbGxpcHNlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUg
IlNWR0lubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJTVkdMaW5lRWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR1BhdGhFbGVtZW50LmgiCkBAIC00MjgsMTMgKzQzMCw5IEBAIHZvaWQgd3JpdGVTVkdS
ZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXImCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInByaW1pdGl2ZVVuaXRz
IiwgZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkpOwogICAgICAgICB0cyA8PCAiXG4iOwogICAgICAg
ICAvLyBDcmVhdGluZyBhIHBsYWNlaG9sZGVyIGZpbHRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhl
IGJ1aWxkZXIuCi0gICAgICAgIEZsb2F0UmVjdCBkdW1teVJlY3Q7Ci0gICAgICAgIGF1dG8gZHVt
bXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShBZmZpbmVUcmFuc2Zvcm0oKSwgZHVtbXlSZWN0
LCBkdW1teVJlY3QsIGR1bW15UmVjdCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChhdXRvIGJ1aWxkZXIg
PSBmaWx0ZXIuYnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdldCgpKSkgeworICAgICAgICBp
ZiAoUmVmUHRyPEZpbHRlcj4gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXIu
ZmlsdGVyRWxlbWVudCgpKSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUg
aW5kZW50U2NvcGUodHMpOwotCi0gICAgICAgICAgICBpZiAoRmlsdGVyRWZmZWN0KiBsYXN0RWZm
ZWN0ID0gYnVpbGRlci0+bGFzdEVmZmVjdCgpKQotICAgICAgICAgICAgICAgIGxhc3RFZmZlY3Qt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOworICAgICAgICAgICAgZHVtbXlGaWx0ZXItPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChyZXNv
dXJjZS5yZXNvdXJjZVR5cGUoKSA9PSBDbGlwcGVyUmVzb3VyY2VUeXBlKSB7CiAgICAgICAgIGNv
bnN0IGF1dG8mIGNsaXBwZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXImPihyZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVC
bGVuZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNw
cAppbmRleCA3YmNmMDQxODAwZjc5OWYxMTc0Y2ZlMDRiODIyZDZkMDY0MzFmNjg2Li4xNjBlMDBk
Y2JlZDY5NWZiNDA3MWU2MTcxZWNmMTJmMmUxOTY0ZmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUJsZW5kRWxlbWVudC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZFQmxl
bmQuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWls
ZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xMDAsMjAgKzEwMCwxNSBAQCB2
b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWls
ZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRl
ci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRF
ZmZlY3QoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMigp
KTsKIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgYXV0byBlZmZlY3QgPSBGRUJsZW5kOjpjcmVhdGUoZmlsdGVyLCBtb2RlKCkpOwot
ICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVj
dHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZm
ZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAg
IAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4g
eyBGRUJsZW5kOjpjcmVhdGUobW9kZSgpKSwgeyB7ICppbnB1dDEgfSwgeyAqaW5wdXQyIH0gfSB9
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCmluZGV4IDkwMzdj
YjEyMWY5MzY3Yjc4OGQ5MjE2ZTBiOTQxZmM4YjA2ZGVjNjYuLjI3YTgyZjVjY2I0NzBlNjMwNmM1
NWI0OWVhZTgyNjQzM2RlOGQyZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUJsZW5kRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVu
dC5oCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZv
aWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAK
LSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVy
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0Piwg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKaW5kZXggMDUyNDg1NzhjMjc0YzhmYTJiM2Ux
ZjI0NGU0MzY3ODY4ZjQyYmE5Yy4uOGFiODBhMjY4ZTlmYzNkMDIxZWQ0MjMzODliYzRiODA5MmM4
YTEyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
Y3BwCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
aCIKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxk
ZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTEwMCwxMiArMTAwLDExIEBAIHZv
aWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5w
dXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlu
cHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgVmVjdG9yPGZs
b2F0PiBmaWx0ZXJWYWx1ZXM7CiAgICAgQ29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGUgPSB0eXBl
KCk7CkBAIC0xMzUsMTUgKzEzNCwxMyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbG9y
TWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbAogICAgICAg
ICBpZiAoKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCAmJiBzaXplICE9
IDIwKQogICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURSAmJiBzaXplICE9IDEpCiAgICAgICAgICAgICB8fCAoZmlsdGVyVHlwZSA9PSBGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEUgJiYgc2l6ZSAhPSAxKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgCiAgICAgICAgIGZp
bHRlclZhbHVlcyA9IHZhbHVlcygpOwogICAgICAgICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9GaXQo
KTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0
ZXIsIGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVyVmFsdWVzKSk7Ci0gICAgZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4g
eyBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyVHlwZSwgV1RGTW92ZShmaWx0ZXJWYWx1ZXMp
KSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKaW5k
ZXggN2FiNGFhNDE4MWU3YWIxOThiMTJlNzdiZTIwNmI5YzVjNDEwMjNmZC4uY2E3YTdkNWY1N2Q2
NWE4Y2I3ZWI5MWYzYmRkNTQ2MjI5ZDM5NGY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwog
CiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWls
ZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9w
cm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1f
aW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKaW5kZXggZTg5
MjY3Y2U3ZDM0MTQ2ZDJhNjVkNmYwMWRjZTVkZWY0OWM4MmY3OC4uNmIxNTFjYWIyMGE0ODk4MjM1
MDkwN2YzNjVhNzNjZjQ4YzYzZDkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5j
bHVkZSAiU1ZHRkVGdW5jQkVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGRUZ1bmNHRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR0ZFRnVuY1JFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVp
bGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtNjIsMTIgKzYyLDExIEBAIHZv
aWQgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVm
UHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAg
IAorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAo
IWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAK
ICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHJlZDsKICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIGdyZWVuOwpAQCAtODUsOSArODQsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dAogICAgICAgICAgICAgYWxwaGEgPSBkb3duY2FzdDxTVkdGRUZ1bmNBRWxlbWVudD4oY2hpbGQp
LnRyYW5zZmVyRnVuY3Rpb24oKTsKICAgICB9CiAgICAgCi0gICAgYXV0byBlZmZlY3QgPSBGRUNv
bXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoZmlsdGVyLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVm
ZmVjdDsKKyAgICByZXR1cm4geyBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUocmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAppbmRleCBiYjU4
OTM0N2Q4ODI2ZGZiMzYwOWVkYWM2ZThiOTkzYTRkZDU0ODYzLi5mMjJkNTFhMmJkOGMyMzc2NWRh
OThiZmMyNWU2YTI5OGE4ZWYyZWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaApAQCAtNDMsNyArNDMsNyBAQCBwcml2YXRlOgog
ICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCiAgICAgdm9pZCBwYXJz
ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJy
aWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0
cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb3NpdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0
ZUVsZW1lbnQuY3BwCmluZGV4IDNjYTk5Yjg3NTcwOGJiZDhhNmJhZjY1M2RjMDZmZTIwNWFjOTgy
MzUuLjYzMDY5NjdjODNjYTY0NWYwZDhmNjVhOGEzMTk5OGQyNzU4M2QzMDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCkBAIC0yMyw3ICsyMyw3IEBA
CiAjaW5jbHVkZSAiU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgiCiAKICNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmls
dGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgogCkBAIC00MCw3ICs0MCw3IEBAIGlubGluZSBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6
OlNWR0ZFQ29tcG9zaXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lCiAgICAg
c3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6
cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6aW5BdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50
OjptX2luMT4oKTsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxT
VkdOYW1lczo6aW4yQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9pbjI+KCk7Ci0gICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9y
QXR0ciwgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9z
dmdPcGVyYXRvcj4oKTsKKyAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0
eTxTVkdOYW1lczo6b3BlcmF0b3JBdHRyLCBGRUNvbXBvc2l0ZU9wZXJhdG9yLCAmU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjptX2NvbXBvc2l0ZU9wZXJhdG9yPigpOwogICAgICAgICBQcm9wZXJ0eVJl
Z2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjprMUF0dHIsICZTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ6Om1fazE+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJv
cGVydHk8U1ZHTmFtZXM6OmsyQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMj4oKTsK
ICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6azNB
dHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2szPigpOwpAQCAtNTYsOSArNTYsOSBAQCBS
ZWY8U1ZHRkVDb21wb3NpdGVFbGVtZW50PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YQogdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZh
bHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKLSAgICAg
ICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFp
dHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOworICAgICAgICBG
RUNvbXBvc2l0ZU9wZXJhdG9yIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxGRUNv
bXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0
eVZhbHVlID4gMCkKLSAgICAgICAgICAgIG1fc3ZnT3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5h
bDxDb21wb3NpdGVPcGVyYXRpb25UeXBlPihwcm9wZXJ0eVZhbHVlKTsKKyAgICAgICAgICAgIG1f
Y29tcG9zaXRlT3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxGRUNvbXBvc2l0ZU9wZXJhdG9y
Pihwcm9wZXJ0eVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTksNyArOTks
NyBAQCBib29sIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRl
KEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdAogewogICAgIEZFQ29tcG9zaXRlKiBjb21wb3Np
dGUgPSBzdGF0aWNfY2FzdDxGRUNvbXBvc2l0ZSo+KGVmZmVjdCk7CiAgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpCi0gICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNl
dE9wZXJhdGlvbihzdmdPcGVyYXRvcigpKTsKKyAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0
Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjprMUF0dHIpCiAgICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldEsxKGsx
KCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azJBdHRyKQpAQCAtMTMxLDIwICsx
MzEsMTUgQEAgdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8
UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29t
cG9zaXRlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0
byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBhdXRv
IGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOwotICAgIAorICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBhdXRvIGlucHV0
MiA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjIoKSk7CisKICAgICBpZiAoIWlucHV0MSB8fCAhaW5w
dXQyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21w
b3NpdGU6OmNyZWF0ZShmaWx0ZXIsIHN2Z09wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0
KCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlu
cHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0
Mik7ICAgIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBy
ZXR1cm4geyBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGNvbXBvc2l0ZU9wZXJhdG9yKCksIGsxKCksIGsy
KCksIGszKCksIGs0KCkpLCB7IHsgKmlucHV0MSB9LCB7ICppbnB1dDIgfSB9IH07CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAppbmRleCA4MWE3OGM4
NjU3YTBmYTMwNDRkZjViN2M1YTA4MGQ2ZTc3OTcyMmY2Li5kYzk1NDc5YjU2YWQ5NThlMzZjZWNl
YWEzYmY0YmE1NjE0YjY2YmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb3NpdGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRl
RWxlbWVudC5oCkBAIC0yNywxNSArMjcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVt
cGxhdGU8PgotaW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0
aW9uVHlwZT46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVf
T1BFUkFUT1JfQVJJVEhNRVRJQzsgfQoraW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8
Q29tcG9zaXRlT3BlcmF0b3I+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KIAogdGVtcGxhdGU8Pgotc3RydWN0IFNW
R1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+IHsKK3N0cnVjdCBTVkdQcm9w
ZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhp
Z2hlc3RFbnVtVmFsdWUoKSB7IHJldHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOyB9
CiAKLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgdHlw
ZSkKKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IpCiAgICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgc3dp
dGNoIChjb21wb3NpdGVPcGVyYXRvcikgewogICAgICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX1VOS05PV046CiAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICAgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgpAQCAtNTgsNyArNTgsNyBAQCBzdHJ1Y3Qg
U1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4gewogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgQ29tcG9zaXRlT3BlcmF0aW9u
VHlwZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIEZFQ29tcG9z
aXRlT3BlcmF0b3IgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKHZhbHVlID09ICJvdmVyIikKICAgICAgICAgICAgIHJldHVybiBGRUNPTVBPU0lURV9P
UEVSQVRPUl9PVkVSOwpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgaW4x
KCkgY29uc3QgeyByZXR1cm4gbV9pbjEtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgU3RyaW5nIGlu
MigpIGNvbnN0IHsgcmV0dXJuIG1faW4yLT5jdXJyZW50VmFsdWUoKTsgfQotICAgIENvbXBvc2l0
ZU9wZXJhdGlvblR5cGUgc3ZnT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3N2Z09wZXJhdG9y
LT5jdXJyZW50VmFsdWU8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4oKTsgfQorICAgIEZFQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0
ZU9wZXJhdG9yLT5jdXJyZW50VmFsdWU8RkVDb21wb3NpdGVPcGVyYXRvcj4oKTsgfQogICAgIGZs
b2F0IGsxKCkgY29uc3QgeyByZXR1cm4gbV9rMS0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9h
dCBrMigpIGNvbnN0IHsgcmV0dXJuIG1fazItPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxvYXQg
azMoKSBjb25zdCB7IHJldHVybiBtX2szLT5jdXJyZW50VmFsdWUoKTsgfQpAQCAtOTMsNyArOTMs
NyBAQCBwdWJsaWM6CiAKICAgICBTVkdBbmltYXRlZFN0cmluZyYgaW4xQW5pbWF0ZWQoKSB7IHJl
dHVybiBtX2luMTsgfQogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiBpbjJBbmltYXRlZCgpIHsgcmV0
dXJuIG1faW4yOyB9Ci0gICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmlt
YXRlZCgpIHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3I7IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0
aW9uJiBjb21wb3NpdGVPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVy
YXRvcjsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiBrMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9r
MTsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiBrMkFuaW1hdGVkKCkgeyByZXR1cm4gbV9rMjsg
fQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiBrM0FuaW1hdGVkKCkgeyByZXR1cm4gbV9rMzsgfQpA
QCAtMTA5LDEyICsxMDksMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJp
bmc6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjIgeyBT
VkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07Ci0gICAgUmVmPFNWR0FuaW1hdGVkRW51
bWVyYXRpb24+IG1fc3ZnT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUo
dGhpcywgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUikgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbj4gbV9jb21wb3NpdGVPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246
OmNyZWF0ZSh0aGlzLCBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSKSB9OwogICAgIFJlZjxTVkdB
bmltYXRlZE51bWJlcj4gbV9rMSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazIgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3Jl
YXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2szIHsgU1ZHQW5pbWF0
ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b3NpdGVFbGVtZW50LmlkbAppbmRleCA3OGU0MDIwN2Y1YjAyZjY3MGYwNDBiMjkzNzVlYWQ3YzJi
NDUyZGUwLi5mYzY3MGM5ZWM1NmM0MWMxMDkyODU0ODQyN2M1ZjZhOGUxODViMWE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbApAQCAtMzgsNyArMzgs
NyBAQAogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAgICAgaW4x
OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMjsKLSAg
ICBbSW1wbGVtZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1h
dGVkRW51bWVyYXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxlbWVudGVkQXM9Y29tcG9zaXRlT3Bl
cmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9y
OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsxOwogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsyOwogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGszOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggZjc1MDU4MTVk
ZWNhYmI0ZWEzNGI0MzViNDdlYTVhODBjNmEyNmRmMS4uMDhhOTE0NjA0NTdhZjUxYmI0ZDBjZTk3
MThmM2I5MDkxMjA4ZjcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2lu
Y2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0xOTEsMTIgKzE5MSwxMSBAQCB2b2lkIFNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZp
bHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlu
cHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBp
bnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGludCBvcmRl
clhWYWx1ZSA9IG9yZGVyWCgpOwogICAgIGludCBvcmRlcllWYWx1ZSA9IG9yZGVyWSgpOwpAQCAt
MjA2LDIyICsyMDUsMjIgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICB9CiAgICAgLy8g
U3BlYyBzYXlzIG9yZGVyIG11c3QgYmUgPiAwLiBCYWlsIGlmIGl0IGlzIG5vdC4KICAgICBpZiAo
b3JkZXJYVmFsdWUgPCAxIHx8IG9yZGVyWVZhbHVlIDwgMSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgYXV0byYga2VybmVsTWF0cml4ID0gdGhpcy0+
a2VybmVsTWF0cml4KCk7CiAgICAgaW50IGtlcm5lbE1hdHJpeFNpemUgPSBrZXJuZWxNYXRyaXgu
aXRlbXMoKS5zaXplKCk7CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGlzIGlzIGEgcmVxdWlyZW1l
bnQsIGFuZCBzaG91bGQgYmFpbCBvdXQgaWYgZmFpbHMKICAgICBpZiAob3JkZXJYVmFsdWUgKiBv
cmRlcllWYWx1ZSAhPSBrZXJuZWxNYXRyaXhTaXplKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGludCB0YXJnZXRYVmFsdWUgPSB0YXJnZXRYKCk7
CiAgICAgaW50IHRhcmdldFlWYWx1ZSA9IHRhcmdldFkoKTsKICAgICBpZiAoaGFzQXR0cmlidXRl
KFNWR05hbWVzOjp0YXJnZXRYQXR0cikgJiYgKHRhcmdldFhWYWx1ZSA8IDAgfHwgdGFyZ2V0WFZh
bHVlID49IG9yZGVyWFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpczogdGFy
Z2V0WCA9IGZsb29yICggb3JkZXJYIC8gMiApKQogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05h
bWVzOjp0YXJnZXRYQXR0cikpCiAgICAgICAgIHRhcmdldFhWYWx1ZSA9IHN0YXRpY19jYXN0PGlu
dD4oZmxvb3JmKG9yZGVyWFZhbHVlIC8gMikpOwogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OnRhcmdldFlBdHRyKSAmJiAodGFyZ2V0WVZhbHVlIDwgMCB8fCB0YXJnZXRZVmFsdWUgPj0g
b3JkZXJZVmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsg
fTsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoZSBkZWZhdWx0IHZhbHVlIGlzOiB0YXJnZXRZID0g
Zmxvb3IgKCBvcmRlclkgLyAyICkpCiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRh
cmdldFlBdHRyKSkKICAgICAgICAgdGFyZ2V0WVZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihmbG9v
cmYob3JkZXJZVmFsdWUgLyAyKSk7CkBAIC0yMzQsMTEgKzIzMywxMSBAQCBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyQgogICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlID0gMTsKICAgICB9CiAg
ICAgaWYgKGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUgPD0gMCB8fCBrZXJuZWxVbml0TGVuZ3RoWVZh
bHVlIDw9IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9Owog
CiAgICAgZmxvYXQgZGl2aXNvclZhbHVlID0gZGl2aXNvcigpOwogICAgIGlmIChoYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKSAmJiAhZGl2aXNvclZhbHVlKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6ZGl2aXNvckF0dHIpKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2Vy
bmVsTWF0cml4U2l6ZTsgKytpKQogICAgICAgICAgICAgZGl2aXNvclZhbHVlICs9IGtlcm5lbE1h
dHJpeC5pdGVtcygpW2ldLT52YWx1ZSgpOwpAQCAtMjQ2LDkgKzI0NSwxOCBAQCBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciogZmlsdGVyQgogICAgICAgICAgICAgZGl2aXNvclZhbHVlID0gMTsKICAgICB9CiAKLSAg
ICBhdXRvIGVmZmVjdCA9IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEludFNpemUo
b3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVlKSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50
KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJu
ZWxVbml0TGVuZ3RoWFZhbHVlLCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBo
YSgpLCBrZXJuZWxNYXRyaXgpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0
MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsKKyAgICAgICAgRkVDb252b2x2
ZU1hdHJpeDo6Y3JlYXRlKAorICAgICAgICAgICAgSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZ
VmFsdWUpLAorICAgICAgICAgICAgZGl2aXNvclZhbHVlLAorICAgICAgICAgICAgYmlhcygpLAor
ICAgICAgICAgICAgSW50UG9pbnQodGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpLAorICAgICAg
ICAgICAgZWRnZU1vZGUoKSwKKyAgICAgICAgICAgIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0
aFhWYWx1ZSwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSksCisgICAgICAgICAgICBwcmVzZXJ2ZUFs
cGhhKCksCisgICAgICAgICAgICBrZXJuZWxNYXRyaXgpLAorICAgICAgICB7IHsgKmlucHV0MSB9
IH0KKyAgICB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCmluZGV4IDg1YzAwMjY5OGM2Mjc3
ZTA0MzcwZDM1OTgyYTk1YjhkOTA0OWIzMzkuLjg0MjU5MDIwYTg2OTk2ODkwOTBkMjM1YTY5MDJl
NGEzMzFjOTdmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5oCkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9v
bCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCAxNTJjOTg1ZmQ4ZTk1YWU5
OTU3ZTZlMjFkNmJmMmExMGM0NTRiZGQ1Li43MWQ4YzdmMzkwZGJiZjUxOTIzZWYwNDEzOGM5NDVi
NzY2NWY5OTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVy
LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpAQCAtODksMTQgKzg5LDE0IEBA
IGJvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1
dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSB0aGlzLT5yZW5kZXJlcigpOwogICAgICAgICBBU1NFUlQocmVuZGVyZXIpOwogICAgICAgICBD
b2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVy
KHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKLSAgICAgICAg
cmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0TGlnaHRpbmdDb2xvcihjb2xvcik7CisgICAgICAg
IHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNldENvbG9yKGNvbG9yKTsKICAgICB9CiAgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQogICAgICAgICByZXR1cm4g
ZGlmZnVzZUxpZ2h0aW5nLT5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOwogICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0cikKICAgICAgICAgcmV0
dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0RGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCgp
KTsKIAotICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KGRp
ZmZ1c2VMaWdodGluZy0+bGlnaHRTb3VyY2UoKSk7CisgICAgYXV0byYgbGlnaHRTb3VyY2UgPSBj
b25zdF9jYXN0PExpZ2h0U291cmNlJj4oZGlmZnVzZUxpZ2h0aW5nLT5zb3VyY2UoKSk7CiAgICAg
Y29uc3QgU1ZHRkVMaWdodEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50
OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwogICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwogCkBA
IC0xNTEsMjggKzE1MSwyNSBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6bGln
aHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0RQogICAgIHByaW1pdGl2
ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVy
RWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0
MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1
dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlZlB0ciBsaWdo
dEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKICAg
ICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGln
aHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVs
ZW1lbnQtPmxpZ2h0U291cmNlKGZpbHRlcik7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVy
ZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCku
c3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNl
Q29uc3RhbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RG
TW92ZShsaWdodFNvdXJjZSkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0
MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVEaWZmdXNlTGlnaHRpbmc6
OmNyZWF0ZShjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFudCgpLCBrZXJuZWxV
bml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSks
IHsgeyAqaW5wdXQxIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKaW5kZXggNjg5OTk2MDlmNGI2YjU2YTc2Yzg4ZWE1
Njk1ZjFlMGU5ZTIwNTU4MC4uN2Q5OTQzMWUxNWVjYjZiM2JmNDBiZTJhZTIyMWY2OGQ1NjA2ZjY4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnQuaApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRl
ckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0
cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCmluZGV4IDBjNWU4MjViYzgyNTYwZjM2YTI2OWVhNmQ3
MjJkZmQwNTE3M2Q4YzIuLjkyN2IzNGYzN2FkNTYyNDFlOTA3NzYyNzI5ODExYTg1YWNiNTFhNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuY3BwCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50LmgiCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0
ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xMTUsMjAgKzExNSwx
NSBAQCB2b2lkIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAog
ewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7
Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsK
KyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBp
bnB1dDIgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4yKCkpOwogICAgIAogICAgIGlmICghaW5wdXQx
IHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3Qg
PSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvcigpLCB5
Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVz
ZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBp
bnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRl
KHhDaGFubmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBzY2FsZSgpKSwgeyB7ICpp
bnB1dDEgfSwgeyAqaW5wdXQyIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKaW5kZXggYWE5MWRmMzhiMzYyOThmMTIx
YTE0MTFjNGQwYWU1ZWNkNTg2NjVkMy4uMTIzNzgwOTA4NWFlZDIyNzViNWIwMTBmNDk4Y2ZmNmNi
NWJlNmRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuaApAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmli
dXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNl
dEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8
UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNW
R0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3Bl
cnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEg
eyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCmluZGV4IGE2ODZiYjhmYTM4ZDlkZGZh
MjhlMDJhZWQ5NWU0MWIwOGEzNmYyZjcuLjRjMTUzYmVhMThkNzdlY2I2YzBmMjJkN2ExYjFlMDEw
NDFiYjk1NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuY3BwCkBAIC0zNiw3ICszNiw3IEBAIFJlZjxTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ+
IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRv
Y3VtZW50KSk7CiB9CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
OjpsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKK1JlZjxMaWdodFNvdXJjZT4g
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBj
b25zdAogewogICAgIHJldHVybiBEaXN0YW50TGlnaHRTb3VyY2U6OmNyZWF0ZShhemltdXRoKCks
IGVsZXZhdGlvbigpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURp
c3RhbnRMaWdodEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuaAppbmRleCBmYmRmNzFjMGVjYmQ5Zjk5N2Q2OWVhNjU0YjlmNWJhMDMxN2Q3MWNj
Li40MTZmZTYwYmU3YjE2ZDkxODE1Y2IzOWVmNTIzYTlmNGU0ZWExZWIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oCkBAIC0zMCw3ICszMCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNv
dXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0U291
cmNlPiBsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIH07CiBz
dGF0aWNfYXNzZXJ0KHNpemVvZihTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQpID09IHNpemVvZihT
VkdGRUxpZ2h0RWxlbWVudCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hh
ZG93RWxlbWVudC5jcHAKaW5kZXggMjJiY2UxZDMzMzE3Yzk1NzFmZTVkNzlmNGIzMjZhODliZmM1
YjY4MS4uNzk1NGVjMjcwMWIzYTg2OGQ4ZDYwZGU5YzVlNDM0MzhjOTViZjQ2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcApAQCAtMjIsNyArMjIs
NyBAQAogI2luY2x1ZGUgIlNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaCIKIAogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKQEAgLTk3LDI3ICs5NywyNSBA
QCB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChz
dGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5
bGUmIHN2Z1N0eWxlID0gcmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAKICAgICBD
b2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVy
KHN2Z1N0eWxlLmZsb29kQ29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZs
b29kT3BhY2l0eSgpOwogCi0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEo
KSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZShmaWx0
ZXIsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBkeCgpLCBkeSgpLCBjb2xvciwg
b3BhY2l0eSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAg
cmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGREZXZp
YXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpLCB7
ICppbnB1dDEgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQuaAppbmRleCA5YjYyZDI0YjQ1NGJiN2QyNzU4ZTcxMmI2MjFiOGNiZTQyZjc0NTFk
Li41Mjc1YjFmY2EwMGViZjU1MWVhMGRkYWJiNDBiNTVkYmQyMDIxMGM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBz
dGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+
PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0
cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJp
bmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVkMGUxNjNmZjg3
ZDBiNGJjYWJkMjI0NDc1OGZjMi4uZTZiOGEyMzE4ZWNmNTQyZGRjNDhhZDBmMjljY2QzNDdmNzcy
NmE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCkBAIC01MCwy
NiArNTAsMjYgQEAgYm9vbCBTVkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWEKICAgICBGRUZsb29kKiBmbG9vZCA9
IHN0YXRpY19jYXN0PEZFRmxvb2QqPihlZmZlY3QpOwogCiAgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpmbG9vZF9jb2xvckF0dHIpCi0gICAgICAgIHJldHVybiBmbG9vZC0+c2V0Rmxvb2RD
b2xvcihzdHlsZS5zdmdTdHlsZSgpLmZsb29kQ29sb3IoKSk7CisgICAgICAgIHJldHVybiBmbG9v
ZC0+c2V0Q29sb3Ioc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZENvbG9yKCkpOwogICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6Zmxvb2Rfb3BhY2l0eUF0dHIpCi0gICAgICAgIHJldHVybiBmbG9v
ZC0+c2V0Rmxvb2RPcGFjaXR5KHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RPcGFjaXR5KCkpOworICAg
ICAgICByZXR1cm4gZmxvb2QtPnNldE9wYWNpdHkoc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZE9wYWNp
dHkoKSk7CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUZsb29kRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyJikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
dGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAKKyAgICAgICAgcmV0dXJuIHsgfTsKKwogICAgIGNvbnN0IFNWR1JlbmRlclN0
eWxlJiBzdmdTdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAKICAgICBDb2xv
ciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2
Z1N0eWxlLmZsb29kQ29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29k
T3BhY2l0eSgpOwogCi0gICAgcmV0dXJuIEZFRmxvb2Q6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBv
cGFjaXR5KTsKKyAgICByZXR1cm4geyBGRUZsb29kOjpjcmVhdGUoY29sb3IsIG9wYWNpdHkpLCB7
IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAppbmRleCBi
OTZhNDNhYTMxM2U3NWU0YTMxNjcyNDhhMWI2ZjVjZjUxZmVlOTExLi40ODA1ZTIzYTFjNzMwYTJj
YjFhY2Y3Y2MzN2VkOTNmYThhNWNiMTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVGbG9vZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVs
ZW1lbnQuaApAQCAtMzYsNyArMzYsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFNWR1Byb3BlcnR5
UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3Bl
cnR5UmVnaXN0cnk7IH0KIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRl
ckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAppbmRl
eCA3YTk5ODIyNGM5MjE5NTU1MjQ0YTg2OWNhNzhhODMwZDU2M2M1OTlkLi45YjZlZTA1MjkyMzk4
YzU1MWRiNzY2ODk0NzNhNGViMmQ4ZDJlMzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcApAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUg
IlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
Ci0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTk1LDE4ICs5NSwxNiBAQCB2b2lk
IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciog
ZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5w
dXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1
dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChzdGREZXZp
YXRpb25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUdhdXNzaWFu
Qmx1cjo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVk
Z2VNb2RlKCkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAg
IHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGRE
ZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZWRnZU1vZGUoKSksIHsgKmlucHV0MSB9IH07
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQu
aAppbmRleCBkODllMWE3NDhmYjJjNTA5ZTIxNGZlOTRhZTQxMDAxY2U0OGVlMGIyLi5lZmRiZjAw
OTUwNWIzMGY4MTllZDBhMmI0MjJiODNjMmE1ZDUwNTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0
dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVp
bGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1f
cHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBt
X2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCmluZGV4IGUxNDY4OGE1ZWIxNzZmMDJhMTZjMDU1MGYw
ODExOTVkM2MyN2VjNGYuLjYzODM2MTIwMWE1YzQ3NzQyMDYwOWQ0YzVhMDcyNWQ0ZDAyODRmNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAtMTc0LDE2ICsx
NzQsMTcgQEAgdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVz
b3VyY2UmLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6
bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpwYXJlbnRSZW5kZXJl
cik7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUltYWdlRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyJikgY29uc3QKIHsKICAgICBpZiAobV9jYWNoZWRJbWFnZSkK
LSAgICAgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShmaWx0ZXIsIG1fY2FjaGVk
SW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSksIHByZXNlcnZlQXNwZWN0UmF0aW8o
KSk7CisgICAgICAgIHJldHVybiB7IEZFSW1hZ2U6OmNyZWF0ZSh7ICptX2NhY2hlZEltYWdlLT5p
bWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpIH0sIHByZXNlcnZlQXNwZWN0UmF0aW8oKSksIHsg
fSB9OwogCiAgICAgYXV0byB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRG
cm9tSVJJU3RyaW5nKGhyZWYoKSwgdHJlZVNjb3BlKCkpOwogICAgIGlmIChpc0Rlc2NlbmRhbnRP
clNoYWRvd0Rlc2NlbmRhbnRPZih0YXJnZXQuZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2Uo
ZmlsdGVyLCB0cmVlU2NvcGUoKSwgaHJlZigpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiB7IH07CisvLyAgICByZXR1cm4geyBG
RUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCksIGhyZWYo
KSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKSwgeyB9IH07CiB9CiAKIHZvaWQgU1ZHRkVJbWFnZUVs
ZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+JiB1cmxz
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAppbmRleCBkOTNlMGQw
ZGI4Yjg4NjY1NDgwZjIxMDE1YTI1NmJhZGExNTRjNWM3Li5lZTEzOTlhNjA3YzM1MWY1ZWFlOTFh
YjU3MDhlOTg2NGRhZGNlMDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQu
aApAQCAtNTUsNyArNTUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRGaW5pc2hJbnNlcnRp
bmdOb2RlKCkgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxS
ZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZH
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNsZWFyUmVzb3VyY2VSZWZlcmVu
Y2VzKCk7CiAgICAgdm9pZCByZXF1ZXN0SW1hZ2VSZXNvdXJjZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVMaWdodEVsZW1lbnQuaAppbmRleCBjZDBiZmI5ZWRjZmQ3YjRlMWFmMzliNTVlZGJiYmQ3
ODRhYWVhODlkLi4zZmZlNDhmNDQwOTc0ZWU3YTkxZGZkZmVhMTI0NGZhNzQ2ZmQ1MzJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaApAQCAtMjcsMTIgKzI3LDEyIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKK2NsYXNzIFNW
R0ZpbHRlcjsKIAogY2xhc3MgU1ZHRkVMaWdodEVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCB7
CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdGRUxpZ2h0RWxlbWVudCk7CiBwdWJsaWM6
Ci0gICAgdmlydHVhbCBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNl
KGNvbnN0IFNWR0ZpbHRlciYpIGNvbnN0ID0gMDsKICAgICBzdGF0aWMgU1ZHRkVMaWdodEVsZW1l
bnQqIGZpbmRMaWdodEVsZW1lbnQoY29uc3QgU1ZHRWxlbWVudCopOwogCiAgICAgZmxvYXQgYXpp
bXV0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXppbXV0aC0+Y3VycmVudFZhbHVlKCk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCmluZGV4IGE1NzJhZDUzZDlmMWQ2NWRh
M2RlZjRkNTExM2Q1MGE0MjUyMTg4OGEuLmQ0YTI5NjQ2OGMyMDYyZjRmZGRjZTJiNzBhN2JiYjIx
Yzc4YjViYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcApAQCAt
MjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIkZFTWVyZ2UuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKICNpbmNsdWRlICJTVkdGRU1lcmdlTm9kZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdG
aWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgogCkBAIC00NCwyNCArNDMsMjIgQEAgUmVmPFNWR0ZFTWVyZ2VFbGVt
ZW50PiBTVkdGRU1lcmdlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIEQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRU1lcmdlRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIp
IGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRl
ckVmZmVjdD4+PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNv
bnN0CiB7Ci0gICAgYXV0byBlZmZlY3QgPSBGRU1lcmdlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBh
dXRvJiBtZXJnZUlucHV0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7CisgICAgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+PiBtZXJnZUlucHV0czsKIAogICAgIGZvciAoYXV0byYgbWVyZ2VOb2Rl
IDogY2hpbGRyZW5PZlR5cGU8U1ZHRkVNZXJnZU5vZGVFbGVtZW50PigqdGhpcykpIHsKLSAgICAg
ICAgYXV0byBtZXJnZUVmZmVjdCA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQobWVyZ2VO
b2RlLmluMSgpKTsKKyAgICAgICAgYXV0byBtZXJnZUVmZmVjdCA9IGZpbHRlci5uYW1lZEVmZmVj
dChtZXJnZU5vZGUuaW4xKCkpOwogICAgICAgICBpZiAoIW1lcmdlRWZmZWN0KQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1lcmdlSW5wdXRzLmFwcGVuZChXVEZNb3ZlKG1l
cmdlRWZmZWN0KSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBtZXJnZUlucHV0
cy5hcHBlbmQobWVyZ2VFZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQogCiAgICAgbWVy
Z2VJbnB1dHMuc2hyaW5rVG9GaXQoKTsKLQogICAgIGlmIChtZXJnZUlucHV0cy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0
dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRU1lcmdlOjpjcmVhdGUobWVyZ2VJbnB1dHMuc2l6
ZSgpKSwgV1RGTW92ZShtZXJnZUlucHV0cykgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVNZXJnZUVsZW1lbnQuaAppbmRleCA3NDUwODY4MTZmNjk3NmM2Njk3ZGM1MTA3NTgwMmQyODNj
ZjRlM2MyLi5mNGQ1MDg4YTMyMmFmZGM5M2U0NTZjMTBjMzVhNmI5NDRiNzQwMGZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaApAQCAtMzUsNyArMzUsNyBAQCBwcml2YXRl
OgogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8
U1ZHRkVNZXJnZUVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz47
CiAgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVy
dHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAppbmRleCBkNmZiOTVjOGUzNzc2
ZTZkMjA5M2JlYWNlMzVlMmVkMTc5NWQzMjFiLi42YTk0YTVkZTE2NGQ0N2VlNjEyZTVmYjllNzcy
MTcyODg4MWIxNGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuY3BwCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVy
QnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KQEAgLTM5LDcgKzM5LDcgQEAgaW5saW5lIFNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmEKICAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CiAgICAgc3RkOjpjYWxsX29uY2Uob25j
ZUZsYWcsIFtdIHsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxT
VkdOYW1lczo6aW5BdHRyLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9pbjE+KCk7Ci0gICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9y
QXR0ciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1f
c3ZnT3BlcmF0b3I+KCk7CisgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVy
dHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgTW9ycGhvbG9neU9wZXJhdG9yLCAmU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6bV9tb3JwaG9sb2d5T3BlcmF0b3I+KCk7CiAgICAgICAgIFByb3BlcnR5
UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OnJhZGl1c0F0dHIsICZTVkdGRU1v
cnBob2xvZ3lFbGVtZW50OjptX3JhZGl1c1gsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3Jh
ZGl1c1k+KCk7CiAgICAgfSk7CiB9CkBAIC01OSw5ICs1OSw5IEBAIHZvaWQgU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudDo6c2V0UmFkaXVzKGZsb2F0IHgsIGZsb2F0IHkpCiB2b2lkIFNWR0ZFTW9ycGhv
bG9neUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNv
bnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcGVy
YXRvckF0dHIpIHsKLSAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBwcm9wZXJ0eVZhbHVl
ID0gU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZyb21TdHJpbmco
dmFsdWUpOworICAgICAgICBNb3JwaG9sb2d5T3BlcmF0b3IgcHJvcGVydHlWYWx1ZSA9IFNWR1By
b3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OmZyb21TdHJpbmcodmFsdWUpOwogICAg
ICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCi0gICAgICAgICAgICBtX3N2Z09wZXJhdG9yLT5z
ZXRCYXNlVmFsSW50ZXJuYWw8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4ocHJvcGVydHlWYWx1ZSk7
CisgICAgICAgICAgICBtX21vcnBob2xvZ3lPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1v
cnBob2xvZ3lPcGVyYXRvcj4ocHJvcGVydHlWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnMKIHsKICAgICBGRU1v
cnBob2xvZ3kqIG1vcnBob2xvZ3kgPSBzdGF0aWNfY2FzdDxGRU1vcnBob2xvZ3kqPihlZmZlY3Qp
OwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAgICAgICBy
ZXR1cm4gbW9ycGhvbG9neS0+c2V0TW9ycGhvbG9neU9wZXJhdG9yKHN2Z09wZXJhdG9yKCkpOwor
ICAgICAgICByZXR1cm4gbW9ycGhvbG9neS0+c2V0TW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xv
Z3lPcGVyYXRvcigpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIp
IHsKICAgICAgICAgLy8gQm90aCBzZXRSYWRpdXMgZnVuY3Rpb25zIHNob3VsZCBiZSBldmFsdWF0
ZWQgc2VwYXJhdGVseS4KICAgICAgICAgYm9vbCBpc1JhZGl1c1hDaGFuZ2VkID0gbW9ycGhvbG9n
eS0+c2V0UmFkaXVzWChyYWRpdXNYKCkpOwpAQCAtMTE0LDIxICsxMTQsMTggQEAgdm9pZCBTVkdG
RU1vcnBob2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKICAgICBmbG9hdCB4UmFkaXVzID0gcmFk
aXVzWCgpOwogICAgIGZsb2F0IHlSYWRpdXMgPSByYWRpdXNZKCk7CisgICAgaWYgKHhSYWRpdXMg
PCAwIHx8IHlSYWRpdXMgPCAwKQorICAgICAgICByZXR1cm4geyB9OwogCisgICAgYXV0byBpbnB1
dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICh4UmFkaXVzIDwgMCB8fCB5UmFkaXVzIDwgMCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRv
IGVmZmVjdCA9IEZFTW9ycGhvbG9neTo6Y3JlYXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgeFJh
ZGl1cywgeVJhZGl1cyk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07
Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRU1vcnBob2xvZ3k6OmNyZWF0ZSht
b3JwaG9sb2d5T3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyksIHsgeyAqaW5wdXQxIH0gfSB9
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaAppbmRleCAxYTkwODhiNzVjZjhkODVhZTM4ZjI5M2UxMTE5OGE2
NmY2NmFhNjY5Li5jYmY5NWI5M2RiM2JhOGVhNWNjYzE1ZGVmZDM1NWFkNjI0MTQ4OGE4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKQEAgLTI2LDEyICsy
NiwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZHUHJv
cGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4geworc3RydWN0IFNWR1Byb3BlcnR5
VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj4gewogICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0
RW51bVZhbHVlKCkgeyByZXR1cm4gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURTsgfQogCi0g
ICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCisg
ICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9w
ZXJhdG9yKQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIHN3aXRjaCAo
bW9ycGhvbG9neU9wZXJhdG9yKSB7CiAgICAgICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9S
X1VOS05PV046CiAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICAgICAgY2Fz
ZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU6CkBAIC00NCw3ICs0NCw3IEBAIHN0cnVjdCBT
VkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPiB7CiAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwogICAgIH0KIAotICAgIHN0YXRpYyBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBzdGF0aWMgTW9ycGhvbG9n
eU9wZXJhdG9yIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICh2YWx1ZSA9PSAiZXJvZGUiKQogICAgICAgICAgICAgcmV0dXJuIEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERTsKQEAgLTYyLDEyICs2MiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRS
YWRpdXMoZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAKICAgICBTdHJpbmcgaW4xKCkg
Y29uc3QgeyByZXR1cm4gbV9pbjEtPmN1cnJlbnRWYWx1ZSgpOyB9Ci0gICAgTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSBzdmdPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3ItPmN1
cnJlbnRWYWx1ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPigpOyB9CisgICAgTW9ycGhvbG9neU9w
ZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9w
ZXJhdG9yLT5jdXJyZW50VmFsdWU8TW9ycGhvbG9neU9wZXJhdG9yPigpOyB9CiAgICAgZmxvYXQg
cmFkaXVzWCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWC0+Y3VycmVudFZhbHVlKCk7IH0KICAg
ICBmbG9hdCByYWRpdXNZKCkgY29uc3QgeyByZXR1cm4gbV9yYWRpdXNZLT5jdXJyZW50VmFsdWUo
KTsgfQogCiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIGluMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9p
bjE7IH0KLSAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBzdmdPcGVyYXRvckFuaW1hdGVkKCkg
eyByZXR1cm4gbV9zdmdPcGVyYXRvcjsgfQorICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIG1v
cnBob2xvZ3lPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9tb3JwaG9sb2d5T3BlcmF0b3I7
IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgcmFkaXVzWEFuaW1hdGVkKCkgeyByZXR1cm4gbV9y
YWRpdXNYOyB9CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXImIHJhZGl1c1lBbmltYXRlZCgpIHsgcmV0
dXJuIG1fcmFkaXVzWTsgfQogCkBAIC04MSwxMSArODEsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAg
ICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxl
PFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChT
VkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9w
ZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4x
IHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwotICAgIFJlZjxTVkdBbmltYXRl
ZEVudW1lcmF0aW9uPiBtX3N2Z09wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkgfTsKKyAgICBSZWY8U1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbj4gbV9tb3JwaG9sb2d5T3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1l
cmF0aW9uOjpjcmVhdGUodGhpcywgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKSB9OwogICAg
IFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9yYWRpdXNYIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNy
ZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9yYWRpdXNZIHsgU1ZH
QW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbAppbmRleCBhMmMxODFmMmU2MzdjZDM5MDk4ZWJl
NjllNjA5OGFiZTNjMzg1Y2QxLi4yZDIxZjJhMWQ4ODhkMDJlYzE3OWRmMTBlMmRlNDNmYzY1Mjk3
ZDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRs
CkBAIC0zMyw3ICszMyw3IEBACiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU1ZHX01PUlBIT0xP
R1lfT1BFUkFUT1JfRElMQVRFICAgPSAyOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0Fu
aW1hdGVkU3RyaW5nICAgICAgaW4xOwotICAgIFtJbXBsZW1lbnRlZEFzPXN2Z09wZXJhdG9yXSBy
ZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKKyAgICBb
SW1wbGVtZW50ZWRBcz1tb3JwaG9sb2d5T3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdB
bmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdB
bmltYXRlZE51bWJlciAgICAgIHJhZGl1c1g7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0Fu
aW1hdGVkTnVtYmVyICAgICAgcmFkaXVzWTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmNwcAppbmRleCAwMzgyNjhiODliMmYxOWY5YmU1Njg3MzlkMTIzMDM1NDEwMGE1
ZWU3Li5kYzY5MmRhYmJhZmM0ZDZiNmFmM2U0NDJlY2M4NWMxNThjZDAxMjYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcApAQCAtMjQsNyArMjQsNyBAQAogCiAj
aW5jbHVkZSAiRkVPZmZzZXQuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRl
ICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC04MSwx
NiArODEsMTMgQEAgdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVm
UHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFT2Zmc2V0
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1
dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5w
dXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGVmZmVj
dCA9IEZFT2Zmc2V0OjpjcmVhdGUoZmlsdGVyLCBkeCgpLCBkeSgpKTsKLSAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVy
biB7IEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSksIHsgeyAqaW5wdXQxIH0gfSB9OwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKaW5kZXggNTc0NzNkY2M3
MmRiNjdiMTI1ZWEyZWQ0NjVlMzViNTczNzA0OWJlZS4uM2VlODhjZWZkZDI1MmU3MjBiY2M0MDZj
YTY1MTE3NDFkMDZlZDE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zm
c2V0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQu
aApAQCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lk
IHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExp
Z2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVu
dC5jcHAKaW5kZXggOWZmODQ3MzM4YTFiNmE1NWZjZGI4MjFhMDlmMGFjYzNjMjA3ZWE4MS4uZGI5
MzdjYTE1MGI4NDQxYjk0NWI0YjA1ZTcyMGFmYmQ3N2FhNTkzOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcApAQCAtMjIsNyArMjIsNiBAQAogCiAj
aW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJQb2ludExpZ2h0U291cmNl
LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApAQCAtMzksMTkgKzM4LDE5IEBAIFJlZjxT
VkdGRVBvaW50TGlnaHRFbGVtZW50PiBTVkdGRVBvaW50TGlnaHRFbGVtZW50OjpjcmVhdGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRVBvaW50TGln
aHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZH
RkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRl
cikgY29uc3QKK1JlZjxMaWdodFNvdXJjZT4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRT
b3VyY2UoY29uc3QgU1ZHRmlsdGVyJikgY29uc3QKIHsKICAgICBGbG9hdFBvaW50M0QgcG9zaXRp
b247Ci0gICAgaWYgKGJ1aWxkZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNW
R19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVy
ZW5jZUJveCA9IGJ1aWxkZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKLSAgICAgICAgCi0gICAgICAg
IHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0
aCgpKTsKLSAgICAgICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVm
ZXJlbmNlQm94LmhlaWdodCgpKTsKLQotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIv
U1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53
My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAg
ICAgcG9zaXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWlu
WE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdv
RmxvYXQpOwotICAgIH0gZWxzZQotICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCks
IHkoKSwgeigpKTsKKy8vICAgIGlmIChmaWx0ZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0
VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKy8vICAgICAgICBGbG9h
dFJlY3QgcmVmZXJlbmNlQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7CisvLworLy8g
ICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJv
eC53aWR0aCgpKTsKKy8vICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5
KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOworLy8KKy8vICAgICAgICAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBo
dHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNl
bnRhZ2UKKy8vICAgICAgICBwb3NpdGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJl
ZmVyZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIo
KSkgLyBzcXJ0T2ZUd29GbG9hdCk7CisvLyAgICB9IGVsc2UKKy8vICAgICAgICBwb3NpdGlvbiA9
IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKICAgICAKICAgICByZXR1cm4gUG9pbnRMaWdo
dFNvdXJjZTo6Y3JlYXRlKHBvc2l0aW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudC5oCmluZGV4IDMzYTViZDc0OTIwODI4Yzk5ODY0NWI3MjJmNzJhNzQ1
ZTQ4ZGE3OWUuLmNkZWJlNDc2MTg0NzMxNWIyYjliODY2YzIwMTRjMGQzODI5ZWMxZmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaApAQCAtMzAsNyArMzAs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0
U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8TGlnaHRT
b3VyY2U+IGxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsK
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQpID09IHNpemVvZihT
VkdGRUxpZ2h0RWxlbWVudCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggOWI3Y2U0MGFiOTcxNmFlNGYzMzVmNTRi
MjRjZGE0NTlhODQyOWE1OS4uYzExNjQxYjBlMjBiNmI2NTBjOWJkNjdiOWRkNDY4MjhiOWQ2ZGQ1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpAQCAtOTYsNyArOTYsNyBAQCBib29sIFNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqIGVmZmVjdAogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+
cmVuZGVyZXIoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKICAgICAgICAgQ29sb3IgY29s
b3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJl
ci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0gICAgICAgIHJldHVybiBz
cGVjdWxhckxpZ2h0aW5nLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJu
IHNwZWN1bGFyTGlnaHRpbmctPnNldENvbG9yKGNvbG9yKTsKICAgICB9CiAgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQogICAgICAgICByZXR1cm4gc3BlY3Vs
YXJMaWdodGluZy0+c2V0U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKQEAgLTEwNSw3ICsx
MDUsNyBAQCBib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVj
dEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpCiAgICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0
aW5nLT5zZXRTcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQoKSk7CiAKLSAgICBhdXRv
JiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihzcGVjdWxhckxpZ2h0aW5n
LT5saWdodFNvdXJjZSgpKTsKKyAgICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGln
aHRTb3VyY2UmPihzcGVjdWxhckxpZ2h0aW5nLT5zb3VyY2UoKSk7CiAgICAgY29uc3QgU1ZHRkVM
aWdodEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRF
bGVtZW50KHRoaXMpOwogICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwogCkBAIC0xNjAsMjggKzE2
MCwzMSBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdodAogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBG
aWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
QnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgUmVmUHRyIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50Ojpm
aW5kTGlnaHRFbGVtZW50KHRoaXMpOwotICAgIGlmICghbGlnaHRFbGVtZW50KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50
LT5saWdodFNvdXJjZSgqZmlsdGVyQnVpbGRlcik7CisgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJl
bmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAKLSAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0Nv
bG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsK
LQotICAgIGF1dG8gZWZmZWN0ID0gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoZmlsdGVyLCBj
b2xvciwgc3VyZmFjZVNjYWxlKCksIHNwZWN1bGFyQ29uc3RhbnQoKSwgc3BlY3VsYXJFeHBvbmVu
dCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxp
Z2h0U291cmNlKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0g
ICAgcmV0dXJuIGVmZmVjdDsKKyAgICBSZWZQdHIgbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVs
ZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7CisgICAgaWYgKCFsaWdodEVsZW1lbnQpCisg
ICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgcmV0dXJuIHsKKyAgICAgICAgRkVTcGVjdWxh
ckxpZ2h0aW5nOjpjcmVhdGUoCisgICAgICAgICAgICByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5
QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5n
Q29sb3IoKSksCisgICAgICAgICAgICBzdXJmYWNlU2NhbGUoKSwKKyAgICAgICAgICAgIHNwZWN1
bGFyQ29uc3RhbnQoKSwKKyAgICAgICAgICAgIHNwZWN1bGFyRXhwb25lbnQoKSwKKyAgICAgICAg
ICAgIGtlcm5lbFVuaXRMZW5ndGhYKCksCisgICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWSgp
LAorICAgICAgICAgICAgbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZShmaWx0ZXIpKSwKKyAgICAg
ICAgeyB7ICppbnB1dDEgfSB9CisgICAgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKaW5kZXggODk3YjhkZTE1NmQxYzc5
YTFkM2ZkOGIzMTE4ZTJhYjYzYjQ3YjE0Ni4uNTJkMDEzMjU3MjE4YTJkMDU5ZDM1ODk1NTRiMmE3
MmZhNTNlNWU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5oCkBAIC01OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJv
b2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQ
dHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmls
dGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlS
ZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNW
R0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKaW5kZXggZDZkYTMxMDY0Y2IxYjM3ZThjYzkzODc0ZWE0
YWE5Y2YyZGZiZmZlZS4uOTA0YzhhYmExNDRkZDRhZTNhODZjMDBhN2Q5NDhkZDE5NGJhNTlhNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKQEAgLTIx
LDcgKzIxLDYgQEAKICNpbmNsdWRlICJTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCIKIAogI2luY2x1
ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTM5LDI3ICszOCwyNyBAQCBSZWY8U1ZHRkVTcG90
TGlnaHRFbGVtZW50PiBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFU3BvdExpZ2h0RWxlbWVu
dCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFU3BvdExp
Z2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QK
K1JlZjxMaWdodFNvdXJjZT4gU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShjb25z
dCBTVkdGaWx0ZXImKSBjb25zdAogewogICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbjsKICAgICBG
bG9hdFBvaW50M0QgcG9pbnRzQXQ7Ci0KLSAgICBpZiAoYnVpbGRlci5wcmltaXRpdmVVbml0cygp
ID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAg
ICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gYnVpbGRlci50YXJnZXRCb3VuZGluZ0JveCgp
OwotICAgICAgICAKLSAgICAgICAgcG9zaXRpb24uc2V0WChyZWZlcmVuY2VCb3gueCgpICsgeCgp
ICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5j
ZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotICAgICAgICAvLyBodHRw
czovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRl
IGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0
X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9zaXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5j
ZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29y
bmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOwotCi0gICAgICAgIHBvaW50c0F0LnNldFgocmVmZXJl
bmNlQm94LngoKSArIHBvaW50c0F0WCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAg
ICBwb2ludHNBdC5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyBwb2ludHNBdFkoKSAqIHJlZmVyZW5j
ZUJveC5oZWlnaHQoKSk7Ci0gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmls
dGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQotICAgICAgICBwb2lu
dHNBdC5zZXRaKHBvaW50c0F0WigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1p
blhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3
b0Zsb2F0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4
KCksIHkoKSwgeigpKTsKLSAgICAgICAgcG9pbnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRY
KCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFooKSk7Ci0gICAgfQorLy8KKy8vICAgIGlmIChmaWx0
ZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNU
Qk9VTkRJTkdCT1gpIHsKKy8vICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gZmlsdGVy
LnRhcmdldEJvdW5kaW5nQm94KCk7CisvLworLy8gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJl
bmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKKy8vICAgICAgICBwb3Np
dGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkp
OworLy8gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2Zl
UG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRz
Lmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQorLy8gICAgICAgIHBvc2l0aW9uLnNldFoo
eigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJl
ZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vCisvLyAg
ICAgICAgcG9pbnRzQXQuc2V0WChyZWZlcmVuY2VCb3gueCgpICsgcG9pbnRzQXRYKCkgKiByZWZl
cmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAgICAgcG9pbnRzQXQuc2V0WShyZWZlcmVuY2VCb3gu
eSgpICsgcG9pbnRzQXRZKCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOworLy8gICAgICAgIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRy
aWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmll
d3BvcnRfcGVyY2VudGFnZQorLy8gICAgICAgIHBvaW50c0F0LnNldFoocG9pbnRzQXRaKCkgKiBl
dWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNl
Qm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOworLy8gICAgfSBlbHNlIHsK
Ky8vICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKKy8vICAg
ICAgICBwb2ludHNBdCA9IEZsb2F0UG9pbnQzRChwb2ludHNBdFgoKSwgcG9pbnRzQXRZKCksIHBv
aW50c0F0WigpKTsKKy8vICAgIH0KIAogICAgIHJldHVybiBTcG90TGlnaHRTb3VyY2U6OmNyZWF0
ZShwb3NpdGlvbiwgcG9pbnRzQXQsIHNwZWN1bGFyRXhwb25lbnQoKSwgbGltaXRpbmdDb25lQW5n
bGUoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKaW5k
ZXggM2Y3NzE3YzEyNjVjNGYzMWY1MzA4ODY4ZDQ3Yzk3ODc5N2E3MzIxMS4uYmU5OGZiZWQ4NjZj
NWJjZTJmOTk3NTczZjc1OWJhNDIzMzI1Yzc3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVNwb3RMaWdodEVsZW1lbnQuaApAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFNWR0ZFU3BvdExpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQm
KTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3Qg
U1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoU1ZH
RkVTcG90TGlnaHRFbGVtZW50KSA9PSBzaXplb2YoU1ZHRkVMaWdodEVsZW1lbnQpKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCmluZGV4IDM5YmRjYzc3MzU5NjY1MDM2
ZTFhZTc0NzYxMmVhZDZmOWFjMzczNzAuLjdkZjI1MmRhYTY2M2QwYjBhZWMxNWI4MTRhZTIzMGUz
NjE3NDFhZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKQEAgLTI0
LDcgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkZFVGlsZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIu
aCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTcwLDE2ICs3MCwxMyBAQCB2b2lk
IFNWR0ZFVGlsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwg
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBW
ZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRVRpbGVFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZl
Y3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoZmls
dGVyKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1
cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFVGlsZTo6Y3JlYXRlKCksIHsgKmlucHV0MSB9IH07
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCmluZGV4IDQ1YjMyNzE4
NTFkN2ZjMGRjMmQzYmNjODc5YTIyZGM0MmEzM2E5MWYuLjcxYTk3NDY4Mzc2MGFkYzAxNmNjNmRl
YmVlMzVhMTkxMzUyZWRjN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRp
bGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaApA
QCAtNDIsNyArNDIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAg
IFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRl
KHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNl
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5j
cHAKaW5kZXggMTE1NjExMTlkODNlM2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0ZC4uY2ZkNGFk
MjE2ZmE0YTlkNGQzYmJkMDIwNzc5ZGFhNjhlODVjN2ZlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcApAQCAtMTE3LDExICsxMTcsMTEgQEAgdm9p
ZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlciYpIGNvbnN0CiB7CiAgICAgaWYgKGJhc2VGcmVxdWVuY3lYKCkgPCAwIHx8IGJhc2VG
cmVxdWVuY3lZKCkgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gRkVU
dXJidWxlbmNlOjpjcmVhdGUoZmlsdGVyLCB0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VG
cmVxdWVuY3lZKCksIG51bU9jdGF2ZXMoKSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19T
VElUQ0hUWVBFX1NUSVRDSCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgRkVU
dXJidWxlbmNlOjpjcmVhdGUodHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5
WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQ
RV9TVElUQ0gpLCB7IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1
bGVuY2VFbGVtZW50LmgKaW5kZXggYmY5ZGEyMmFkNDJlNDEwYTEwNDM1ZTBhNDBlMzQyNjc3Njll
MTk4YS4uYjkxNGRmMzhjYmEwMGZkNzhiMzhmNDJjM2IwZmIwMDJlODIyYTU5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCkBAIC0xMTksNyArMTE5LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAg
ICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fYmFzZUZyZXF1ZW5jeVggeyBTVkdBbmltYXRlZE51
bWJlcjo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5j
cHAKaW5kZXggODEzYmNiZDA4MjBjYWM2NzdhNzk3ZjI3YmNjZThjZTEwOTEyYmM0Ny4uZGY2MDRi
YTJhNmNkNzY4NjJjOTMzMjJkNmM3ZGM4OTNkYjdlOWVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaWx0ZXJFbGVtZW50LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlNWR0ZpbHRl
ckVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCi0jaW5j
bHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZH
UGFyc2VyVXRpbGl0aWVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCmluZGV4IGZmNTIyMzA5NDY2
YjA0MGJlZjA4OWQxNTdiMzg2ZGZmYmIwNWM2MTkuLjc3MWE0MTZlZjBlZjA1NTgyZDcyOTgxYTMw
Y2M5ZDYyZTY1MjlmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCkBAIC0yNSw5ICsyNSw3IEBA
CiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkzLDIyICs5MSw2IEBAIHZvaWQgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjaGlsZHJlbkNoYW5nZWQoY29uc3Qg
Q2hpbGRDaGFuZ2UmIGNoCiAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRlckVm
ZmVjdCogZmlsdGVyRWZmZWN0KSBjb25zdAotewotICAgIEFTU0VSVChmaWx0ZXJFZmZlY3QpOwot
ICAgIGlmICghZmlsdGVyRWZmZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzQXR0
cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWCh0
cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp5QXR0cikpCi0gICAgICAgIGZp
bHRlckVmZmVjdC0+c2V0SGFzWSh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVz
Ojp3aWR0aEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1dpZHRoKHRydWUpOwot
ICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIpKQotICAgICAgICBmaWx0
ZXJFZmZlY3QtPnNldEhhc0hlaWdodCh0cnVlKTsKLX0KLQogUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y3JlYXRlRWxlbWVudFJl
bmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpCiB7
CiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCmluZGV4IGM5OGIx
M2VkOTYyNzZhZjllMTRmNjQyODExYTZmZDc0Njc3MmFjYTcuLmVjMjY5ZjAzYzQzNjE3Mjg1YzJj
ZTA2Nzg1MjE0YWQ3YWFmMDVmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKQEAgLTMxLDE3ICszMSwx
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVm
ZmVjdDsKLWNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CitjbGFzcyBTVkdGaWx0ZXI7CiAKIGNsYXNz
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1YmxpYyBTVkdFbGVtZW50
IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcyk7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmls
dGVyRWZmZWN0KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCA9IDA7Ci0gICAgLy8gUmV0dXJu
cyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLgot
ICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0Kiwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwotCiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNW
R1Byb3BlcnR5T3duZXJSZWdpc3RyeTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMsIFNWR0VsZW1lbnQ+OwogCiAgICAgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHgoKSBjb25zdCB7
IHJldHVybiBtX3gtPmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC01Niw2ICs1MCwxMCBAQCBwdWJsaWM6
CiAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgmIGhlaWdodEFuaW1hdGVkKCkgeyByZXR1cm4gbV9oZWln
aHQ7IH0KICAgICBTVkdBbmltYXRlZFN0cmluZyYgcmVzdWx0QW5pbWF0ZWQoKSB7IHJldHVybiBt
X3Jlc3VsdDsgfQogCisgICAgdmlydHVhbCBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCA9IDA7
CisgICAgLy8gUmV0dXJucyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9t
IHRoZSBvbGQgb25lLgorICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUo
RmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOworCiBwcm90ZWN0ZWQ6CiAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFSW1hZ2UuY3BwCmluZGV4IDM4NWFmMjkwODQ4YTNkMGI4M2YxMmFjOTYxOWU2YmY5
NmM5ZjIzOTYuLmJkYzViZTViMGNlNzlkOGJjNzEwY2FmYzQ1Mzc1NmVlYzBhOTcwZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3Bw
CkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywxMzAgKzI0LDcxIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5o
IgotI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVy
ZW5jZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQdHI8SW1hZ2U+
IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0
UmF0aW8pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKLSAgICAsIG1f
aW1hZ2UoaW1hZ2UpCi0gICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RS
YXRpbykKK1JlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGUoUmVmPEltYWdlPiBpbWFnZSwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoV1RGTW92ZShpbWFnZSksIHByZXNlcnZl
QXNwZWN0UmF0aW8pKTsKIH0KIAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgVHJl
ZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0
KGZpbHRlciwgVHlwZTo6SW1hZ2UpCi0gICAgLCBtX3RyZWVTY29wZSgmdHJlZVNjb3BlKQotICAg
ICwgbV9ocmVmKGhyZWYpCitGRUltYWdlOjpGRUltYWdlKFJlZjxJbWFnZT4gaW1hZ2UsIGNvbnN0
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKKyAgICA6
IG1faW1hZ2UoV1RGTW92ZShpbWFnZSkpCiAgICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJl
c2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdp
dGhJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorRmxvYXRSZWN0IEZF
SW1hZ2U6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JikgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKGZp
bHRlciwgaW1hZ2UsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKKyAgICByZXR1cm4geyB9OworLy8g
ICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFw
UmVjdChmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7CisvLworLy8gICAgRmxvYXRSZWN0IHNy
Y1JlY3QgPSB7IHsgfSwgbV9pbWFnZS0+c2l6ZSgpIH07CisvLyAgICBtX3ByZXNlcnZlQXNwZWN0
UmF0aW8udHJhbnNmb3JtUmVjdChwYWludFJlY3QsIHNyY1JlY3QpOworLy8KKy8vICAgIGlmIChj
bGlwc1RvQm91bmRzKCkpCisvLyAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RS
ZWN0KCkpOworLy8gICAgZWxzZQorLy8gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RS
ZWN0KCkpOworLy8KKy8vICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCk7CiB9
CiAKLVJlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYg
ZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCitib29sIEZF
SW1hZ2U6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZm
ZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
SW1hZ2UoZmlsdGVyLCB0cmVlU2NvcGUsIGhyZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKLX0K
LQotdm9pZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxv
YXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChm
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3Q7Ci0gICAg
aWYgKG1faW1hZ2UpIHsKLSAgICAgICAgc3JjUmVjdC5zZXRTaXplKG1faW1hZ2UtPnNpemUoKSk7
Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwg
c3JjUmVjdCk7Ci0gICAgfSBlbHNlIGlmIChSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVy
ZW5jZWRSZW5kZXJlcigpKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFu
c2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
KTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNl
Y3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZSht
YXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QocGFpbnRSZWN0KSk7CisvLyAgICBBU1NFUlQoc291cmNlSW1hZ2UpOworLy8KKy8vICAgIGF1
dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKy8vICAgIGlmICghcmVzdWx0
SW1hZ2UpCisvLyAgICAgICAgcmV0dXJuIGZhbHNlOworLy8KKy8vICAgIEZsb2F0UmVjdCBkZXN0
UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKSk7CisvLyAgICBGbG9hdFJlY3Qgc3JjUmVjdCA9IEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7CisvLyAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8u
dHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVjdCk7CisvLworLy8gICAgSW50UG9pbnQgcGFp
bnRMb2NhdGlvbiA9IGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKKy8vICAgIGRlc3RS
ZWN0Lm1vdmUoLXBhaW50TG9jYXRpb24ueCgpLCAtcGFpbnRMb2NhdGlvbi55KCkpOworLy8KKy8v
ICAgIHJlc3VsdEltYWdlLmNvbnRleHQoKS5kcmF3SW1hZ2UoKm1faW1hZ2UsIGRlc3RSZWN0LCBz
cmNSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUmVuZGVyRWxlbWVudCogRkVJbWFnZTo6
cmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3QKK0ZpbHRlclJlc3VsdCogRkVJbWFnZTo6YXBwbHko
RmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKikg
Y29uc3QKIHsKLSAgICBpZiAoIW1fdHJlZVNjb3BlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBhdXRvIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklT
dHJpbmcobV9ocmVmLCAqbV90cmVlU2NvcGUpOwotICAgIGlmICghaXM8U1ZHRWxlbWVudD4odGFy
Z2V0LmVsZW1lbnQpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gdGFyZ2V0
LmVsZW1lbnQtPnJlbmRlcmVyKCk7Ci19Ci0KLXZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKLXsKLSAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5k
ZXJlcigpOwotICAgIGlmICghbV9pbWFnZSAmJiAhcmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpCi0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFn
ZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCku
bWFwUmVjdChmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7Ci0KLSAgICBGbG9hdFJlY3Qgc3Jj
UmVjdDsKLSAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgIHNyY1JlY3QgPSBmaWx0ZXIoKS5hYnNv
bHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkpOwotICAgIGVsc2UgewotICAgICAgICBzcmNSZWN0ID0gRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKLSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlv
LnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOwotICAgIH0KLQotICAgIEludFBvaW50
IHBhaW50TG9jYXRpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgZGVz
dFJlY3QubW92ZSgtcGFpbnRMb2NhdGlvbi54KCksIC1wYWludExvY2F0aW9uLnkoKSk7Ci0KLSAg
ICBhdXRvJiBjb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIGlmIChyZW5k
ZXJlcikgewotICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3Jt
ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAgICAgY29udGV4dC5jb25jYXRD
VE0oYWJzb2x1dGVUcmFuc2Zvcm0pOwotCi0gICAgICAgIFJlZlB0ciBjb250ZXh0Tm9kZSA9IGRv
d25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOwotICAgICAgICBpZiAoY29u
dGV4dE5vZGUtPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAgICAgICBTVkdMZW5ndGhD
b250ZXh0IGxlbmd0aENvbnRleHQoY29udGV4dE5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgRmxv
YXRTaXplIHZpZXdwb3J0U2l6ZTsKLQotICAgICAgICAgICAgLy8gSWYgd2UncmUgcmVmZXJlbmNp
bmcgYW4gZWxlbWVudCB3aXRoIHBlcmNlbnRhZ2UgdW5pdHMsIGVnLiA8cmVjdCB3aXRoPSIzMCUi
PiB0aG9zZSB2YWx1ZXMgd2VyZSByZXNvbHZlZCBhZ2FpbnN0IHRoZSB2aWV3cG9ydC4KLSAgICAg
ICAgICAgIC8vIEJ1aWxkIHVwIGEgdHJhbnNmb3JtYXRpb24gdGhhdCBtYXBzIGZyb20gdGhlIHZp
ZXdwb3J0IHNwYWNlIHRvIHRoZSBmaWx0ZXIgcHJpbWl0aXZlIHN1YnJlZ2lvbi4KLSAgICAgICAg
ICAgIGlmIChsZW5ndGhDb250ZXh0LmRldGVybWluZVZpZXdwb3J0KHZpZXdwb3J0U2l6ZSkpCi0g
ICAgICAgICAgICAgICAgY29udGV4dC5jb25jYXRDVE0obWFrZU1hcEJldHdlZW5SZWN0cyhGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCB2aWV3cG9ydFNpemUpLCBkZXN0UmVjdCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKLSAgICAg
ICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvQ29udGV4dChjb250ZXh0LCAq
cmVuZGVyZXIsIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIGNvbnRleHQuZHJhd0ltYWdlKCptX2ltYWdl
LCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7
IH0sIG51bGxwdHIpOwogfQogCi1UZXh0U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24p
IGNvbnN0CitUZXh0U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICBGbG9hdFNpemUg
aW1hZ2VTaXplOwotICAgIGlmIChtX2ltYWdlKQotICAgICAgICBpbWFnZVNpemUgPSBtX2ltYWdl
LT5zaXplKCk7Ci0gICAgZWxzZSBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHJlZmVyZW5j
ZWRSZW5kZXJlcigpKQotICAgICAgICBpbWFnZVNpemUgPSBlbmNsb3NpbmdJbnRSZWN0KHJlbmRl
cmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKS5zaXplKCk7CisgICAgRmxvYXRT
aXplIGltYWdlU2l6ZSA9IG1faW1hZ2UtPnNpemUoKTsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltm
ZUltYWdlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIGltYWdlLXNpemU9XCIiIDw8IGltYWdlU2l6ZS53
aWR0aCgpIDw8ICJ4IiA8PCBpbWFnZVNpemUuaGVpZ2h0KCkgPDwgIlwiXVxuIjsKICAgICAvLyBG
SVhNRTogc2hvdWxkIHRoaXMgZHVtcCBhbHNvIG9iamVjdCByZXR1cm5lZCBieSBTVkdGRUltYWdl
OjppbWFnZSgpID8KICAgICByZXR1cm4gdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKaW5kZXggYWMxNjBlZGNlN2MwZTBhMDY3YmRlZmJk
NzA3ZjJhYmU1NTkwODFiNi4uYTgxNDRmNzY3Y2JkODc0Y2VmNDUwNjk1YWMwYmFmNTBkMmNkMWM2
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJ
bWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuaApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsMzYgKzI4LDI2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBJbWFnZTsKLWNsYXNzIFJl
bmRlckVsZW1lbnQ7Ci1jbGFzcyBUcmVlU2NvcGU7CiAKIGNsYXNzIEZFSW1hZ2UgZmluYWwgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNy
ZWF0ZVdpdGhJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUmKTsKLSAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJUklS
ZWZlcmVuY2UoRmlsdGVyJiwgVHJlZVNjb3BlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGUo
UmVmPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKIHByaXZh
dGU6Ci0gICAgdmlydHVhbCB+RkVJbWFnZSgpID0gZGVmYXVsdDsKLSAgICBGRUltYWdlKEZpbHRl
ciYsIFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwot
ICAgIEZFSW1hZ2UoRmlsdGVyJiwgVHJlZVNjb3BlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgRkVJbWFnZShSZWY8SW1hZ2U+LCBjb25z
dCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVJbWFnZSI7IH0KIAotICAgIEZpbHRlckVm
ZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEZpbHRlckVm
ZmVjdFR5cGVJbWFnZTsgfQorICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIFJlbmRlckVsZW1lbnQqIHJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0OworICAg
IEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgZmluYWw7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpIGZpbmFsOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0IGZpbmFsOwogCi0gICAgLy8gbV90cmVlU2NvcGUgd2lsbCBuZXZlciBiZSBh
IGRhbmdsaW5nIHJlZmVyZW5jZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05OTI0MwotICAgIFRyZWVTY29wZSogbV90cmVlU2NvcGUgeyBudWxscHRyIH07Ci0g
ICAgU3RyaW5nIG1faHJlZjsKKyAgICBSZWY8SW1hZ2U+IG1faW1hZ2U7CiAgICAgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlIG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCmluZGV4IDlh
OTRhNDYwMzU4NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJiN2JjZTcuLjU3MzIwOWFlODllNGU5ZmQ4
ODE0YjRkNjhhMmNlMTZlNDA4YWRmZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDI5ICsyMywxNTggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKIAorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgor
I2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3Vy
Y2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZp
bHRlcihhYnNvbHV0ZVRyYW5zZm9ybSkKLSAgICAsIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVn
aW9uKGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbikKLSAgICAsIG1fdGFyZ2V0Qm91bmRpbmdC
b3godGFyZ2V0Qm91bmRpbmdCb3gpCi0gICAgLCBtX2ZpbHRlclJlZ2lvbihmaWx0ZXJSZWdpb24p
Ci0gICAgLCBtX2VmZmVjdEJCb3hNb2RlKGVmZmVjdEJCb3hNb2RlKQorUmVmUHRyPFNWR0ZpbHRl
cj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBGaWx0ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0KQor
eworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7Cisg
ICAgaWYgKGZpbHRlckVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9k
ZXMpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBmaWx0ZXIgPSBhZG9wdFJl
ZihuZXcgU1ZHRmlsdGVyKHJlbmRlcmluZ01vZGUpKTsKKyAgICAKKyAgICBmaWx0ZXItPnNldHVw
QnVpbHRpbkVmZmVjdHMocHJldmlvdXNFZmZlY3QpOworICAgIAorICAgIEZpbHRlckVmZmVjdHNJ
bnB1dHMgZWZmZWN0c0lucHV0czsKKyAgICBpZiAoIWZpbHRlci0+YnVpbGRFZmZlY3RzKGZpbHRl
ckVsZW1lbnQsIGVmZmVjdHNJbnB1dHMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGlmICghZmlsdGVyLT5idWlsZEV4cHJlc3Npb24oZWZmZWN0c0lucHV0cykpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGZpbHRlcjsKK30KKworU1ZHRmlsdGVyOjpTVkdG
aWx0ZXIoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQorICAgIDogRmlsdGVyKHJlbmRlcmlu
Z01vZGUsIFR5cGU6OlNWRykKK3sKK30KKwordm9pZCBTVkdGaWx0ZXI6OmFkZE5hbWVkRWZmZWN0
KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIFJlZjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkKK3sKKyAg
ICBpZiAobmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9sYXN0RWZmZWN0ID0gZWZmZWN0LnB0
cigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMu
Y29udGFpbnMobmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdEVmZmVjdCA9IGVm
ZmVjdC5wdHIoKTsKKyAgICBtX25hbWVkRWZmZWN0cy5zZXQobmFtZSwgV1RGTW92ZShlZmZlY3Qp
KTsKK30KKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyOjpuYW1lZEVmZmVjdChjb25z
dCBBdG9tU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAobV9sYXN0RWZmZWN0KQorICAgICAgICAgICAgcmV0dXJuIG1fbGFzdEVmZmVj
dDsKKworICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3JhcGhpYzo6
ZWZmZWN0TmFtZSgpKTsKKyAgICB9CisKKyAgICBpZiAobV9idWlsdGluRWZmZWN0cy5jb250YWlu
cyhuYW1lKSkKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KG5hbWUpOworCisg
ICAgcmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChuYW1lKTsKK30KKwordm9pZCBTVkdGaWx0ZXI6
OnNldHVwQnVpbHRpbkVmZmVjdHMoRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCkKIHsKLSAg
ICBtX2Fic29sdXRlRmlsdGVyUmVnaW9uID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0
ZXJSZWdpb24pOworICAgIGlmIChwcmV2aW91c0VmZmVjdCkgeworICAgICAgICBtX2J1aWx0aW5F
ZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCksIFJlZjxGaWx0ZXJFZmZlY3Q+
IHsgKnByZXZpb3VzRWZmZWN0IH0pOworICAgICAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3Vy
Y2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU291cmNlR3JhcGhpYzo6
Y3JlYXRlKCk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0
TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VB
bHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkpOwogfQogCi1GbG9hdFNp
emUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNv
bnN0Citib29sIFNWR0ZpbHRlcjo6YnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRl
ckVsZW1lbnQsIEZpbHRlckVmZmVjdHNJbnB1dHMmIGVmZmVjdHNJbnB1dHMpCiB7Ci0gICAgaWYg
KG1fZWZmZWN0QkJveE1vZGUpCi0gICAgICAgIHNpemUgPSBzaXplICogbV90YXJnZXRCb3VuZGlu
Z0JveC5zaXplKCk7CisgICAgYXV0byBzb3VyY2VHcmFwaGljID0gbmFtZWRFZmZlY3QoU291cmNl
R3JhcGhpYzo6ZWZmZWN0TmFtZSgpKTsKKyAgICBhdXRvIHNvdXJjZUFscGhhID0gbmFtZWRFZmZl
Y3QoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSk7CisgICAgZWZmZWN0c0lucHV0cy5zZXQoc291
cmNlQWxwaGEucmVsZWFzZU5vbk51bGwoKSwgRmlsdGVyRWZmZWN0VmVjdG9yIHsgc291cmNlR3Jh
cGhpYy5yZWxlYXNlTm9uTnVsbCgpIH0pOworCisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50
IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihm
aWx0ZXJFbGVtZW50KSkgeworICAgICAgICBhdXRvIFtlZmZlY3QsIGlucHV0c10gPSBlZmZlY3RF
bGVtZW50LmJ1aWxkKCp0aGlzKTsKKyAgICAgICAgaWYgKCFlZmZlY3QpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZWZmZWN0c0lucHV0cy5zZXQoeyAqZWZmZWN0IH0sIFdU
Rk1vdmUoaW5wdXRzKSk7CisgICAgICAgIGFkZE5hbWVkRWZmZWN0KGVmZmVjdEVsZW1lbnQucmVz
dWx0KCksIGVmZmVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbihjb25zdCBSZWY8RmlsdGVy
RWZmZWN0PiYgZWZmZWN0LCBjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRz
LCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNrKQoreworICAgIGlmIChzdGFjay5jb250YWlucyhl
ZmZlY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9leHByZXNzaW9uLmlu
c2VydCgwLCB7IGVmZmVjdCB9KTsKKworICAgIHN0YWNrLmFwcGVuZChlZmZlY3QpOworCisgICAg
Zm9yIChhdXRvJiBpbnB1dEVmZmVjdCA6IGVmZmVjdHNJbnB1dHMuZ2V0KGVmZmVjdCkpIHsKKyAg
ICAgICAgaWYgKCFidWlsZEV4cHJlc3Npb24oaW5wdXRFZmZlY3QsIGVmZmVjdHNJbnB1dHMsIHN0
YWNrKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBBU1NFUlQoIXN0
YWNrLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKHN0YWNrLmxhc3QoKS5wdHIoKSA9PSBlZmZlY3Qu
cHRyKCkpOworCisgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFNWR0ZpbHRlcjo6YnVpbGRFeHByZXNzaW9uKGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1
dHMmIGVmZmVjdHNJbnB1dHMpCit7CisgICAgaWYgKCFtX2xhc3RFZmZlY3QpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3Igc3RhY2s7CisgICAgcmV0
dXJuIGJ1aWxkRXhwcmVzc2lvbih7ICptX2xhc3RFZmZlY3QgfSwgZWZmZWN0c0lucHV0cywgc3Rh
Y2spOworfQorCitGaWx0ZXJSZXN1bHQqIFNWR0ZpbHRlcjo6YXBwbHkoRmlsdGVyT3V0cHV0JiBv
dXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fbGFzdEVmZmVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBpZiAoIXN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgc291cmNlSW1hZ2UgPSBz
dGFjay50YWtlTGFzdCgpLT5pbWFnZUJ1ZmZlcigpOworCisgICAgaWYgKGF1dG8gcmVzdWx0ID0g
b3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KworICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9leHByZXNzaW9uKSB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gZWZmZWN0LT5hcHBseShvdXRwdXQsIHN0YWNrLCBzb3VyY2VJbWFnZSk7CisgICAg
ICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
c3RhY2suYXBwZW5kKHsgKnJlc3VsdCB9KTsKKyAgICAgICAgb3V0cHV0LnJlc3VsdHMoKS5hZGQo
ZWZmZWN0LCBSZWY8RmlsdGVyUmVzdWx0PigqcmVzdWx0KSk7CisgICAgfQogCi0gICAgcmV0dXJu
IEZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRl
clJlZ2lvbi5zaXplKCkgLyBtX2ZpbHRlclJlZ2lvbi5zaXplKCk7CisgICAgQVNTRVJUKHN0YWNr
LnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIHJlc3VsdCA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAg
cmVzdWx0LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCkpOworICAgIHJldHVybiAmcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAotUmVmPFNWR0ZpbHRlcj4g
U1ZHRmlsdGVyOjpjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9y
bSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9u
LCBib29sIGVmZmVjdEJCb3hNb2RlKQorVGV4dFN0cmVhbSYgU1ZHRmlsdGVyOjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNl
bnRhdGlvbikgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIoYWJz
b2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRp
bmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZXhwcmVzc2lvbikKKyAgICAgICAgZWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CisgICAgcmV0dXJuIHRzOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oCmluZGV4IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEwZmIxNzAwY2Yu
LmQyOWJlYjU3OWQzZWZlYWJjYTg0M2Q4YWU2MjEwM2Q1YmM4M2NkNGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDQxICsyMSw1NiBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKKwogY2xhc3MgU1ZHRmlsdGVyIGZpbmFs
IDogcHVibGljIEZpbHRlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFNWR0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGJvb2wpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxl
bWVudCYsIFJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBGaWx0
ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0ID0gbnVsbHB0cik7CiAKLSAgICBGbG9hdFJlY3QgZmls
dGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lv
bjsgfQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2Fic29sdXRlRmlsdGVyUmVnaW9uOyB9CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbmFtZWRF
ZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gbGFzdEVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVmZmVjdDsgfQogCi0gICAg
RmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUpIGNvbnN0IGZpbmFs
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25h
bDxSZWY8U1ZHRmlsdGVyPj4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIEZsb2F0UmVjdCBzb3Vy
Y2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Fic29sdXRlU291cmNlRHJhd2lu
Z1JlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KK3ByaXZhdGU6CisgICAgU1ZHRmlsdGVyKFJlbmRl
cmluZ01vZGUpOwogCi0gICAgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2b2lkIGFkZE5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUs
IFJlZjxGaWx0ZXJFZmZlY3Q+KTsKIAotcHJpdmF0ZToKLSAgICBTVkdGaWx0ZXIoY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0
ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gs
IGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsKKyAg
ICB2b2lkIHNldHVwQnVpbHRpbkVmZmVjdHMoRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCk7
CisgICAgYm9vbCBidWlsZEVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdHNJ
bnB1dHMmKTsKKyAgICBib29sIGJ1aWxkRXhwcmVzc2lvbihjb25zdCBSZWY8RmlsdGVyRWZmZWN0
PiYsIGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmLCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNr
KTsKKyAgICBib29sIGJ1aWxkRXhwcmVzc2lvbihjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJik7
CiAKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxv
YXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVGaWx0
ZXJSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOwotICAgIGJvb2wgbV9lZmZl
Y3RCQm94TW9kZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRl
clJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QgZmlu
YWw7CisKKyAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
LCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CisKKyAgICBIYXNoTWFwPEF0b21T
dHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2J1aWx0aW5FZmZlY3RzOworICAgIEhhc2hNYXA8
QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVjdD4+IG1fbmFtZWRFZmZlY3RzOworICAgIFZlY3Rv
cjxSZWY8Y29uc3QgRmlsdGVyRWZmZWN0Pj4gbV9leHByZXNzaW9uOworICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+
IHZvaWQgU1ZHRmlsdGVyOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Cit7CisgICAgCit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UmVmPFNWR0ZpbHRlcj4+IFNW
R0ZpbHRlcjo6ZGVjb2RlKERlY29kZXImKQoreworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJ
TihXZWJDb3JlOjpTVkdGaWx0ZXIpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNv
cmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIuaXNTVkdGaWx0ZXIoKTsgfQorICAg
IHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikgeyByZXR1
cm4gZmlsdGVyLnR5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXI6OlR5cGU6OlNWRzsgfQogU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOTZmM2E4MDUwNDI5NTU1ODEwMzRkOThhNGZkYWM0ZWFmMzA4N2I5NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU1ZHRmls
dGVyQnVpbGRlci5oIgotCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU291
cmNlQWxwaGEuaCIKLSNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
U1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBz
b3VyY2VHcmFwaGljKQotewotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6
OmVmZmVjdE5hbWUoKSwgc291cmNlR3JhcGhpYyk7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQo
U291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgqc291cmNlR3Jh
cGhpYykpOwotICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7Ci19Ci0KLXZvaWQgU1ZHRmlsdGVyQnVp
bGRlcjo6YWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZl
Y3QpCi17Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSkgewotICAgICAgICBtX2xhc3RFZmZlY3QgPSBl
ZmZlY3Q7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9idWlsdGluRWZmZWN0
cy5jb250YWlucyhpZCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGFzdEVmZmVjdCA9IGVm
ZmVjdDsKLSAgICBtX25hbWVkRWZmZWN0cy5zZXQoaWQsIG1fbGFzdEVmZmVjdCk7Ci19Ci0KLVJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6OmdldEVmZmVjdEJ5SWQoY29uc3Qg
QXRvbVN0cmluZyYgaWQpIGNvbnN0Ci17Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSkgewotICAgICAg
ICBpZiAobV9sYXN0RWZmZWN0KQotICAgICAgICAgICAgcmV0dXJuIG1fbGFzdEVmZmVjdDsKLQot
ICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3JhcGhpYzo6ZWZmZWN0
TmFtZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9idWlsdGluRWZmZWN0cy5jb250YWlucyhpZCkp
Ci0gICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChpZCk7Ci0KLSAgICByZXR1cm4g
bV9uYW1lZEVmZmVjdHMuZ2V0KGlkKTsKLX0KLQotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjphcHBl
bmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBlZmZlY3Qs
IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIC8vIFRoZSBlZmZlY3QgbXVzdCBiZSBhIG5l
d2x5IGNyZWF0ZWQgZmlsdGVyIGVmZmVjdC4KLSAgICBBU1NFUlQoIW1fZWZmZWN0UmVmZXJlbmNl
cy5jb250YWlucyhlZmZlY3QpKTsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCAhbV9lZmZlY3RSZW5k
ZXJlci5jb250YWlucyhvYmplY3QpKTsKLSAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGVmZmVj
dCwgRmlsdGVyRWZmZWN0U2V0KCkpOwotCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dEVmZmVj
dHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpLnNpemUoKTsKLQotICAgIC8vIEl0IGlzIG5vdCBw
b3NzaWJsZSB0byBhZGQgdGhlIHNhbWUgdmFsdWUgdG8gYSBzZXQgdHdpY2UuCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kpCi0gICAgICAgIGVm
ZmVjdFJlZmVyZW5jZXMoZWZmZWN0LT5pbnB1dEVmZmVjdChpKSkuYWRkKGVmZmVjdC5nZXQoKSk7
Ci0KLSAgICAvLyBJZiBvYmplY3QgaXMgbnVsbCwgdGhhdCBtZWFucyB0aGUgZWxlbWVudCBpc24n
dCBhdHRhY2hlZCBmb3Igc29tZQotICAgIC8vIHJlYXNvbiwgd2hpY2ggaW4gdHVybiBtZWFuIHRo
YXQgY2VydGFpbiB0eXBlcyBvZiBpbnZhbGlkYXRpb24gd2lsbCBub3QKLSAgICAvLyB3b3JrICh0
aGUgTGF5b3V0T2JqZWN0IC0+IEZpbHRlckVmZmVjdCBtYXBwaW5nIHdpbGwgbm90IGJlIGRlZmlu
ZWQpLgotICAgIGlmIChvYmplY3QpCi0gICAgICAgIG1fZWZmZWN0UmVuZGVyZXIuYWRkKG9iamVj
dCwgZWZmZWN0LmdldCgpKTsKLX0KLQotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVj
dHMoKQotewotICAgIG1fbGFzdEVmZmVjdCA9IG51bGxwdHI7Ci0gICAgbV9uYW1lZEVmZmVjdHMu
Y2xlYXIoKTsKLSAgICBtX2VmZmVjdFJlZmVyZW5jZXMuY2xlYXIoKTsKLSAgICBtX2VmZmVjdFJl
bmRlcmVyLmNsZWFyKCk7Ci0gICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKLX0KLQotdm9pZCBTVkdG
aWx0ZXJCdWlsZGVyOjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0KiBlZmZlY3Qp
Ci17Ci0gICAgaWYgKCFlZmZlY3QtPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7Ci0KLSAgICBmb3IgKGF1dG8mIHJlZmVyZW5jZSA6IGVm
ZmVjdFJlZmVyZW5jZXMoZWZmZWN0KSkKLSAgICAgICAgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKHJl
ZmVyZW5jZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc3YWUwOGJhYzY1YzNjMmNmYzg5NzRmYTMzZTc2NDYw
Y2U5N2ZhNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFs
ZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCi0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyT2JqZWN0OwotY2xhc3Mg
U1ZHRmlsdGVyRWxlbWVudDsKLQotY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNoU2V0PEZpbHRlckVm
ZmVjdCo+IEZpbHRlckVmZmVjdFNldDsKLQotICAgIFNWR0ZpbHRlckJ1aWxkZXIoUmVmUHRyPEZp
bHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7Ci0KLSAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5n
Qm94KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQotICAg
IEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91
bmRpbmdCb3g7IH0KLSAgICAKLSAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2
ZVVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wcmltaXRpdmVVbml0czsgfQotICAgIHZvaWQgc2V0
UHJpbWl0aXZlVW5pdHMoU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSB1bml0cykgeyBtX3ByaW1p
dGl2ZVVuaXRzID0gdW5pdHM7IH0KLQotICAgIHZvaWQgYWRkKGNvbnN0IEF0b21TdHJpbmcmIGlk
LCBSZWZQdHI8RmlsdGVyRWZmZWN0Pik7Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBnZXRF
ZmZlY3RCeUlkKGNvbnN0IEF0b21TdHJpbmcmKSBjb25zdDsKLSAgICBGaWx0ZXJFZmZlY3QqIGxh
c3RFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2xhc3RFZmZlY3QuZ2V0KCk7IH0KLQotICAgIHZv
aWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYs
IFJlbmRlck9iamVjdCopOwotCi0gICAgaW5saW5lIEZpbHRlckVmZmVjdFNldCYgZWZmZWN0UmVm
ZXJlbmNlcyhGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKLSAgICB7Ci0gICAgICAgIC8vIE9ubHkgYWxs
b3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KLSAgICAgICAgQVNTRVJU
KG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAgICAgcmV0dXJuIG1f
ZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwotICAgIH0KLQotICAgIC8vIFJl
cXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBkdXJpbmcgYW4gc3Zn
QXR0cmlidXRlQ2hhbmdlZC4KLSAgICBpbmxpbmUgRmlsdGVyRWZmZWN0KiBlZmZlY3RCeVJlbmRl
cmVyKFJlbmRlck9iamVjdCogb2JqZWN0KSB7IHJldHVybiBtX2VmZmVjdFJlbmRlcmVyLmdldChv
YmplY3QpOyB9Ci0KLSAgICB2b2lkIGNsZWFyRWZmZWN0cygpOwotICAgIHZvaWQgY2xlYXJSZXN1
bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCopOwotCi1wcml2YXRlOgotICAgIGlubGluZSB2b2lk
IGFkZEJ1aWx0aW5FZmZlY3RzKCkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgZWZmZWN0IDog
bV9idWlsdGluRWZmZWN0cy52YWx1ZXMoKSkKLSAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNl
cy5hZGQoZWZmZWN0LCBGaWx0ZXJFZmZlY3RTZXQoKSk7Ci0gICAgfQotCi0gICAgSGFzaE1hcDxB
dG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKLSAgICBI
YXNoTWFwPEF0b21TdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsK
LSAgICAvLyBUaGUgdmFsdWUgaXMgYSBsaXN0LCB3aGljaCBjb250YWlucyB0aG9zZSBmaWx0ZXIg
ZWZmZWN0cywKLSAgICAvLyB3aGljaCBkZXBlbmRzIG9uIHRoZSBrZXkgZmlsdGVyIGVmZmVjdC4K
LSAgICBIYXNoTWFwPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZlY3RTZXQ+IG1fZWZm
ZWN0UmVmZXJlbmNlczsKLSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEZpbHRlckVmZmVjdCo+
IG1fZWZmZWN0UmVuZGVyZXI7Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZl
Y3Q7Ci0gICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7Ci0gICAgU1ZHVW5pdFR5cGVz
OjpTVkdVbml0VHlwZSBtX3ByaW1pdGl2ZVVuaXRzIHsgU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9U
WVBFX1VTRVJTUEFDRU9OVVNFIH07Ci19OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
R2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ckdlb21ldHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY3ZWJkYzFiMWUxOTFkMjIwZDY1MmJjODA3NTFkZWY1
MmMxNTFkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZH
RmlsdGVyR2VvbWV0cnkgOiBwdWJsaWMgRmlsdGVyR2VvbWV0cnkgeworcHVibGljOgorICAgIFNW
R0ZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFNpemUmIHJlc29sdXRpb24pCisgICAgICAgIDogRmlsdGVyR2VvbWV0cnko
ZmlsdGVyUmVnaW9uLCBzb3VyY2VJbWFnZVJlY3QpCisgICAgICAgICwgbV9hYnNvbHV0ZVRyYW5z
Zm9ybShhYnNvbHV0ZVRyYW5zZm9ybSkKKyAgICAgICAgLCBtX3Jlc29sdXRpb24ocmVzb2x1dGlv
bikKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCB0cmFuc2Zvcm1Ub0Fi
c29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICBhdXRvIHJlY3RJblVzZXJTcGFjZSA9IG1fYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVj
dChyZWN0KTsKKyAgICAgICAgcmVjdEluVXNlclNwYWNlLnNjYWxlKG1fcmVzb2x1dGlvbik7Cisg
ICAgICAgIHJldHVybiByZWN0SW5Vc2VyU3BhY2U7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHBy
aW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cykgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBGaWx0ZXJHZW9tZXRyeTo6cHJpbWl0aXZl
U3VicmVnaW9uKGlucHV0cyk7CisgICAgICAgIAorLy8gICAgICAgIHJldHVybiBGbG9hdFJlY3Qg
eworLy8gICAgICAgICAgICBwcmltaXRpdmVCb3VuZHJpZXMueC52YWx1ZV9vcihzdWJyZWdpb24u
eCgpKSwKKy8vICAgICAgICAgICAgcHJpbWl0aXZlQm91bmRyaWVzLnkudmFsdWVfb3Ioc3VicmVn
aW9uLnkoKSksCisvLyAgICAgICAgICAgIHByaW1pdGl2ZUJvdW5kcmllcy53aWR0aC52YWx1ZV9v
cihzdWJyZWdpb24ud2lkdGgoKSksCisvLyAgICAgICAgICAgIHByaW1pdGl2ZUJvdW5kcmllcy5o
ZWlnaHQudmFsdWVfb3Ioc3VicmVnaW9uLmhlaWdodCgpKQorLy8gICAgICAgIH07CisgICAgfQor
ICAgIAorICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOworICAgIEZsb2F0
U2l6ZSBtX3Jlc29sdXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aEdyYW1tYXIuY3BwCmluZGV4IDA4NzVhNWVjZmZhOWM2N2U2MGMxYWY2NmM5MGM3
MDk1ZmU3YmQxMDQuLjhmYjBmNDAyNmNiZTM5OTA0MDMyMWYzZTJhODI5YzY4NTJkNDhiODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIuY3BwCkBAIC0xOTg2LDcgKzE5ODYsNyBAQCB5eXJl
ZHVjZToKICNsaW5lIDQxOSAiV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkiCiAgICAgewogICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4+
IHByZWRpY2F0ZUxpc3QoKHl5dnNwWygyKSAtICgyKV0uZXhwcmVzc2lvblZlY3RvcikpOwotICAg
ICAgICAoeXl2YWwuZXhwcmVzc2lvbikgPSBuZXcgRmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHBy
ZXNzaW9uPigoeXl2c3BbKDEpIC0gKDIpXS5leHByZXNzaW9uKSksIFdURk1vdmUoKnByZWRpY2F0
ZUxpc3QpKTsKKyAgICAgICAgKHl5dmFsLmV4cHJlc3Npb24pID0gbmV3IFhQYXRoOjpGaWx0ZXIo
c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+KCh5eXZzcFsoMSkgLSAoMildLmV4cHJlc3Npb24p
KSwgV1RGTW92ZSgqcHJlZGljYXRlTGlzdCkpOwogICAgIDt9CiAgICAgYnJlYWs7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueSBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aEdyYW1tYXIueQppbmRleCBiNzUxYTYxYmEzZjQyMjI0MGU3YzBiZTBlNGY1ZDYx
M2UyZjdhNTViLi4zNTMwOTgwYWIyYTk0ZTc2NmJkY2NiOTIwYmQ3YTllNGNkYTJjNTIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoR3JhbW1hci55CkBAIC00MTgsNyArNDE4LDcgQEAgRmlsdGVyRXhwcjoK
ICAgICBQcmltYXJ5RXhwciBQcmVkaWNhdGVMaXN0CiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4+IHByZWRpY2F0ZUxpc3Qo
JDIpOwotICAgICAgICAkJCA9IG5ldyBGaWx0ZXIoc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
KCQxKSwgV1RGTW92ZSgqcHJlZGljYXRlTGlzdCkpOworICAgICAgICAkJCA9IG5ldyBYUGF0aDo6
RmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigkMSksIFdURk1vdmUoKnByZWRpY2F0
ZUxpc3QpKTsKICAgICB9CiAgICAgOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggYWE5
NDU2NDE0OWQwOGU0ODk2MzQ3ZDk0ZjAzOTQ2MTU0NzI5YmY3My4uMTFlZmFjOTFkNDRjNDZlYzg1
M2M3OGM2OGVjNTQwY2FkYTVlY2MyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMjks
NiArMjksOCBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkRpc3BsYXlM
aXN0UmVhZGVySGFuZGxlLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCIK
KyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVt
b3RlSW1hZ2VCdWZmZXIuaCIKQEAgLTQ3OCw2ICs0ODAsMzUgQEAgdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpnZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5k
ZXJpbmcKICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZSkpOwogfQogCit2b2lk
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllciwgSVBDOjpGaWx0ZXJSZWZlcmVu
Y2UmJiBmaWx0ZXJSZWZlcmVuY2UsIElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UmJiBnZW9t
ZXRyeVJlZmVyZW5jZSwKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgYXV0byBmaWx0ZXIgPSBmaWx0ZXJSZWZlcmVuY2UudGFrZUZp
bHRlcigpOworICAgIGF1dG8gZ2VvbWV0cnkgPSBnZW9tZXRyeVJlZmVyZW5jZS50YWtlR2VvbWV0
cnkoKTsKKyAgICAKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgWyZd
KCkgeworICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNh
Y2hlZEltYWdlQnVmZmVyKGlkZW50aWZpZXIpOworICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGltYWdlID0gaW1hZ2VCdWZmZXItPmZp
bHRlcmVkSW1hZ2UoZmlsdGVyLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgICAgIGlmICghaW1h
Z2UpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2Ut
PnNpemUoKTsKKyAgICAgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNo
YXJlYWJsZShJbnRTaXplKGltYWdlU2l6ZSksIHsgaW1hZ2VCdWZmZXItPmNvbG9yU3BhY2UoKSB9
KTsKKyAgICAgICAgaWYgKCFiaXRtYXApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1
dG8gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY29udGV4dC0+ZHJhd0lt
YWdlKCppbWFnZSwgRmxvYXRQb2ludCgpKTsKKyAgICAgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUo
aGFuZGxlKTsKKyAgICB9KCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUp
KTsKK30KKwogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZU5hdGl2ZUltYWdlKGNv
bnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBuYXRpdmVJbWFnZVJlc291cmNlSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IDdkODBiNzI1ODYzOTRl
NTVlY2NjYzliZjczZjk1ZWZiMGNjOTQwNTAuLjE5MTYyNzI0MDc3Y2EyNjc1ZTkwMTQ0ZGNkZjZl
MzU0NmY0ZjczNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtNTksNiArNTksMTEgQEAgZW51
bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogYm9vbDsKIAogfQogCituYW1lc3BhY2UgSVBDIHsKK2Ns
YXNzIEZpbHRlclJlZmVyZW5jZTsKK2NsYXNzIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlOworfQor
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRGlzcGxheUxpc3RSZWFkZXJIYW5kbGU7CkBA
IC0xNDIsNiArMTQ3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldERhdGFVUkxGb3JJbWFnZUJ1
ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2
b2lkIGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CiAgICAg
dm9pZCBnZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4mJik7CisgICAgdm9pZCBn
ZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBJUEM6OkZpbHRlclJlZmVyZW5jZSYmLCBJUEM6OkZpbHRlckdlb21ldHJ5UmVm
ZXJlbmNlJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUm
Jik+JiYpOwogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9p
ZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9u
dHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggMWVmNTZk
Y2M5NzYyNzRlMzU2YWIyMmI0ZWE0ZTcxYmNmYWMwYjBkZi4uMjRiZTM2ZjYxNmJhN2YzZTgyMTgx
MWI2MjQzYTg1MmMxMjZmODZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2Fn
ZXMuaW4KQEAgLTMyLDYgKzMyLDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCB7CiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpv
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVybFN0cmlu
ZykgU3luY2hyb25vdXMKICAgICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBl
LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50
OF90PiBkYXRhKSBTeW5jaHJvbm91cwogICAgIEdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVm
ZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgZW51
bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
IC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMK
KyAgICBHZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyLCBJUEM6OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIs
IElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UgZ2VvbWV0cnkpIC0+IChXZWJLaXQ6OlNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKICAgICBDYWNoZU5hdGl2ZUlt
YWdlKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAg
IENhY2hlRm9udChJUEM6OkZvbnRSZWZlcmVuY2UgZm9udCkKICAgICBEZWxldGVBbGxGb250cygp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJHZW9tZXRyeVJl
ZmVyZW5jZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZl
cmVuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hZjliZWFkZTFiYTA3OTBjY2RkNjlmY2JmMDM4YjhjYzQ3Nzdh
MmI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVy
R2VvbWV0cnlSZWZlcmVuY2UuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRmlsdGVyR2VvbWV0cnkuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2Ns
YXNzIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlIHsKK3B1YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRy
eVJlZmVyZW5jZShzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+JiYgZ2Vv
bWV0cnkpCisgICAgICAgIDogbV9nZW9tZXRyeShXVEZNb3ZlKGdlb21ldHJ5KSkKKyAgICB7Cisg
ICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiB0YWtl
R2VvbWV0cnkoKSB7IHJldHVybiBXVEZNb3ZlKG1fZ2VvbWV0cnkpOyB9CisKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZT4gZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCisgICAgeworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+IG1fZ2VvbWV0cnk7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmls
dGVyUmVmZXJlbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQ0N2QyNjk1NDY0NTUzMGIzMzQyNmRkNjljMTZk
ZWU1MzE0OTllNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0ZpbHRlclJlZmVyZW5jZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9DU1NGaWx0ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NWR0ZpbHRlci5o
PgorCituYW1lc3BhY2UgSVBDIHsKKworY2xhc3MgRmlsdGVyUmVmZXJlbmNlIHsKK3B1YmxpYzoK
KyAgICBGaWx0ZXJSZWZlcmVuY2UoUmVmPFdlYkNvcmU6OkZpbHRlcj4mJiBmaWx0ZXIpCisgICAg
ICAgIDogbV9maWx0ZXIoV1RGTW92ZShmaWx0ZXIpKQorICAgIHsKKyAgICB9CisKKyAgICBSZWY8
V2ViQ29yZTo6RmlsdGVyPiB0YWtlRmlsdGVyKCkgeyByZXR1cm4gV1RGTW92ZShtX2ZpbHRlcik7
IH0KKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBlbmNvZGVyIDw8IG1fZmlsdGVyLT50eXBlKCk7CisKKyAgICAgICAgaWYgKGlzPFdlYkNv
cmU6OkNTU0ZpbHRlcj4obV9maWx0ZXIuZ2V0KCkpKQorICAgICAgICAgICAgc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PFdlYkNvcmU6OkNTU0ZpbHRlcj4obV9maWx0ZXIpLT5lbmNvZGUoZW5jb2Rlcik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxXZWJDb3Jl
OjpTVkdGaWx0ZXI+KG1fZmlsdGVyKS0+ZW5jb2RlKGVuY29kZXIpOworICAgIH0KKworICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbHRlclJlZmVyZW5jZT4gZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCisgICAgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlcjo6VHlwZT4g
dHlwZTsKKyAgICAgICAgZGVjb2RlciA+PiB0eXBlOworICAgICAgICBpZiAoIXR5cGUpCisgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIGlmICgqdHlwZSA9PSBXZWJD
b3JlOjpGaWx0ZXI6OlR5cGU6OkNTUykgeworICAgICAgICAgICAgaWYgKGF1dG8gZmlsdGVyID0g
V2ViQ29yZTo6Q1NTRmlsdGVyOjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHsgRmlsdGVyUmVmZXJlbmNlKFdURk1vdmUoKmZpbHRlcikpIH07CisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8gZmlsdGVy
ID0gV2ViQ29yZTo6U1ZHRmlsdGVyOjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICByZXR1
cm4geyBGaWx0ZXJSZWZlcmVuY2UoV1RGTW92ZSgqZmlsdGVyKSkgfTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmPFdlYkNvcmU6OkZpbHRl
cj4gbV9maWx0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IGVkOTRhM2VlNTY2OGEzNDhiYzc2YWRiZDQyYjY1
MDA3MWQxYjk1MWEuLjc5OWFiNDgyYmE2Nzg3NDE4NTY0NGNkZmI2NGJmZjk5MDhmNzUwMGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtMjg5LDcgKzI4OSw2
IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAg
ICdXZWJDb3JlOjpNZWRpYUtleVN5c3RlbVJlcXVlc3RJZGVudGlmaWVyJywKICAgICAgICAgJ1dl
YkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpNZWRpYVNl
c3Npb25JZGVudGlmaWVyJywKLSAgICAgICAgJ1dlYkNvcmU6Ok5hdGl2ZUltYWdlUmVmZXJlbmNl
JywKICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6
OlBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29y
ZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiYTIzNzllYzRlMDk3YTIzNjRhZmRhNGZiMjcz
NGY2ZmQxN2QxZjhkLi41Yzg5MDAwYTU5NmIxYWNkZjJkMzZlMzA2OGEyNTViMTg3ZDg1ZmU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTMsNyArMyw3IEBACiAJYXJjaGl2ZVZlcnNpb24gPSAxOwogCWNsYXNzZXMgPSB7CiAJfTsKLQlv
YmplY3RWZXJzaW9uID0gNTI7CisJb2JqZWN0VmVyc2lvbiA9IDU0OwogCW9iamVjdHMgPSB7CiAK
IC8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCkBAIC00NjgzLDYgKzQ2ODMs
OCBAQAogCQk3MUJBQTczMTI1RkZDQ0JBMDBEN0NENUQgLyogV0tNb2RlbFZpZXcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tNb2RlbFZpZXcuaDsgcGF0aCA9IGlvcy9XS01v
ZGVsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUJBQTczMjI1RkZDQ0JB
MDBEN0NENUQgLyogV0tNb2RlbFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXS01vZGVsVmlldy5tbTsgcGF0aCA9IGlvcy9XS01vZGVsVmlldy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdl
YnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9s
aWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjY5MjcwQzUyRUEwMDUx
NUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVmZXJlbmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjZBMjcwQzU3QTcwMDUxNUMy
NCAvKiBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjAzNDQ5QTI2
QTZDNDRDMDAwQTVGNTQgLyogTW9ub3RvbmljT2JqZWN0SWRlbnRpZmllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNb25vdG9uaWNPYmplY3RJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyMDM0NDlCMjZBNkM0NzYwMDBBNUY1NCAvKiBSZW5kZXJpbmdVcGRhdGVJRC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdVcGRhdGVJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjI3ODAwQjI0MDhCRDdEMDA3RDM3NkIgLyogUGxhdGZvcm1SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzMyMCw2ICs3MzIyLDggQEAKIAkJ
CQlCQzAzMkQ5RTEwRjQzN0QxMDA1OEMxNUEgLyogRGVjb2Rlci5oICovLAogCQkJCUJDMDMyRDlG
MTBGNDM3RDEwMDU4QzE1QSAvKiBFbmNvZGVyLmNwcCAqLywKIAkJCQlCQzAzMkRBMDEwRjQzN0Qx
MDA1OEMxNUEgLyogRW5jb2Rlci5oICovLAorCQkJCTcyMDBDRjZBMjcwQzU3QTcwMDUxNUMyNCAv
KiBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oICovLAorCQkJCTcyMDBDRjY5MjcwQzUyRUEwMDUx
NUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLywKIAkJCQk5QkQ4QUI0OTI1ODIwRTUyMDA1Mzg2
RjggLyogRm9udFJlZmVyZW5jZS5oICovLAogCQkJCTQxNTFFNUMzMUZCQjkwQTkwMEU0N0UyRCAv
KiBGb3JtRGF0YVJlZmVyZW5jZS5oICovLAogCQkJCUMwQ0U3MkFDMTI0N0U3OEQwMEJDMEVDNCAv
KiBIYW5kbGVNZXNzYWdlLmggKi8sCkBAIC0xMzY1OSw3ICsxMzY2Myw2IEBACiAJCTA4NjdENjkw
RkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFBy
b2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JX
b3Jrc3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDEzMDA7CiAJ
CQkJTGFzdFVwZ3JhZGVDaGVjayA9IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggMjdiY2QwMDU0NTA5NThlODAyMTIzMzBjMWU4
OTZlM2M4OTE3MzRmYi4uYzg2OTNhZTI5ZDhiYTdkZDJkNDFjY2I0MjFjMDY5YTdkZWEwNGFmNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTIwMyw2ICsyMDMsMTQgQEAgcHJvdGVj
dGVkOgogICAgICAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFnZSgpOwogICAgIH0KIAorICAg
IFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gZmlsdGVyZWRJbWFnZShjb25zdCBXZWJDb3JlOjpGaWx0
ZXImIGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiYmIGdl
b21ldHJ5KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBm
bHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS0+Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKG1fcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCBmaWx0ZXIsIFdURk1vdmUoZ2VvbWV0cnkpKTsKKyAgICB9CisKICAg
ICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25z
dCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgZGVzdGluYXRpb25Gb3JtYXQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBpZiAo
VU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCBlYzc5MzQxMDZiMTFiMzY2Yzc4OGM1M2Jk
OWIyNDA5Nzk2OWJkOWQ5Li43NjBjNTQzYjMxZjhmNDMxNzM1MWY5ZjY3NWYzZDRjNTNmOTA5NTc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RX
cml0ZXJIYW5kbGUuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgpAQCAtMjM3LDYgKzIzOCwyNCBA
QCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Omdl
dFNoYXJlYWJsZUJpdG1hcChSZW5kZXJpbgogICAgIHJldHVybiBTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZShoYW5kbGUpOwogfQogCitSZWZQdHI8SW1hZ2U+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBpbWFnZUJ1ZmZlciwgY29uc3QgRmlsdGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0
cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkKK3sKKyAgICBzZW5kRGVmZXJyZWRXYWtldXBN
ZXNzYWdlSWZOZWVkZWQoKTsKKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsK
KyAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6R2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBJUEM6
OkZpbHRlclJlZmVyZW5jZSB7IFJlZjxGaWx0ZXI+IHsgY29uc3RfY2FzdDxGaWx0ZXImPihmaWx0
ZXIpIH0gfSwgSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZShXVEZNb3ZlKGdlb21ldHJ5KSkp
LCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RmlsdGVyZWRJbWFnZUZvcklt
YWdlQnVmZmVyOjpSZXBseShoYW5kbGUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCAx
X3MpOworICAgIEFTU0VSVF9VTlVTRUQoc2VuZFJlc3VsdCwgc2VuZFJlc3VsdCk7CisKKyAgICBp
ZiAoaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIGF1dG8g
Yml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICBpZiAoIWJpdG1h
cCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJ
bWFnZSgpOworfQorCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y2FjaGVOYXRp
dmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNhY2hlTmF0aXZlSW1hZ2UoaGFu
ZGxlLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0Zv
clN5bmNSZXBseSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCA4
N2FlNTIyY2JiYjI4MWZjNGE4ODA3NjViOTlmNGM5MDI1NmE5ZDI1Li40ZDdkZTRmNjU1ZjExY2Mx
YTI5MDJmMmVjZGQ3MzNlY2Q5OGQ2OTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVm
ZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJH
UFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIklQQ1NlbWFwaG9y
ZS5oIgpAQCAtMTAyLDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0
RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwog
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50aWZpZXIgZmx1c2hEaXNwbGF5TGlz
dEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGdldFNoYXJlYWJsZUJpdG1hcChXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkltYWdlPiBnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXImLCBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+JiYpOwogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFn
ZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYp
OwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsK
</data>
<flag name="commit-queue"
          id="464237"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440349</attachid>
            <date>2021-10-06 02:44:15 -0700</date>
            <delta_ts>2021-10-11 02:46:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211006024414.patch</filename>
            <type>text/plain</type>
            <size>685367</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODc5OGU4MWE0MTUwYWZm
MzUzNjA2ZTc5M2M1NDA2N2VlMjJmODRlYS4uNDAzNWM0YTY0ZTdjMTc3NTc3ODEwMjQxMjk5ZjY4
OGJjZjEzYTdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxOSBAQAorMjAyMS0xMC0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXSVAuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbTog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFn
ZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2U6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVC
bGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1
ZVJvdGF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6
CisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldENvbXBvc2l0ZU9wZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvc2l0ZTo6c2V0SzIpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLNCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZTo6Y29tcG9zaXRlT3BlcmF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6Om9wZXJhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBSR0JBVmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVy
aW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmdldFBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlm
ZnVzZUNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdo
dGluZzo6ZGlmZnVzZUNvbnN0YW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2Vt
ZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp4
Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
Ojp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0Y0NvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6b3BhY2l0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BT
aGFkb3c6OnNldFNoYWRvd0NvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6c2hhZG93T3BhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRURyb3BTaGFkb3c6OnNldFNoYWRvd09wYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6RkVGbG9vZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFRmxvb2Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6
Om9wYWNpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoZ2F1c3NpYW5LZXJuZWxG
YWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsUG9zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlh
dGlvblkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldEVk
Z2VNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9ubHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
dGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3Rk
RGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXREaWZm
dXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3BlY3VsYXJD
b25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhY
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9y
bWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJp
b3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVy
aWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmNv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c291cmNlIGNvbnN0KToKKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpsaWdodGlu
Z0NvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6Omxp
Z2h0U291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93Ojp0b3BMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0b3AgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OmNlbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0
UmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OnNldEJvdHRvbVJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1l
cmdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TWVyZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0b3IgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVj
dWxhckxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0
aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNwZWN1bGFy
Q29uc3RhbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpzcGVjdWxhckV4cG9uZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRp
bGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmRyYXdpbmdSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6RkVUaWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lYKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlOjpzZXROdW1PY3RhdmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5j
ZTo6c2V0U2VlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRp
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZHJhd2luZ1JlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZp
bGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YXBwbHlQbGF0Zm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVj
dEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0b3Rh
bE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUlt
YWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRp
cGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
bnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5wdXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVz
dWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNB
bHBoYUltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhh
c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRI
YXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNX
aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdo
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhh
c0hlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVk
QWJzb2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9wZXJhdGluZ0NvbG9yU3BhY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNw
YWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29s
b3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6bm9ybWFsaXplZEZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1
bmN0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpvdXRzZXRzIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6RmlsdGVyR2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heERyYXdpbmdSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpwcmltaXRpdmVTdWJy
ZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heFByaW1p
dGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRs
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZpbHRlclJlZ2lvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291cmNlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Ojp0cmFuc2Zvcm1Ub0Fic29sdXRl
UmVjdCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
dXRwdXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGwuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OkZpbHRlck91dHB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OmNyZWF0ZUZpbHRlclJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0cHV0OjpnZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJPdXRwdXQ6OnJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0
cHV0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlZmVyZW5jZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6YWJzb2x1dGVE
cmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29weVBpeGVsQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRv
Q29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZXN1bHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cHJpbWl0aXZlU3Vi
cmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmlzQWxwaGFJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnNldElzQWxwaGFJbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKTogRGVsZXRlZC4K
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmVmZmVjdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHlT
b2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5U29mdHdh
cmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVM
aWdodGluZ1NvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6YXBw
bHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAo
V2ViQ29yZTo6RkVNZXJnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjphcHBseVNvZnR3YXJlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZz
ZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNv
ZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
UmVzdWx0U29mdHdhcmU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmguCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpD
U1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTZXBpYUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNp
dHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9z
b3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5w
dXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRS
ZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpi
dWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0
UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmRlY29kZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdp
bkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFw
cGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBy
aW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBv
c2VkRW51bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29t
cG9zaXRlT3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0
eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhw
b3NlZEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25U
eXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlU
cmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9w
U2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZCBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZF
TWVyZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9s
b2d5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xv
Z3lFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9s
b2d5T3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6ZnJvbVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsOgorICAg
ICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0
KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdGRVNwb3RMaWdodEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRpbGVFbGVtZW50OjpidWlsZCBjb25zdCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmli
dXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHlTb2Z0
d2FyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJl
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjph
ZGROYW1lZEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6Om5hbWVkRWZmZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2V0dXBCdWlsdGluRWZmZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmRlY29k
ZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckdlb21ldHJ5OjpTVkdGaWx0ZXJHZW9tZXRyeSk6CisgICAgICAgICogeG1sL1hQYXRo
R3JhbW1hci5jcHA6CisgICAgICAgICogeG1sL1hQYXRoR3JhbW1hci55OgorCiAyMDIxLTEwLTA1
ICBQYXRyaWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBTaG93IGNvbG9yIHNwYWNlIGZvciBjYW52YXNlcyBpbiB0aGUgR3JhcGhpY3MgdGFiIG9u
IHRoZSBvdmVydmlldyBjYXJkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1OTk1ZWNlZTVjNmIyYWY1MDZhYmU5YWU3
MjI2OGQ1Y2ZkMzViZDNkLi43ZTFhYjA3NGZhNjcxZWRhMzMyYThlNDdmZjM4NTk3Njc3ZmM5YzFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIxLTEwLTA1ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gRW5hYmxlIGZpbHRl
cnMgaW4gR1BVIFByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMTI1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zp
bHRlckdlb21ldHJ5UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZTo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjpG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTo6dGFrZUdlb21ldHJ5KToKKyAgICAgICAgKElQQzo6Rmls
dGVyR2VvbWV0cnlSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRl
ckdlb21ldHJ5UmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0
ZXJSZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6Rmls
dGVyUmVmZXJlbmNlKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjp0YWtlRmlsdGVy
KToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXQvbWVzc2FnZXMucHk6CisgICAgICAgICh0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2Rl
Y2xhcmVkKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorCiAyMDIxLTEwLTA1
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQXV0aG9yaXphdGlv
biBoZWFkZXIgbG9zdCBvbiAzMHggcmVkaXJlY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDFlZmY2YWVi
MzliYTAyYTczNWYyMTRjMzRmZDcwYzEwMzNlOTNmMTAuLjEzNmRiYTRiYTgyNTE5ODZkM2Q2MDM3
NmI4MTRkMDQ4NTUyNTY1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDQ3LDE0ICsyMDQ3LDM1IEBA
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2Vv
bWV0cnkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJSZXN1bHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGln
aHRTb3VyY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCitwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hh
ZG93U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxv
b2RTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVMaWdodGluZ1NvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRU1lcmdlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pc28vSVNPQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT09yaWdpbmFsRm9ybWF0
Qm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94
LmNwcApAQCAtMjYzNiw3ICsyNjU3LDYgQEAgc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
CiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcAogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAot
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKIHN2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwCiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRp
dGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmNwcAogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlQW5p
bWF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBmMzBmZGFiYTA0YzI2MDY3ZjE2
NDhmMjc0MjcyZDVlMmFlMWQzZDRkLi5mZTk1NzhiMmQ4MmQzZjEyOGQyNWU4MzBkMWIxOTk4MTg0
YTNlNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTM5OCw3ICszOTgsOCBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1h
Z2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJD
b25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENv
cmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3Jl
SW1hZ2UubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVEZXZpY2VNZXRhbC5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MTRjM2Q3MGMyY2IxM2RmYzFjMjBjYjI2
MDg1MjY3MGY0ZWQ3ZTVhLi5kODUyYjRkMzM2MmYzOWNiNDBiM2E4ZWQ4ZDU0NWQxOTQwNGJjMjY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0yMzUsNyArMjM1LDYgQEAKIAkJMDgxNjY4RDQxMjU2MDNCRjAwNkYyNURFIC8qIFNW
R1RleHRDaHVua0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4MTY2OEQyMTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVy
LmggKi87IH07CiAJCTA4MTY2OERBMTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5n
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2
NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oICovOyB9OwogCQkw
ODFBQThEQTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODFBQThEOTExMTEyMzdFMDAy
QUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi87IH07Ci0JCTA4MUVCRjNCMEZEMzRGNDEw
MERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVy
QnVpbGRlci5oICovOyB9OwogCQkwODNEQUVBNzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4M0RBRUEzMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5oICovOyB9OwogCQkwODNEQUVBOTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODNEQUVBNTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmggKi87IH07CiAJCTA4NDU2ODA4MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0
cmljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0
NTY4MDcxMkI5MERBNjAwOTYwQTlGIC8qIEZvbnRNZXRyaWNzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc3Niw4ICs3NzUsNiBAQAogCQkyQUVG
NkZERDI2RTdFQ0NGMDAzMjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBRUY2RkNFMjZFNzFGMkQwMDMyNkQwMiAv
KiBDU1NOdW1lcmljVHlwZS5oICovOyB9OwogCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0IgLyog
UmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAq
LzsgfTsKIAkJMkJFOEUyQzcxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkJFOEUy
QzYxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oICovOyB9OwotCQky
Qzg1NjUzNDI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDODU2NTMzMjRDMEY3M0Mw
MEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovOyB9OwotCQkyQ0FBNEEzQTI0QkUx
OEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDQUE0QTM5MjRCRTE4QjcwMDlE
RUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovOyB9OwogCQkyRDA2MjE0
NDFEQTYzOUI2MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDIxREE2Mzk4
ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQw
NjIxNDUxREE2MzlCQTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0MzFEQTYz
OTg4MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJMkQw
NjIxNEQxREE2M0E4QjAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0OTFEQTYzQTc5MDBBN0ZC
MjYgLyogV2ViS2l0TWVkaWFLZXlzLmNwcCAqLzsgfTsKQEAgLTIyODIsNiArMjI3OSwxNSBAQAog
CQk3MUVBRENEODIyMDg3RTcyMDA2NUE0NUYgLyogUG9pbnRlcklELmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVBRENENjIyMDg3RTZEMDA2NUE0NUYg
LyogUG9pbnRlcklELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJC
Mzg4RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAvKiBD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NzIwMENGNTkyNzA5QUJGQjAwNTE1QzI0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZp
bHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTcyMDBDRjVBMjcwOUFDMTEwMDUxNUMyNCAvKiBGaWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjYyNzAzRDY2RDAwM0M1
QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzIwMENGNUIyNzA5QUNCNjAwNTE1QzI0IC8qIEZpbHRlclJlc3Vs
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDOTBB
M0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBDRjVDMjcwOUFEM0EwMDUxNUMyNCAv
KiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzIxQ0E4RjUyNzAzOTQ1NjAwQzBERDY1IC8qIEZpbHRlclJlcHJlc2Vu
dGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzIwMENGNUQyNzA5QURDRTAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5NzhENDMyNkZFOURFNzAwRkQy
QzU2IC8qIEZpbHRlck91dHB1dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyMDBDRjY1MjcwQzA2MTcwMDUxNUMyNCAvKiBGaWx0ZXJHZW9tZXRy
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNE
ODMyNzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIwMENGNjgyNzBDNDc4NzAwNTE1QzI0
IC8qIEZpbHRlclJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIwMENGNjcyNzBDNDcxNDAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBD
RjZCMjcwQ0Q2MDkwMDUxNUMyNCAvKiBDU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NG
aWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjAwQ0Y2QzI3MENENjE5MDA1MTVDMjQgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUg
LyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0IyQTI0
MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVy
dHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjFCNDk3NDI1MTJCQTNC
MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VC
aXRtYXBCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTI3MDIsOCArMjcwOCw2IEBACiAJCTg0MjI0MTk0MTA3RTc4QTcwMDc2NkE4NyAv
KiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5oICovOyB9OwogCQk4NDMwMEJENjEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0
aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuaCAq
LzsgfTsKIAkJODQzMDBCRDgxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MzAwQkQ3MTIwQzlB
RDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi87IH07Ci0JCTg0NUU3MkY4MEZEMjYxRUUw
MEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLzsgfTsKLQkJ
ODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8q
IFNWR0ZpbHRlci5oICovOyB9OwogCQk4NDY1MEU3RTIzODdBRDdEMDA2MjY2RTIgLyogTWVkaWFR
dWVyeUxpc3RFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ2NTBFN0MyMzg3QUQ3QzAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaCAq
LzsgfTsKIAkJODQ3MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUEx
MjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovOyB9OwogCQk4NDczMEQ3
OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUMxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFQ29udm9sdmVNYXRyaXguaCAqLzsgfTsKQEAgLTI3MTMsNyArMjcxNyw3IEBACiAJCTg0NzMw
RDgxMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2NDEyNDhGMEIzMDBEM0E5QzkgLyogRkVM
aWdodGluZy5oICovOyB9OwogCQk4NDczMEQ4MzEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjYx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuaCAqLzsgfTsKIAkJODQ3MzBEODUxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFTW9ycGhvbG9neS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3MzBENjgxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTW9ycGhvbG9neS5o
ICovOyB9OwotCQk4NDczMEQ4NzEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZBMTI0OEYwQjMw
MEQzQTlDOSAvKiBGRU9mZnNldC5oICovOyB9OworCQk4NDczMEQ4NzEyNDhGMEIzMDBEM0E5Qzkg
LyogRkVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg0NzMwRDg5MTI0OEYwQjMwMEQz
QTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZDMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFy
TGlnaHRpbmcuaCAqLzsgfTsKIAkJODQ3MzBEOEIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENkUx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovOyB9OwogCQk4NDczMEQ4RDEyNDhGMEIzMDBE
M0E5QzkgLyogRkVUdXJidWxlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmgg
Ki87IH07CkBAIC02MDcyLDggKzYwNzYsNiBAQAogCQkwODE2NjhENzEyNTYwM0Q1MDA2RjI1REUg
LyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExheW91dEVuZ2luZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODFBQThEOTExMTEyMzdFMDAyQUIwNkUgLyog
U1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODFFQkYz
ODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1
aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMjBGMDFBN0ZCMDAzNDI3
NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjIyMCw4
ICs2MjIyLDYgQEAKIAkJMEY0OTY2QTgxREI0MEM0MzAwQTI3NEJCIC8qIEpTRE9NUG9pbnRSZWFk
T25seS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVBvaW50
UmVhZE9ubHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5NjZBOTFEQjQw
QzQzMDBBMjc0QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4NDIxM0I3
ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03MzI5LDEwICs3MzI5LDYgQEAKIAkJMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8q
IFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDNjEy
QTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxN
ZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDODU2
NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyQ0FBNEEzNzI0QkUxOEExMDA5REVFNzAgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkNBQTRB
MzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQyMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRp
YUtleU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEMDYyMTQzMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VF
dmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1l
c3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDA2MjE0NzFEQTYz
QTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlOZWVkZWRFdmVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU5lZWRlZEV2ZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNDc2LDEwICsxMDQ3MiwyMCBAQAogCQk3
MUY2RUU0MTI1NUVERjlDMDBGQzRDNUIgLyogR3JpZFRyYWNrU2l6ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmlkVHJhY2tTaXplLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzFGOTM2RjcxREQ0Rjk5QjAwOTIyQ0M3IC8qIHRyYWNrcy1zdXBw
b3J0LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gInRyYWNrcy1z
dXBwb3J0LmpzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGRjg1MTgyMkEzRjgx
RjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyMDBDRjU3MjcwNzhDNDIwMDUxNUMyNCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXJHZW9tZXRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjAwQ0Y1RTI3MEFEMTM3MDA1MTVDMjQgLyogRmlsdGVyT3V0cHV0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlck91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyMDBDRjVGMjcwQkIwMTkwMDUxNUMyNCAvKiBTb3VyY2VHcmFwaGljQ29yZUlt
YWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU291cmNlR3Jh
cGhpY0NvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjEy
NzBCQkRBODAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdENvcmVJbWFnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzIwMENGNjIyNzBCQkRGQjAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdENvcmVJbWFnZS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpbHRlclJlc3VsdENvcmVJbWFn
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjMyNzBCQzJDODAwNTE1
QzI0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRl
clJlc3VsdFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENG
NjQyNzBCQzJDODAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZpbHRlclJlc3VsdFNvZnR3YXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMDBDRjY2MjcwQzMyMUQwMDUxNUMyNCAvKiBGaWx0ZXJHZW9tZXRyeS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGaWx0ZXJHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyMDBDRjY3MjcwQzQ3MTQwMDUxNUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmlsdGVyUmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3Bl
cnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzIxQjQ5NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFj
a2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1h
Z2VCaXRtYXBCYWNraW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQml0bWFwQmFja2luZy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFDQThGNTI3MDM5NDU2MDBDMERENjUgLyog
RmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVwcmVzZW50YXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAw
NTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFt
ZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0MkFDOTUyNTc1OEZFMDAw
NUE5Q0YxIC8qIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1p
bk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1p
bk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDUwNCw5ICsxMDUxMCwz
NSBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyOTc4RDQzMjZGRTlERTcwMEZEMkM1NiAvKiBGaWx0ZXJPdXRwdXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmlsdGVyT3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
OTlCQzY0MjNENjg2QTYwMENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjlEMDUyRTI1MzEzRTI2MDA0MjIwOTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2NjI3MDNENjZEMDAzQzVBQUUgLyogRmlsdGVy
RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZpbHRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBODNENkEyNzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZH
RmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QzI3MDNEQzNBMDAzQzVBQUUgLyog
Q1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0Zp
bHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZEMjcwM0RDM0Ew
MDNDNUFBRSAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZFMjcwM0RG
RDgwMDNDNUFBRSAvKiBGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzAyNzA1NzUwNDAwM0M1QUFFIC8q
IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VHcmFw
aGljU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MTI3
MDU3ODUyMDAzQzVBQUUgLyogU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBODNENzIyNzA1NzlDNzAwM0M1QUFFIC8qIEZFT2Zmc2V0U29mdHdhcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRkVPZmZzZXRTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDczMjcwNTdDQkUwMDNDNUFBRSAvKiBGRU1vcnBob2xvZ3lTb2Z0d2Fy
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDc0MjcwNTgzN0QwMDNDNUFBRSAvKiBGRU1l
cmdlU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVNZXJnZVNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzUyNzA1ODVCODAwM0M1QUFFIC8q
IEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNvbG9yTWF0
cml4U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3NjI3
MDU4OTAyMDAzQzVBQUUgLyogRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBODNENzgyNzA1OEMwMzAwM0M1QUFFIC8qIEZFRmxvb2RTb2Z0d2FyZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGRUZsb29kU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q3QTI3MDVBREZBMDAzQzVBQUUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2Fy
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdCMjcwNUIyQzkwMDND
NUFBRSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZF
R2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkE4M0Q3QzI3MDVCRDg2MDAzQzVBQUUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdEMjcwNUM3RUYwMDNDNUFBRSAvKiBGRURpc3Bs
YWNlbWVudE1hcFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFRGlzcGxhY2VtZW50
TWFwU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3RTI3
MDYzMzZCMDAzQzVBQUUgLyogRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkE4M0Q3RjI3MDYzRjRDMDAzQzVBQUUgLyogRkVUaWxlU29mdHdhcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRkVUaWxlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q4MDI3MDY0MUI2MDAzQzVBQUUgLyogRkVUdXJidWxlbmNlU29mdHdhcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MTI3MDY0NkUyMDAzQzVBQUUgLyogRkVMaWdo
dGluZ1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTGlnaHRpbmdTb2Z0d2FyZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgyMjcwNjUxMUIwMDNDNUFB
RSAvKiBGRUJsZW5kU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVCbGVuZFNvZnR3
YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEODMyNzA2Njc0QzAw
M0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckdlb21ldHJ5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0E0MjNFMTczMjcwMDhENzQx
QyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBs
YXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA1MTgs
NiArMTA1NTAsOCBAQAogCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNB
RDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRp
bmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzkwQTM5MjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0
ZXJSZXN1bHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyUmVzdWx0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJDOTBBM0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRl
clJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNF
WFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyog
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTQ1MSw5ICsxMTQ4NSw2
IEBACiAJCTg0MzAwQkQ1MTIwQzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8q
IFNWR1BhdGhTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0
aFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJEOTEyMEM5QUVE
MDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU3RyaW5nU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGQTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmls
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1MEU3QzIzODdBRDdDMDA2MjY2RTIgLyogTWVk
aWFRdWVyeUxpc3RFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRp
YVF1ZXJ5TGlzdEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdG
MjM4N0FEOEEwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1MEU4MDIzODdBRDhCMDA2MjY2RTIgLyogTWVkaWFR
dWVyeUxpc3RFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFRdWVyeUxpc3RF
dmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTQyNiw4ICsxOTQ1Nyw5
IEBACiAJCTJDRTExODk4MjRDMjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2UgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTJDQUE0QTM5MjRCRTE4QjcwMDlE
RUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovLAotCQkJCTJDQUE0QTM3
MjRCRTE4QTEwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSAqLywK
KwkJCQk3MjAwQ0Y2MTI3MEJCREE4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgg
Ki8sCisJCQkJNzIwMENGNjIyNzBCQkRGQjAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdENvcmVJbWFn
ZS5tbSAqLywKKwkJCQk3MjAwQ0Y1RjI3MEJCMDE5MDA1MTVDMjQgLyogU291cmNlR3JhcGhpY0Nv
cmVJbWFnZS5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gY29yZWltYWdlOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKQEAgLTIzMDMwLDYgKzIzMDYyLDMyIEBACiAJCQlwYXRoID0gIm1vZGVs
LWVsZW1lbnQiOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzJBODNENkYy
NzA1NzREMDAwM0M1QUFFIC8qIHNvZnR3YXJlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQk3MkE4M0Q4MjI3MDY1MTFCMDAzQzVBQUUgLyogRkVCbGVuZFNv
ZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xvck1h
dHJpeFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3QTI3MDVBREZBMDAzQzVBQUUgLyogRkVD
b21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NjI3MDU4OTAyMDAz
QzVBQUUgLyogRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0MyNzA1QkQ4
NjAwM0M1QUFFIC8qIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNE
N0QyNzA1QzdFRjAwM0M1QUFFIC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovLAor
CQkJCTcyQTgzRDdFMjcwNjMzNkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAg
Ki8sCisJCQkJNzJBODNENzgyNzA1OEMwMzAwM0M1QUFFIC8qIEZFRmxvb2RTb2Z0d2FyZS5jcHAg
Ki8sCisJCQkJNzJBODNEN0IyNzA1QjJDOTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdh
cmUuY3BwICovLAorCQkJCTcyQTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29m
dHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc0MjcwNTgzN0QwMDNDNUFBRSAvKiBGRU1lcmdlU29m
dHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDczMjcwNTdDQkUwMDNDNUFBRSAvKiBGRU1vcnBob2xv
Z3lTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzIyNzA1NzlDNzAwM0M1QUFFIC8qIEZFT2Zm
c2V0U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRp
bGVTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEODAyNzA2NDFCNjAwM0M1QUFFIC8qIEZFVHVy
YnVsZW5jZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MjAwQ0Y2MzI3MEJDMkM4MDA1MTVDMjQgLyog
RmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwICovLAorCQkJCTcyMDBDRjY0MjcwQkMyQzgwMDUxNUMy
NCAvKiBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oICovLAorCQkJCTcyQTgzRDcxMjcwNTc4NTIwMDND
NUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MDI3MDU3NTA0
MDAzQzVBQUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRo
ID0gc29mdHdhcmU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QzAxMUYz
QzI0RkFEMzYwMDA1QkVGMTAgLyogU2V0dGluZ3NUZW1wbGF0ZXMgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjUwNzgsNiArMjUxMzYsNyBAQAogCQlBNzVF
OEI3RjBFMURFMkIwMDA3RjI0ODEgLyogZmlsdGVycyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNzJBODNENkYyNzA1NzREMDAwM0M1QUFFIC8qIHNvZnR3
YXJlICovLAogCQkJCUExRTExNTQzMTMwMTVDM0QwMDU0QUM4QyAvKiBEaXN0YW50TGlnaHRTb3Vy
Y2UuY3BwICovLAogCQkJCTg0NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRT
b3VyY2UuaCAqLywKIAkJCQlBNzVFOEI4MDBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5jcHAg
Ki8sCkBAIC0yNTExNCwxNSArMjUxNzMsMjMgQEAKIAkJCQk4NDczMEQ2RTEyNDhGMEIzMDBEM0E5
QzkgLyogRkVUaWxlLmggKi8sCiAJCQkJODQ3MzBENkYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVy
YnVsZW5jZS5jcHAgKi8sCiAJCQkJODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVs
ZW5jZS5oICovLAotCQkJCTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLywK
KwkJCQk3MkE4M0Q2RTI3MDNERkQ4MDAzQzVBQUUgLyogRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4
M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi8sCiAJCQkJMDhDOTI1MTcwRkNDN0M0
QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAgKi8sCiAJCQkJMDhDOTI1MTgwRkNDN0M0QTAw
NDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAotCQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3
MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCi0JCQkJMkM4NTY1MzMyNEMwRjczQzAw
QTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCisJCQkJNzJBODNENjYyNzAzRDY2
RDAwM0M1QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCisJCQkJNzIwMENGNjYyNzBDMzIxRDAw
NTE1QzI0IC8qIEZpbHRlckdlb21ldHJ5LmNwcCAqLywKKwkJCQk3MkE4M0Q4MzI3MDY2NzRDMDAz
QzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLywKIAkJCQk0OUVDRUI2MzE0OTk3OTBEMDBDREQz
QTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUVDRUI2NDE0OTk3OTBEMDBDREQz
QTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0
IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLAogCQkJCTQ5RUNFQjY2MTQ5OTc5MEQwMENERDNB
NCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggKi8sCisJCQkJNzIwMENGNUUyNzBBRDEzNzAwNTE1QzI0
IC8qIEZpbHRlck91dHB1dC5jcHAgKi8sCisJCQkJNzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8q
IEZpbHRlck91dHB1dC5oICovLAorCQkJCTcyMDBDRjY3MjcwQzQ3MTQwMDUxNUMyNCAvKiBGaWx0
ZXJSZWZlcmVuY2UuaCAqLywKKwkJCQk3MjFDQThGNTI3MDM5NDU2MDBDMERENjUgLyogRmlsdGVy
UmVwcmVzZW50YXRpb24uaCAqLywKKwkJCQk3MkM5MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmls
dGVyUmVzdWx0LmNwcCAqLywKKwkJCQk3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVy
UmVzdWx0LmggKi8sCiAJCQkJODQ3MzBENzQxMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNl
LmggKi8sCiAJCQkJQTFFMTE1NDUxMzAxNUM0RTAwNTRBQzhDIC8qIFBvaW50TGlnaHRTb3VyY2Uu
Y3BwICovLAogCQkJCTg0NzMwRDc1MTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNl
LmggKi8sCkBAIC0yNjg4NCwxMCArMjY5NTEsOSBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjI1
NTk4RUEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuY3BwICovLAogCQkJCUIyNTU5OEVC
MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdlLmggKi8sCi0JCQkJODQ1RTcyRjkwRkQyNjIz
OTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8sCi0JCQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3
RDc5IC8qIFNWR0ZpbHRlci5oICovLAotCQkJCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBT
VkdGaWx0ZXJCdWlsZGVyLmNwcCAqLywKLQkJCQkwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyog
U1ZHRmlsdGVyQnVpbGRlci5oICovLAorCQkJCTcyQTgzRDZBMjcwM0RBOUEwMDNDNUFBRSAvKiBT
VkdGaWx0ZXIuY3BwICovLAorCQkJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0
ZXIuaCAqLywKKwkJCQk3MjAwQ0Y1NzI3MDc4QzQyMDA1MTVDMjQgLyogU1ZHRmlsdGVyR2VvbWV0
cnkuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZmlsdGVyczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC0yOTk4Miw4ICszMDA0OCw4IEBACiAJCQkJQ0E3RTlCNDcyNDM2MURDNTAwNEU4
OUY2IC8qIENvbnRlbnRmdWxQYWludENoZWNrZXIuaCAqLywKIAkJCQk5MzkyRjE0RjBBRDE4NjIz
MDA2OTFCRDQgLyogQ291bnRlck5vZGUuY3BwICovLAogCQkJCTkzOTJGMTRCMEFEMTg2MUIwMDY5
MUJENCAvKiBDb3VudGVyTm9kZS5oICovLAotCQkJCTBGNTNGQjgxMjEzQjFCQjgwMEM0MEQzNCAv
KiBDU1NGaWx0ZXIuY3BwICovLAotCQkJCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NG
aWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2QzI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVyLmNw
cCAqLywKKwkJCQk3MkE4M0Q2RDI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVyLmggKi8sCiAJ
CQkJRTNCQkMyNDUyMzgzNTUxQTAwNkVDMzlGIC8qIENTU1ZhbHVlS2V5LmggKi8sCiAJCQkJRTRB
OEQyMTUyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmNwcCAqLywKIAkJCQlFNEE4RDIx
NDIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdpb24uaCAqLywKQEAgLTMyMDYyLDYgKzMyMTI4
LDcgQEAKIAkJCQlBQTIxRUNDRDBBQkYwRkM2MDAyQjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NzlFMTQxQkIyMTVCQjAwQ0FBOEJGIC8qIENTU0N1
c3RvbVByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk0NDc2QkRCMURGQ0FDMDMw
MDY5MEUyMyAvKiBDU1NEZWZlcnJlZFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENG
NkIyNzBDRDYwOTAwNTE1QzI0IC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkJC
MEM1QjgxN0JCRDYyOTAwM0QzNjc3IC8qIENTU0ZpbHRlckltYWdlVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDNjRCNEQ2MENCNDI5OEEwMDVGMkI2MiAvKiBDU1NGb250RmFjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTgwRTZDRkQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ZvbnRGYWNlUnVs
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjU2MiwxMiArMzI2MjksMTYgQEAKIAkJCQk5MzU0MjQz
MDI3MDNDQjg2MDA1Q0E3MkMgLyogRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzVFQjY5RjBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MTJCRTQ4MzFGRTg2NUREMDAyMDMxQ0MgLyogRmlsbE1vZGUuaCBp
biBIZWFkZXJzICovLAotCQkJCTg0NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTcyMDBDRjU5MjcwOUFCRkIwMDUxNUMyNCAvKiBGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZl
Y3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTJDODU2NTM0MjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0
ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkNBQTRBM0EyNEJFMThCNzAw
OURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3MjAwQ0Y1QTI3MDlBQzExMDA1MTVDMjQgLyogRmlsdGVyRnVuY3Rpb24uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyMDBDRjY1MjcwQzA2MTcwMDUxNUMyNCAvKiBGaWx0ZXJHZW9tZXRyeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VCNkUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9w
ZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VCNzAxNDk5NzkwRDAwQ0REM0E0IC8q
IEZpbHRlck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDBDRjVEMjcwOUFEQ0Uw
MDUxNUMyNCAvKiBGaWx0ZXJPdXRwdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDBDRjY4Mjcw
QzQ3ODcwMDUxNUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcy
MDBDRjVDMjcwOUFEM0EwMDUxNUMyNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzIwMENGNUIyNzA5QUNCNjAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25z
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjA0RjBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRU
YWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCN0QyREQyNTBGRDgyODAwMDIwN0FB
IC8qIEZsZXhGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTQ0Miw4ICsz
NTUxMyw3IEBACiAJCQkJQjIyMjdBMDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFU3BvdExpZ2h0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMDYwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR0ZFVGlsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTA5MEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk4
NDVFNzJGQzBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzIwMENGNkMyNzBDRDYxOTAwNTE1QzI0IC8qIFNWR0ZpbHRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjIyMjdBMEMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlckVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
MjI3QTEyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGaXRUb1ZpZXdCb3guaCBpbiBIZWFkZXJzICov
LApAQCAtMzYyMDYsNyArMzYyNzYsNiBAQAogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyog
UHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYXR0cmlidXRl
cyA9IHsKLQkJCQlEZWZhdWx0QnVpbGRTeXN0ZW1UeXBlRm9yV29ya3NwYWNlID0gT3JpZ2luYWw7
CiAJCQkJTGFzdFN3aWZ0VXBkYXRlQ2hlY2sgPSAwNzAwOwogCQkJCUxhc3RVcGdyYWRlQ2hlY2sg
PSAxMTQwOwogCQkJCVRhcmdldEF0dHJpYnV0ZXMgPSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
RmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggOGNmOTA5YWU5ZTUzNzI0YjkxZGI0YWNlMTRhZTI4
NTcxZGQ5NTUyNi4uMzczNmI0ZjkyODIxMjRlOTExOGUyYmE0MzdmMTJkY2VhMjM5OTE2YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRy
eS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpAQCAtMTE2LDI2ICsxMTcsMjMgQEAgUmVm
UHRyPEltYWdlPiBDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgRmxvYXRTaXoKIAogICAgIC8vIFRyYW5zZm9ybSBJbWFnZSBpbnRvIEltYWdl
QnVmZmVyLgogICAgIC8vIEZJWE1FICgxNDk0MjQpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJl
IHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIGF1dG8gdGV4dHVyZSA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgYXV0
byByZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKyAgICBhdXRv
IHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIDEsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwogICAgIGlm
ICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiAKICAgICBh
dXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgc2l6ZSB9OwogICAgIHRleHR1cmUtPmNv
bnRleHQoKS5kcmF3SW1hZ2UoKmltYWdlLCBpbWFnZVJlY3QpOwogCi0gICAgYXV0byBjc3NGaWx0
ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2Uo
V1RGTW92ZSh0ZXh0dXJlKSk7Ci0gICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZVJlY3QoaW1h
Z2VSZWN0KTsKLSAgICBjc3NGaWx0ZXItPnNldEZpbHRlclJlZ2lvbihpbWFnZVJlY3QpOwotICAg
IGlmICghY3NzRmlsdGVyLT5idWlsZChyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCBGaWx0
ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pKQorICAgIGF1dG8gZmlsdGVyID0gQ1NTRmlsdGVy
OjpjcmVhdGUocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSk7Cisg
ICAgaWYgKCFmaWx0ZXIpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwotICAg
IGNzc0ZpbHRlci0+YXBwbHkoKTsKIAotICAgIGF1dG8qIG91dHB1dCA9IGNzc0ZpbHRlci0+b3V0
cHV0KCk7Ci0gICAgaWYgKCFvdXRwdXQpCi0gICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFn
ZSgpOworICAgIGF1dG8gZ2VvbWV0cnkgPSBtYWtlVW5pcXVlPEZpbHRlckdlb21ldHJ5PihpbWFn
ZVJlY3QsIGltYWdlUmVjdCk7CisgICAgaWYgKGF1dG8gZmlsdGVyZWRJbWFnZSA9IHRleHR1cmUt
PmZpbHRlcmVkSW1hZ2UoKmZpbHRlciwgV1RGTW92ZShnZW9tZXRyeSkpKQorICAgICAgICByZXR1
cm4gZmlsdGVyZWRJbWFnZTsKIAotICAgIHJldHVybiBvdXRwdXQtPmNvcHlJbWFnZSgpOworICAg
IHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogfQogCiB2b2lkIENTU0ZpbHRlckltYWdlVmFs
dWU6OmZpbHRlckltYWdlQ2hhbmdlZChjb25zdCBJbnRSZWN0JikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAppbmRleCBh
NWRkMjhiNzM3YmM4MzVlODZlYTNlZjIwMmE3NGU0NmFiMjIyMTgxLi44OGEzMTAyNzc5ODJmMzI3
ZDI0Mzk0NmVlZWY1MjZlNWY3MjA5NzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCkBAIC0yNSw2ICsyNSw3IEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCkBAIC0xMzgsNiArMTM5LDE5IEBA
IHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCisgICAgUmVmUHRy
PEltYWdlPiBmaWx0ZXJlZEltYWdlKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBzdGQ6OnVuaXF1ZV9w
dHI8RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpIG92ZXJyaWRlCisgICAgeworICAgICAgICBh
dXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKTsKKyAgICAgICAgaWYgKCFiYWNr
ZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBjb25z
dF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgp
OworCisgICAgICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisgICAgICAgIHN0
ZDo6dGllKGltYWdlQnVmZmVyLCBzdGQ6Omlnbm9yZSkgPSBmaWx0ZXIuYXBwbHkodGhpcywgV1RG
TW92ZShnZW9tZXRyeSkpOworICAgICAgICByZXR1cm4gaW1hZ2VCdWZmZXIgPyBpbWFnZUJ1ZmZl
ci0+Y29weUltYWdlKCkgOiBudWxscHRyOworICAgIH0KKwogICAgIHZvaWQgZHJhdyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5k
Q3JlYXRlZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA4NWUzZDI0YmViMGMyMDRjMzI1YTI2NTZkOWNhNTQw
NDA4NjZmYjcyLi5jZTg5ZjRiZDNhZGY3OGUyMjU4OTFlZDY3MzczYzk5ZjBjOTY5MmYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAKQEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgogI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmls
dGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAi
R3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtNjA5LDYgKzYxMSwxMyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0CiAgICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmco
V1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0K
IAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0ZXImIGZp
bHRlciwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2Vv
bWV0cnk+JiYgZ2VvbWV0cnkpCit7CisgICAgYXV0byBbZmlsdGVyZEltYWdlLCBpbWFnZVJlY3Rd
ID0gZmlsdGVyLmFwcGx5KHNvdXJjZUltYWdlLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgaWYg
KGZpbHRlcmRJbWFnZSkKKyAgICAgICAgZHJhd0ltYWdlQnVmZmVyKCpmaWx0ZXJkSW1hZ2UsIGlt
YWdlUmVjdCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIHsKICAgICBQYXRoIHBhdGg7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDZh
NGFlNWRhZDVhN2IyYTlkYzQyMzlmY2E5YTQ2YjcxNzgxMDlmM2EuLmQ1NzNiMjE1MjI4MjU2MmVl
NDI2MTJkMjY5ZjE1ZmFiZDJkYWY4YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC04NSw2ICs4NSw4IEBAIHR5cGVkZWYg
dW5zaWduZWQgY2hhciBVSW50ODsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5l
VHJhbnNmb3JtOworY2xhc3MgRmlsdGVyOworY2xhc3MgRmlsdGVyR2VvbWV0cnk7CiBjbGFzcyBG
bG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU7CkBAIC00NDIsNiArNDQ0LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4s
IGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd0ZpbHRlckltYWdlQnVmZmVyKEZpbHRlciYsIEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCBiMWU4ZDNiMDRhYjI2MDUxMzI4ODZhMGE4MDMw
NTA4YTEzMTYxMjgwLi5hZWQ1NTMyMTRmMjJhZGNlMTE3YWQ3YjBjYTI3ZjhlZmIwZjA4ZDgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAg
LTQyLDYgKzQyLDkgQEAgY2xhc3MgRHJhd2luZ0NvbnRleHQ7CiBzdHJ1Y3QgSXRlbUJ1ZmZlckhh
bmRsZTsKIH0KIAorY2xhc3MgRmlsdGVyOworY2xhc3MgRmlsdGVyR2VvbWV0cnk7CisKIGNsYXNz
IEltYWdlQnVmZmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEltYWdlQnVmZmVyLCBX
VEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPEltYWdl
QnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24g
YWxsb2NhdGlvbiBmYWlsdXJlLgpAQCAtMTA2LDYgKzEwOSw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJlZlB0cjxJbWFn
ZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2
ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmlsdGVyJiwgc3RkOjp1bmlx
dWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKSA9IDA7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2Ug
YnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhp
cyBidWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBjb3B5
UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJz
Q29jb2EubW0KaW5kZXggZDRmYTNjNGJmYWQzNGFhZjMwOTNhOWYwMjQ4NmJiNzI3Zjk4ZDRhYS4u
ZDQ1YWIzM2M0NDA4ZWQ2MzYwNzQ2MTRkNDZmNDU5ZGE2ZjUxZDYzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnND
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9Q
bGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotLy8gRklYTUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBDU1NG
aWx0ZXI6OmJ1aWxkKCkgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjAwOCkuCisvLyBGSVhNRTogU2hvdWxkIHNoYXJlIHRoZXNlIHZhbHVlcyB3aXRoIEZpbHRlcjo6
YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4KS4K
IHN0YXRpYyBjb25zdCBkb3VibGUgc2VwaWFGdWxsQ29uc3RhbnRzWzNdWzNdID0gewogICAgIHsg
MC4zOTMsIDAuNzY5LCAwLjE4OSB9LAogICAgIHsgMC4zNDksIDAuNjg2LCAwLjE2OCB9LApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTZjOGRmNGQ1NWI0NTYxMzU0OWUzYWY0OTE5MmEyNmUyYzA0
NGFmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0qIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9y
dCAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCIKLSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KLQotT0JKQ19DTEFTUyBDSUltYWdlOwotT0JKQ19D
TEFTUyBDSUZpbHRlcjsKLU9CSkNfQ0xBU1MgQ0lDb250ZXh0OwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEZFQ29sb3JNYXRyaXg7Ci1jbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyOwot
Y2xhc3MgU291cmNlR3JhcGhpYzsKLQotY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIAotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKLSAgICBS
ZXRhaW5QdHI8Q0lDb250ZXh0PiBzaGFyZWRDSUNvbnRleHQoKTsKLSAgICB2b2lkIGFwcGx5RWZm
ZWN0cyhGaWx0ZXJFZmZlY3QmKSBmaW5hbDsKLSAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fb3V0cHV0SW1hZ2U7IH0KLSAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkg
Y29uc3QgZmluYWw7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYp
IGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBmaW5hbDsKLSAgICBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZSgpOwotICAgIAotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gY29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3QmKTsKLSAgICB2b2lkIHJlbmRl
clRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgZmluYWw7Ci0gICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0Jik7Ci0gICAgc3RhdGljIGJvb2wg
Y2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgCi0gICAgUmV0YWlu
UHRyPENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJik7Ci0gICAg
UmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0
cml4JiwgY29uc3QgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mKTsKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IEZFQ29tcG9uZW50VHJh
bnNmZXImLCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYpOwotICAgIAotICAgIFJlZlB0cjxJ
T1N1cmZhY2VJbWFnZUJ1ZmZlcj4gbV9vdXRwdXRJbWFnZUJ1ZmZlcjsKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gbV9vdXRwdXRJbWFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2Uu
bW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjODZmYzRjMjNhZjk1NDU1NTdhNTU4
YzhjNDUxZTE5YThhMzhmYjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMzA4ICswLDAg
QEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0q
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIgotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0K
LSNpbXBvcnQgIkZFQ29sb3JNYXRyaXguaCIKLSNpbXBvcnQgIkZFQ29tcG9uZW50VHJhbnNmZXIu
aCIKLSNpbXBvcnQgIkZpbHRlci5oIgotI2ltcG9ydCAiRmlsdGVyRWZmZWN0LmgiCi0jaW1wb3J0
ICJGaWx0ZXJPcGVyYXRpb24uaCIKLSNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgotI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCi0jaW1wb3J0
ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJTb3VyY2VHcmFwaGljLmgiCi0jaW1wb3J0IDxDb3JlSW1h
Z2UvQ0lDb250ZXh0Lmg+Ci0jaW1wb3J0IDxDb3JlSW1hZ2UvQ0lGaWx0ZXIuaD4KLSNpbXBvcnQg
PENvcmVJbWFnZS9Db3JlSW1hZ2UuaD4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnRyeUNyZWF0ZShG
aWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgaWYgKGNhblJlbmRlclVzaW5nQ0lGaWx0
ZXJzKGxhc3RFZmZlY3QpKQotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZT4oKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmV0YWluUHRy
PENJQ29udGV4dD4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnNoYXJlZENJQ29udGV4
dCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDSUNvbnRleHQ+PiBj
aUNvbnRleHQgPSBbQ0lDb250ZXh0IGNvbnRleHRXaXRoT3B0aW9uczogQHsga0NJQ29udGV4dFdv
cmtpbmdDb2xvclNwYWNlOiAoX19icmlkZ2UgaWQpQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUo
a0NHQ29sb3JTcGFjZVNSR0IpfV07Ci0gICAgcmV0dXJuIGNpQ29udGV4dDsKLX0KLQotc3RhdGlj
IGJvb2wgaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGNvbnN0IEZFQ29t
cG9uZW50VHJhbnNmZXImIGVmZmVjdCkKLXsKLSAgICBhdXRvIGlzTnVsbE9yTGluZWFyID0gW10g
KGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAgICAgIHJl
dHVybiBmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktOT1dOCi0g
ICAgICAgICAgICB8fCBmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9M
SU5FQVI7Ci0gICAgfTsKLSAgICByZXR1cm4gaXNOdWxsT3JMaW5lYXIoZWZmZWN0LnJlZEZ1bmN0
aW9uKCkpICYmIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5ncmVlbkZ1bmN0aW9uKCkpCi0gICAgICAg
ICYmIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5ibHVlRnVuY3Rpb24oKSkgJiYgaXNOdWxsT3JMaW5l
YXIoZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYgZWZm
ZWN0KQotewotICAgIC8vIEZJWE1FOiBjaGFuZ2UgcmV0dXJuIHZhbHVlIHRvIHRydWUgb25jZSB0
aGV5IGFyZSBpbXBsZW1lbnRlZAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNz
VHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkNvbG9yTWF0cml4OiB7Ci0gICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8RkVDb2xvck1h
dHJpeD4oZWZmZWN0KS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
VU5LTk9XTjoKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBI
QToKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfTUFUUklYOgotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToK
LSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6Ci0gICAgICAgIHJldHVybiBpc051bGxPckxpbmVhckNv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24oZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZm
ZWN0KSk7Ci0KLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6Ci0gICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6Q29udm9sdmVNYXRyaXg6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpZmZ1c2VM
aWdodGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlzcGxhY2VtZW50TWFwOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEcm9wU2hhZG93OgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpGbG9vZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6R2F1c3Np
YW5CbHVyOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpJbWFnZToKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6TGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
Ok1lcmdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNb3JwaG9sb2d5OgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpPZmZzZXQ6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OlNwZWN1bGFyTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRpbGU6
Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6Ci0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZTo6YXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSAgICBtX291
dHB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycyhsYXN0RWZmZWN0KTsKLSAgICBpZiAoIW1fb3V0
cHV0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICByZW5kZXJUb0ltYWdlQnVmZmVyKGxhc3RF
ZmZlY3QpOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgVmVj
dG9yPFJldGFpblB0cjxDSUltYWdlPj4gaW5wdXRJbWFnZXM7Ci0gICAgCi0gICAgZm9yIChhdXRv
IGluIDogZWZmZWN0LmlucHV0RWZmZWN0cygpKSB7Ci0gICAgICAgIGF1dG8gaW5wdXRJbWFnZSA9
IGNvbm5lY3RDSUZpbHRlcnMoKmluKTsKLSAgICAgICAgaWYgKCFpbnB1dEltYWdlKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlucHV0SW1hZ2VzLmFwcGVuZChpbnB1dElt
YWdlKTsKLSAgICB9Ci0gICAgZWZmZWN0LmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0g
ICAgZWZmZWN0LnNldFJlc3VsdENvbG9yU3BhY2UoZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgCi0gICAgaWYgKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLmlzRW1wdHkoKSB8
fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgc3dpdGNoIChl
ZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6U291cmNlR3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIGltYWdlRm9yU291cmNlR3JhcGhp
Yyhkb3duY2FzdDxTb3VyY2VHcmFwaGljPihlZmZlY3QpKTsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6Q29sb3JNYXRyaXg6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvckZFQ29sb3JNYXRy
aXgoZG93bmNhc3Q8RkVDb2xvck1hdHJpeD4oZWZmZWN0KSwgaW5wdXRJbWFnZXMpOwotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKLSAgICAgICAgcmV0dXJu
IGltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zlcihkb3duY2FzdDxGRUNvbXBvbmVudFRyYW5zZmVy
PihlZmZlY3QpLCBpbnB1dEltYWdlcyk7Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRob3Nl
IGZpbHRlcnMgdXNpbmcgQ0lGaWx0ZXIgc28gdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHZh
bGlkIENJSW1hZ2UKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6Ci0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6Q29udm9sdmVNYXRyaXg6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpZmZ1
c2VMaWdodGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlzcGxhY2VtZW50TWFw
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEcm9wU2hhZG93OgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpGbG9vZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6R2F1
c3NpYW5CbHVyOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpJbWFnZToKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6TGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6Ok1lcmdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNb3JwaG9sb2d5OgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpPZmZzZXQ6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OlNwZWN1bGFyTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRp
bGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6Ci0gICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmV0YWluUHRy
PENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvclNvdXJjZUdy
YXBoaWMoU291cmNlR3JhcGhpYyYgZWZmZWN0KQotewotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSA9IGVmZmVjdC5maWx0ZXIoKS5zb3VyY2VJbWFnZSgpOwotICAgIGlmICghc291cmNlSW1h
Z2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIGlmIChpczxJT1N1cmZhY2VJ
bWFnZUJ1ZmZlcj4oKnNvdXJjZUltYWdlKSkKLSAgICAgICAgcmV0dXJuIFtDSUltYWdlIGltYWdl
V2l0aElPU3VyZmFjZTpkb3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1ZmZlcj4oKnNvdXJjZUltYWdl
KS5zdXJmYWNlKCkuc3VyZmFjZSgpXTsKLSAgICAKLSAgICByZXR1cm4gW0NJSW1hZ2UgaW1hZ2VX
aXRoQ0dJbWFnZTpzb3VyY2VJbWFnZS0+Y29weU5hdGl2ZUltYWdlKCktPnBsYXRmb3JtSW1hZ2Uo
KS5nZXQoKV07Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZTo6aW1hZ2VGb3JGRUNvbG9yTWF0cml4KGNvbnN0IEZFQ29sb3JNYXRyaXgmIGVmZmVj
dCwgY29uc3QgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mIGlucHV0SW1hZ2VzKQotewotICAg
IGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0SW1hZ2VzLmF0KDApOwotCi0gICAgYXV0byB2YWx1ZXMg
PSBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKGVmZmVjdC52YWx1ZXMoKSk7Ci0gICAg
ZmxvYXQgY29tcG9uZW50c1s5XTsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsK
LSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICAgICAgRkVDb2xvck1h
dHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJP
VEFURToKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgICAgICBicmVhazsKLSAgICAKLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6IC8vIEZJWE1FOiBBZGQgTHVtaW5hbmNlIHRvIEFscGhh
IEltcGxlbWVudGF0aW9uCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICAKLSAg
ICBhdXRvICpjb2xvck1hdHJpeEZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJ
Q29sb3JNYXRyaXgiXTsKLSAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6aW5wdXRJbWFn
ZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFnZUtleV07Ci0gICAgCi0gICAgc3dpdGNoIChlZmZl
Y3QudHlwZSgpKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7Ci0gICAgICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1swXSBZOmNv
bXBvbmVudHNbMV0gWjpjb21wb25lbnRzWzJdIFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07
Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6Y29tcG9uZW50c1szXSBZOmNvbXBvbmVudHNbNF0gWjpjb21wb25lbnRzWzVdIFc6MF0gZm9y
S2V5OkAiaW5wdXRHVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1
ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1s2XSBZOmNvbXBvbmVudHNbN10gWjpj
b21wb25lbnRzWzhdIFc6MF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgIFtjb2xv
ck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCAgICAgICAgICAg
ICBZOjAgICAgICAgICAgICAgWjowICAgICAgICAgICAgIFc6MV0gZm9yS2V5OkAiaW5wdXRBVmVj
dG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6MCAgICAgICAgICAgICBZOjAgICAgICAgICAgICAgWjowICAgICAgICAgICAgIFc6
MF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKLSAgICAgICAgW2NvbG9yTWF0cml4
RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMF0gIFk6dmFsdWVz
WzFdICBaOnZhbHVlc1syXSAgVzp2YWx1ZXNbM11dICBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsK
LSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRo
WDp2YWx1ZXNbNV0gIFk6dmFsdWVzWzZdICBaOnZhbHVlc1s3XSAgVzp2YWx1ZXNbOF1dICBmb3JL
ZXk6QCJpbnB1dEdWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVl
OltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMTBdIFk6dmFsdWVzWzExXSBaOnZhbHVlc1sx
Ml0gVzp2YWx1ZXNbMTNdXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9y
TWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMTVdIFk6
dmFsdWVzWzE2XSBaOnZhbHVlc1sxN10gVzp2YWx1ZXNbMThdXSBmb3JLZXk6QCJpbnB1dEFWZWN0
b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDp2YWx1ZXNbNF0gIFk6dmFsdWVzWzldICBaOnZhbHVlc1sxNF0gVzp2YWx1ZXNbMTld
XSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
ICAgIHJldHVybiBjb2xvck1hdHJpeEZpbHRlci5vdXRwdXRJbWFnZTsKLX0KLQotUmV0YWluUHRy
PENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZFQ29tcG9u
ZW50VHJhbnNmZXIoY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYgZWZmZWN0LCBWZWN0b3I8UmV0
YWluUHRyPENJSW1hZ2U+PiYgaW5wdXRJbWFnZXMpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGUgcmVzdCBvZiBGRUNvbXBvbmVudFRyYW5zZmVyIGZ1bmN0aW9ucwotICAgIEFTU0VSVChp
c051bGxPckxpbmVhckNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24oZWZmZWN0KSk7Ci0KLSAgICBh
dXRvIGlucHV0SW1hZ2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKLSAgICBhdXRvIGZpbHRlciA9IFtD
SUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JQb2x5bm9taWFsIl07Ci0gICAgCi0gICAg
W2ZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dEltYWdlS2V5
XTsKLSAgICAKLSAgICBhdXRvIHNldENvZWZmaWNpZW50cyA9IFsmXSAoTlNTdHJpbmcgKmtleSwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsKLSAgICAgICAgaWYg
KGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUikKLSAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmZ1bmN0aW9uLmlu
dGVyY2VwdCBZOmZ1bmN0aW9uLnNsb3BlIFo6MCBXOjBdIGZvcktleTprZXldOwotICAgIH07Ci0g
ICAgc2V0Q29lZmZpY2llbnRzKEAiaW5wdXRSZWRDb2VmZmljaWVudHMiLCBlZmZlY3QucmVkRnVu
Y3Rpb24oKSk7Ci0gICAgc2V0Q29lZmZpY2llbnRzKEAiaW5wdXRHcmVlbkNvZWZmaWNpZW50cyIs
IGVmZmVjdC5ncmVlbkZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0Qmx1
ZUNvZWZmaWNpZW50cyIsIGVmZmVjdC5ibHVlRnVuY3Rpb24oKSk7Ci0gICAgc2V0Q29lZmZpY2ll
bnRzKEAiaW5wdXRBbHBoYUNvZWZmaWNpZW50cyIsIGVmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOwot
ICAgIAotICAgIHJldHVybiBmaWx0ZXIub3V0cHV0SW1hZ2U7Ci19Ci0KLWJvb2wgRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKEZpbHRlckVmZmVj
dCYgZWZmZWN0KQotewotICAgIGlmICghc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoZWZmZWN0
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGZvciAoYXV0byBpbiA6IGVmZmVj
dC5pbnB1dEVmZmVjdHMoKSkgewotICAgICAgICBpZiAoIXN1cHBvcnRzQ29yZUltYWdlUmVuZGVy
aW5nKCppbikgfHwgIWNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKCppbikpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlciog
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Om91dHB1dCgpIGNvbnN0Ci17Ci0gICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyaW5nICIgPDwgdGhpcyA8PCAi
IHVzaW5nIENvcmVJbWFnZVxuIik7Ci0gICAgcmV0dXJuIG1fb3V0cHV0SW1hZ2VCdWZmZXIuZ2V0
KCk7Ci19Ci0gICAgCi12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJU
b0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSAgICBGbG9hdFNpemUg
Y2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobGFzdEVmZmVjdC5hYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0gICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IElPU3VyZmFj
ZUltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIGxhc3RFZmZlY3QuZmlsdGVyKCkuZmls
dGVyU2NhbGUoKSwgbGFzdEVmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpC
R1JBOCk7Ci0gICAgaWYgKCFtX291dHB1dEltYWdlQnVmZmVyKSB7Ci0gICAgICAgIGNsZWFyUmVz
dWx0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBbc2hhcmVkQ0lDb250ZXh0KCku
Z2V0KCkgcmVuZGVyOiBtX291dHB1dEltYWdlLmdldCgpIHRvSU9TdXJmYWNlOiBtX291dHB1dElt
YWdlQnVmZmVyLT5zdXJmYWNlKCkuc3VyZmFjZSgpIGJvdW5kczpkZXN0UmVjdChsYXN0RWZmZWN0
KSBjb2xvclNwYWNlOmxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLnBsYXRmb3JtQ29sb3JT
cGFjZSgpXTsKLX0KLSAgICAKLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZTo6ZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KSBjb25zdAotewotICAg
IEludFNpemUgZGVzdFNpemUgPSBsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
OwotICAgIGRlc3RTaXplLnNjYWxlKGxhc3RFZmZlY3QuZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgZGVzdFNp
emUpOwotICAgIHJldHVybiBkZXN0UmVjdDsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZTo6Y2xlYXJSZXN1bHQoKQotewotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBu
dWxscHRyOwotICAgIG1fb3V0cHV0SW1hZ2UgPSBudWxscHRyOwotfQotCi1GaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UoKQotICAgIDog
RmlsdGVyRWZmZWN0UmVuZGVyZXIoKQotewotfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zYWJlNTYxYjcwMWJjYTA1YjI0NGU1MjVlMTc4ZWMyNGY2ZGRkMWY4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJl
c3VsdENvcmVJbWFnZS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCAiRmlsdGVyUmVz
dWx0LmgiCisKK09CSkNfQ0xBU1MgQ0lJbWFnZTsKK09CSkNfQ0xBU1MgQ0lDb250ZXh0OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlclJlc3VsdENvcmVJbWFnZSA6IHB1Ymxp
YyBGaWx0ZXJSZXN1bHQgeworcHVibGljOgorICAgIHVzaW5nIEZpbHRlclJlc3VsdDo6RmlsdGVy
UmVzdWx0OworCisgICAgdm9pZCBzZXRJbWFnZShSZXRhaW5QdHI8Q0lJbWFnZT4mJik7CisgICAg
Citwcml2YXRlOgorICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMo
KSBvdmVycmlkZTsKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsKKwor
ICAgIFJldGFpblB0cjxDSUltYWdlPiBtX2ltYWdlOworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
bV9pbWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UpCisgICAg
c3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlclJlc3VsdCYgcmVzdWx0KSB7
IHJldHVybiByZXN1bHQucmVuZGVyaW5nTW9kZSgpID09IFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0Zp
bHRlclJlc3VsdENvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzI3OTJiMWFi
ZTk3MGQ4Y2RmODlhZjg1YTU4ZDU0ZDVhYjgwMGJiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1h
Z2UubW0KQEAgLTAsMCArMSw1NSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBh
cmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIkZpbHRlclJlc3VsdENvcmVJbWFnZS5oIgorCisjaWYgVVNFKENP
UkVfSU1BR0UpCisKKyNpbXBvcnQgPENvcmVJbWFnZS9DSUNvbnRleHQuaD4KKyNpbXBvcnQgPENv
cmVJbWFnZS9Db3JlSW1hZ2UuaD4KKyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRmlsdGVyUmVzdWx0Q29yZUltYWdlOjpzZXRJbWFn
ZShSZXRhaW5QdHI8Q0lJbWFnZT4mJiBpbWFnZSkKK3sKKyAgICBBU1NFUlQoaW1hZ2UpOworICAg
IG1faW1hZ2UgPSBXVEZNb3ZlKGltYWdlKTsKK30KKworUmVmUHRyPEltYWdlQnVmZmVyPiYgRmls
dGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKCkKK3sKKyAgICByZXR1cm4g
bV9pbWFnZUJ1ZmZlcjsKK30KKworSW1hZ2VCdWZmZXIqIEZpbHRlclJlc3VsdENvcmVJbWFnZTo6
aW1hZ2VCdWZmZXIoKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lZjhhODBjYmZkNjcyODM2ZGY4OTk1Y2YzOWQ0M2RhNWJkODU1MGI2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWlt
YWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0KQEAgLTAsMCArMSw1NiBAQAorLyoKKyogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNvdXJjZUdyYXBoaWMu
aCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorCisjaW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVmZmVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTb3VyY2VHcmFwaGljOjphcHBseUNv
cmVJbWFnZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIEZpbHRlclJlc3VsdCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VSVChzb3VyY2VJbWFn
ZSk7CisgICAgaWYgKCFzb3VyY2VJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
UmV0YWluUHRyPENJSW1hZ2U+IGltYWdlOworICAgIGlmIChpczxJT1N1cmZhY2VJbWFnZUJ1ZmZl
cj4oKnNvdXJjZUltYWdlKSkKKyAgICAgICAgaW1hZ2UgPSBbQ0lJbWFnZSBpbWFnZVdpdGhJT1N1
cmZhY2U6ZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkuc3VyZmFj
ZSgpLnN1cmZhY2UoKV07CisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IFtDSUltYWdlIGltYWdl
V2l0aENHSW1hZ2U6c291cmNlSW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9ybUltYWdl
KCkuZ2V0KCldOworCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGRvd25jYXN0PEZpbHRlclJlc3VsdENvcmVJbWFnZT4ocmVzdWx0KS5zZXRJbWFnZShX
VEZNb3ZlKGltYWdlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCmluZGV4IDI2MTEwY2Rm
YjBiYjZjZjQ5MDQ1ODM4Nzc4N2FjMTBmYTE3MWNmMTguLmRlNjYwNjhjZGQwYTljYjU3NGMwYWNi
YmM4YzhjNjBhNjc3NGZmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCkBAIC0xMDcs
MTUgKzEwNywxOCBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotdm9pZCBGRUJsZW5kOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoRmlsdGVyUmVzdWx0cyYgcmVzdWx0cywgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywg
SW1hZ2VCdWZmZXIqKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIGF1dG8gaW4gPSBz
dGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBp
ZiAoYXV0byByZXN1bHQgPSByZXN1bHRzLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyKCkuY3JlYXRlRmlsdGVy
UmVzdWx0KGFic29sdXRlUGFpbnRSZWN0KCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgYXV0byBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gcmVzdWx0LT5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CkBAIC0xMjksNyArMTMyLDcgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogCiAgICAgaWYgKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGggPj0gOCkgewog
ICAgICAgICBwbGF0Zm9ybUFwcGx5TkVPTihzb3VyY2VQaXhlbEFycmF5QS0+ZGF0YSgpLCBzb3Vy
Y2VQaXhlbEFycmF5Qi0+ZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpLCBzb3Vy
Y2VQaXhlbEFycmF5TGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gcmVz
dWx0LmxlYWtSZWYoKTsKICAgICB9CiAgICAgLy8gSWYgdGhlcmUgaXMganVzdCBvbmUgcGl4ZWwg
d2UgZXhwYW5kIGl0IHRvIHR3by4KICAgICBBU1NFUlQoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+
IDApOwpAQCAtMTQwLDYgKzE0Myw4IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICBzb3VyY2VCQW5kRGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
Pihzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpKVswXTsKICAgICBwbGF0Zm9ybUFwcGx5TkVPTihy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VBKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oc291cmNlQkFuZERlc3QpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VC
QW5kRGVzdCksIDgpOwogICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlv
blBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBdOworCisgICAgcmV0dXJu
IHJlc3VsdC5sZWFrUmVmKCk7CiB9CiAKIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04o
dW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJy
YXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGY5YmYxOTFlZTYzODlmMDFkOWI1YTIxMDI1M2NkMDBi
MDMwMTg1NDAuLjg0MjNjYmFkYTI1MTdhOTE2MTk4YzIxZmYzNTk4NDc5ZTJjMDBlYmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTIyNyw2ICsyMjcsMTQg
QEAgdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QKICAgICBhcHBlbmQ8RHJhd1BhdHRlcm4+KGltYWdl
LnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCit2
b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIoRmlsdGVyJiwgSW1hZ2VCdWZmZXIq
LCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYpCit7CisvLyAgICBpZiAobV9kZWxl
Z2F0ZSkKKy8vICAgICAgICBtX2RlbGVnYXRlLT5yZWNvcmRJbWFnZUJ1ZmZlclVzZSgqc291cmNl
SW1hZ2UpOworLy8gICAgcmVjb3JkRmlsdGVyVXNlKGZpbHRlcik7CisvLyAgICBhcHBlbmQ8RHJh
d0ZpbHRlckltYWdlQnVmZmVyPihmaWx0ZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZ2VvbWV0cnkpOwor
fQorCiB2b2lkIFJlY29yZGVyOjpzYXZlKCkKIHsKICAgICBhcHBlbmQ8U2F2ZT4oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IGE1YWQzNjZkNGRjZDk5ZDg0M2Uw
YmJhMDY5NWVkN2QyNDUzNzJiYmUuLjhhODgxYWZjY2NmYWI1NjE1YzhkOTg0ZDNlNTE3OGMyZWZj
ODc3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMTI4LDYg
KzEyOCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOwogICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOwogCisgICAgdm9pZCBkcmF3RmlsdGVySW1hZ2VCdWZmZXIoRmlsdGVyJiwgSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYpIGZpbmFs
OworCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpIGZpbmFsOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IEZsb2F0UG9pbnQmKSBmaW5hbDsKICAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCmlu
ZGV4IGNkZWFhNjVlNjcwNGNkNjdmYjBhN2FmZTlhZjE4ZmJiNjJjMmNlZDkuLjc3YmM2M2IyMzY1
Y2VkM2RkZTAyYmU4YTZmYTIyZWNjYjkyMWNlZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtNSw2ICs1LDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSw2NCArMjYs
NDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUJsZW5kLmgiCiAKLSNpbmNs
dWRlICJGRUJsZW5kTkVPTi5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRUJsZW5kOjpGRUJsZW5kKEZpbHRlciYgZmlsdGVyLCBCbGVuZE1vZGUgbW9kZSkKLSAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkJsZW5kKQotICAgICwgbV9tb2RlKG1vZGUpCitS
ZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEJsZW5kTW9kZSBtb2RlKQogeworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFQmxlbmQobW9kZSkpOwogfQogCi1SZWY8RkVCbGVuZD4gRkVCbGVu
ZDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBCbGVuZE1vZGUgbW9kZSkKK0ZFQmxlbmQ6OkZFQmxl
bmQoQmxlbmRNb2RlIG1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVCbGVuZCkKKyAg
ICAsIG1fbW9kZShtb2RlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQoZmls
dGVyLCBtb2RlKSk7CiB9CiAKIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBt
b2RlKQogewotICAgIGlmIChtX21vZGUgPT0gbW9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fbW9kZSA9IG1vZGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhj
aGFuZ2UobV9tb2RlLCBtb2RlKSAhPSBtX21vZGU7CiB9CiAKLSNpZiAhSEFWRShBUk1fTkVPTl9J
TlRSSU5TSUNTKQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVy
UmVzdWx0KiBGRUJsZW5kOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0
VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0
KDEpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0
SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRl
eHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFz
dCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0
byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1
cm4gcmVzdWx0OwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVj
dChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3Bl
cmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShv
dXRwdXQsIHsgaW4sIGluMiB9LCBudWxscHRyKTsKIH0KLSNlbmRpZgogCi1UZXh0U3RyZWFtJiBG
RUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUJsZW5kOjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKLSAgICBGaWx0ZXJFZmZl
Y3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8
PCAiIG1vZGU9XCIiIDw8IChtX21vZGUgPT0gQmxlbmRNb2RlOjpOb3JtYWwgPyAibm9ybWFsIiA6
IGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9t
b2RlKSkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNj
b3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
cmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCmluZGV4IDcw
ZTg0MDdiZjVjMjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLjEwMDAzMmY4ZTQ5OTIyMDJh
MjMyMzNhYmE5YzU1MzE3MjZhY2M1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yNCwzMiArMjUsMjcgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgRkVCbGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RkVCbGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgc3RhdGljIFJl
ZjxGRUJsZW5kPiBjcmVhdGUoQmxlbmRNb2RlKTsKIAogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUo
KSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIHNldEJsZW5kTW9kZShCbGVuZE1v
ZGUpOwogCiBwcml2YXRlOgorICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKKwogICAgIGNvbnN0IGNo
YXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVCbGVuZCI7IH0KIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5R2VuZXJpYyh1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hh
ciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25l
ZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOworICAg
IEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBS
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZFQmxlbmQoRmlsdGVy
JiwgQmxlbmRNb2RlKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgQmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggMzgwNjVjYjk2YzdiNGI0YjAzZmM2YjBlZWQ4NWFj
NGI2Yzk2OGE1NC4uYWE1N2E2ZWY5YWM2YWRhMzQwNTIwOTNjMjEzMDhiN2E3NjhhMTg4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywyOCArMjQs
MjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVk
ZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZpbHRlciYgZmlsdGVyLCBDb2xvck1h
dHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKLSAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OkNvbG9yTWF0cml4KQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBt
X3ZhbHVlcyhXVEZNb3ZlKHZhbHVlcykpCitSZWY8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJp
eDo6Y3JlYXRlKENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQog
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2
YWx1ZXMpKSk7CiB9CiAKLVJlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUo
RmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFs
dWVzKQorRkVDb2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUgdHlwZSwg
VmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbG9y
TWF0cml4KQorICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBtX3ZhbHVlcyhXVEZNb3ZlKHZhbHVl
cykpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb2xvck1hdHJpeChmaWx0ZXIsIHR5
cGUsIFdURk1vdmUodmFsdWVzKSkpOwogfQogCiBib29sIEZFQ29sb3JNYXRyaXg6OnNldFR5cGUo
Q29sb3JNYXRyaXhUeXBlIHR5cGUpCkBAIC02MywyNTggKzU2LDQzIEBAIGJvb2wgRkVDb2xvck1h
dHJpeDo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4gJnZhbHVlcykKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotaW5saW5lIHZvaWQgbWF0cml4KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwg
ZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQot
ewotICAgIGZsb2F0IHIgPSByZWQ7Ci0gICAgZmxvYXQgZyA9IGdyZWVuOwotICAgIGZsb2F0IGIg
PSBibHVlOwotICAgIGZsb2F0IGEgPSBhbHBoYTsKLQotICAgIHJlZCAgICAgPSB2YWx1ZXNbIDBd
ICogciArIHZhbHVlc1sgMV0gKiBnICsgdmFsdWVzWyAyXSAqIGIgKyB2YWx1ZXNbIDNdICogYSAr
IHZhbHVlc1sgNF0gKiAyNTU7Ci0gICAgZ3JlZW4gICA9IHZhbHVlc1sgNV0gKiByICsgdmFsdWVz
WyA2XSAqIGcgKyB2YWx1ZXMgWzddICogYiArIHZhbHVlc1sgOF0gKiBhICsgdmFsdWVzWyA5XSAq
IDI1NTsKLSAgICBibHVlICAgID0gdmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFdICogZyArIHZh
bHVlc1sxMl0gKiBiICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1OwotICAgIGFs
cGhhICAgPSB2YWx1ZXNbMTVdICogciArIHZhbHVlc1sxNl0gKiBnICsgdmFsdWVzWzE3XSAqIGIg
KyB2YWx1ZXNbMThdICogYSArIHZhbHVlc1sxOV0gKiAyNTU7Ci19Ci0KLWlubGluZSB2b2lkIHNh
dHVyYXRlQW5kSHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUs
IGNvbnN0IGZsb2F0KiBjb21wb25lbnRzKQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVT
YXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQogewotICAg
IGZsb2F0IHIgPSByZWQ7Ci0gICAgZmxvYXQgZyA9IGdyZWVuOwotICAgIGZsb2F0IGIgPSBibHVl
OwotCi0gICAgcmVkICAgICA9IHIgKiBjb21wb25lbnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0g
KyBiICogY29tcG9uZW50c1syXTsKLSAgICBncmVlbiAgID0gciAqIGNvbXBvbmVudHNbM10gKyBn
ICogY29tcG9uZW50c1s0XSArIGIgKiBjb21wb25lbnRzWzVdOwotICAgIGJsdWUgICAgPSByICog
Y29tcG9uZW50c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07Ci19
Ci0KLS8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9u
IGluIENvbG9yTHVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwg
ZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQotewotICAgIGFscGhhID0g
MC4yMTI1ICogcmVkICsgMC43MTU0ICogZ3JlZW4gKyAwLjA3MjEgKiBibHVlOwotICAgIHJlZCA9
IDA7Ci0gICAgZ3JlZW4gPSAwOwotICAgIGJsdWUgPSAwOwotfQotCi0jaWYgVVNFKEFDQ0VMRVJB
VEUpCi10ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLWJvb2wgZWZmZWN0QXBw
bHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9y
PGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21wb25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUp
Ci17Ci0gICAgQVNTRVJUKHBpeGVsQXJyYXkubGVuZ3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkg
KiA0KTsKLSAgICAKLSAgICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYKSB7Ci0gICAgICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEg
NHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xv
ck1hdHJpeCA1eDQgbWF0cml4Ci0gICAgICAgIC8vIGlzIG5vdCB6ZXJvLCBmYWxsIGJhY2sgdG8g
bm9uLXZJbWFnZSBjb2RlLgotICAgICAgICBpZiAodmFsdWVzWzRdICE9IDAgfHwgdmFsdWVzWzld
ICE9IDAgfHwgdmFsdWVzWzE0XSAhPSAwIHx8IHZhbHVlc1sxOV0gIT0gMCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7
Ci0gICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOwotCi0gICAgdkltYWdlX0J1
ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwotICAgIHNyYy5o
ZWlnaHQgPSBidWZmZXJTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNp
emUud2lkdGgoKSAqIDQ7Ci0gICAgc3JjLmRhdGEgPSBkYXRhOwotICAgIAotICAgIHZJbWFnZV9C
dWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwotICAgIGRl
c3QuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gYnVm
ZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICBkZXN0LmRhdGEgPSBkYXRhOwotCi0gICAgc3dpdGNo
IChmaWx0ZXJUeXBlKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7Ci0g
ICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlz
b3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVd
ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKLQotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
MTJdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KHZhbHVlc1sxN10gKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikp
LAotICAgICAgICB9OwotICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3Jj
LCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFn
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X1NBVFVSQVRFOgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewotICAg
ICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNvcikp
LAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNl0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICAwLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBkaXZp
c29yKSksCi0gICAgICAgICAgICAwLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYoY29tcG9uZW50c1syXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29yKSks
Ci0gICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICBkaXZpc29yLAotICAgICAgICB9OwotICAgICAgICB2SW1h
Z2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBu
dWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7Ci0gICAgICAg
IGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZigwLjIxMjUgKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZigwLjcxNTQgKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAw
LAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
ZigwLjA3MjEgKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgIH07Ci0gICAgICAgIHZJbWFn
ZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51
bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBjb21wb25lbnRzWzBdID0gKDAuMjEz
ICsgMC43ODcgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICog
dmFsdWUpOworICAgIGNvbXBvbmVudHNbMl0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKKyAg
ICBjb21wb25lbnRzWzNdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50
c1s0XSA9ICgwLjcxNSArIDAuMjg1ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbNV0gPSAoMC4w
NzIgLSAwLjA3MiAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMg
KiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s3XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwor
ICAgIGNvbXBvbmVudHNbOF0gPSAoMC4wNzIgKyAwLjkyOCAqIHZhbHVlKTsKIH0KLSNlbmRpZgog
Ci10ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLXZvaWQgZWZmZWN0VHlwZShV
aW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVz
LCBJbnRTaXplIGJ1ZmZlclNpemUpCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJv
dGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQogewotICAgIGZs
b2F0IGNvbXBvbmVudHNbOV07Ci0KLSAgICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklY
X1RZUEVfU0FUVVJBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRl
Q29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgIGVsc2UgaWYgKGZpbHRlclR5
cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKLSAgICAgICAgRkVDb2xvck1hdHJp
eDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwot
Ci0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7Ci0K
LSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAoZWZmZWN0QXBwbHlBY2NlbGVyYXRlZDxmaWx0
ZXJUeXBlPihwaXhlbEFycmF5LCB2YWx1ZXMsIGNvbXBvbmVudHMsIGJ1ZmZlclNpemUpKQotICAg
ICAgICByZXR1cm47Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShidWZmZXJTaXplKTsKLSNlbmRp
ZgotCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfTUFUUklYOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBp
eGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7
Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbWF0cml4KHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhLCB2YWx1ZXMpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zm
c2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zm
c2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZz
ZXQgKyAzLCBhbHBoYSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9I
VUVST1RBVEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4
ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsK
LSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQp
OwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zm
c2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0
ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7Ci0gICAgICAgICAgICBzYXR1cmF0ZUFuZEh1ZVJvdGF0
ZShyZWQsIGdyZWVuLCBibHVlLCBjb21wb25lbnRzKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXku
c2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4
ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFy
cmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVk
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBn
cmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAg
IGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAg
ICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAz
KTsKLSAgICAgICAgICAgIGx1bWluYW5jZShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICB9CisgICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlG
bG9hdCAvIDE4MCk7CisgICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4
MCk7CisgICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUg
KiAwLjIxMzsKKyAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNp
bkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcy
ICsgc2luSHVlICogMC45Mjg7CisgICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICog
MC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKKyAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NI
dWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOworICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAt
IGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7CisgICAgY29tcG9uZW50c1s2XSA9IDAu
MjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKKyAgICBjb21wb25lbnRzWzdd
ID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVu
dHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7CiB9CiAKLXZv
aWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCog
RkVDb2xvck1hdHJpeDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZl
Y3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIGlmIChpbkJ1ZmZlcikKLSAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5k
cmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAg
IGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9y
bWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIHJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KElu
dFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKLSAg
ICBpZiAoIXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBwaXhlbEFy
cmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25z
ID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKLQotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9y
bWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5z
aW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFOiAKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBp
eGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGVmZmVjdFR5
cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhl
bEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJ
WF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURp
bWVuc2lvbnMpOwotICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0
aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBp
eGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0
Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCkBA
IC0zMzksMTAgKzExNyw5IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1UZXh0U3RyZWFtJiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0
U3RyZWFtJiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwg
IltmZUNvbG9yTWF0cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHR5cGU9XCIiIDw8IG1fdHlwZSA8
PCAiXCIiOwogICAgIGlmICghbV92YWx1ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIHRzIDw8ICIg
dmFsdWVzPVwiIjsKQEAgLTM1Nyw5ICsxMzQsNiBAQCBUZXh0U3RyZWFtJiBGRUNvbG9yTWF0cml4
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvbgog
ICAgICAgICB0cyA8PCAiXCIiOwogICAgIH0KICAgICB0cyA8PCAiXVxuIjsKLSAgICAKLSAgICBU
ZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3Qo
MCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1
cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKaW5kZXggMjllNDFhOGFlZDFlNGYwYjUzOTcwM2Fj
NGRiNTUyNGVmYTRjMTIzZi4uZjYxMjEzZmU2MGZlMGI0Y2MzZDJjZGVmOWI2NDJmNDZkYjRkMTI4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTIyLDggKzIzLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM3LDcgQEAgZW51bSBD
b2xvck1hdHJpeFR5cGUgewogCiBjbGFzcyBGRUNvbG9yTWF0cml4IDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoRmls
dGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIHN0YXRpYyBSZWY8
RkVDb2xvck1hdHJpeD4gY3JlYXRlKENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsK
IAogICAgIENvbG9yTWF0cml4VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAg
ICAgYm9vbCBzZXRUeXBlKENvbG9yTWF0cml4VHlwZSk7CkBAIC00Niw1NCArNDUsMjIgQEAgcHVi
bGljOgogICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzOyB9CiAgICAgYm9vbCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCi0g
ICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Cisg
ICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25l
bnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlSHVlUm90YXRlQ29t
cG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpOwogCiBwcml2YXRlOgotICAg
IEZFQ29sb3JNYXRyaXgoRmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYp
OworICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwog
CiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNv
bG9yTWF0cml4IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZl
Y3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMs
IEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVy
UmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIG1f
dHlwZTsKICAgICBWZWN0b3I8ZmxvYXQ+IG1fdmFsdWVzOwogfTsKIAotaW5saW5lIHZvaWQgRkVD
b2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRz
LCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2
YWx1ZSk7Ci0gICAgY29tcG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAg
IGNvbXBvbmVudHNbMl0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRz
WzNdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s0XSA9ICgwLjcx
NSArIDAuMjg1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAq
IHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0g
ICAgY29tcG9uZW50c1s3XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVu
dHNbOF0gPSAoMC4wNzIgKyAwLjkyOCAqIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xv
ck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywg
ZmxvYXQgdmFsdWUpCi17Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAv
IDE4MCk7Ci0gICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0g
ICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIx
MzsKLSAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAq
IDAuNzE1OwotICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2lu
SHVlICogMC45Mjg7Ci0gICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMg
KyBzaW5IdWUgKiAwLjE0MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAw
LjI4NSArIHNpbkh1ZSAqIDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1
ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0g
Y29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25lbnRzWzddID0gMC43
MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbOF0g
PSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19Ci0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OkZFQ29sb3JNYXRyaXgpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZp
bHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBl
KCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApp
bmRleCA4NDdlYTU4ZjVmOWIwMzg2NmQ5ZWFjNTdmMTBjY2Y1NzQwMmY5ZTYzLi5iZTkzMjk2M2Fj
MDRjMTc5MmIyMzY1MWFkNGJiNDM4NjZmOWVmMTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
NCwxOCArMjUsMTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBvbmVu
dFRyYW5zZmVyLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbXBvbmVudFRyYW5z
ZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKLSAgICBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVu
Y3Rpb24pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb25lbnRUcmFuc2Zl
cikKK1JlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUo
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgYWxwaGFGdW5jdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvbmVu
dFRyYW5zZmVyKHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFscGhh
RnVuY3Rpb24pKTsKK30KKworRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zl
cihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBhbHBoYUZ1bmN0aW9uKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29tcG9uZW50
VHJhbnNmZXIpCiAgICAgLCBtX3JlZEZ1bmN0aW9uKHJlZEZ1bmN0aW9uKQogICAgICwgbV9ncmVl
bkZ1bmN0aW9uKGdyZWVuRnVuY3Rpb24pCiAgICAgLCBtX2JsdWVGdW5jdGlvbihibHVlRnVuY3Rp
b24pCkBAIC00MywxMTkgKzQzLDE1IEBAIEZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50
VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyCiB7CiB9CiAK
LVJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9u
LAotICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUNvbXBvbmVudFRyYW5zZmVyKGZpbHRlciwgcmVkRnVuY3Rpb24sIGdyZWVuRnVu
Y3Rpb24sIGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOwotfQotCi12b2lkIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpCi17Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQorRmlsdGVyUmVzdWx0KiBGRUNv
bXBvbmVudFRyYW5zZmVyOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0
VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAgICB1
bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAgICAg
cmV0dXJuOyAgICAgICAgICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAgICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAt
IDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRvdWJs
ZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKLSAgICAgICAg
ZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkp
OwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAg
ICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19Cisg
ICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFz
dCgpOwogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExv
b2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5z
ZmVyRnVuY3Rpb24pCi17Ci0gICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0
cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOwotICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVl
cy5zaXplKCk7Ci0gICAgaWYgKG4gPCAxKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBr
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChpICogbikgLyAyNTUuMCk7Ci0gICAgICAgIGsgPSBz
dGQ6Om1pbihrLCBuIC0gMSk7Ci0gICAgICAgIGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVl
c1trXTsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7
Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQot
fQorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29t
cHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNm
ZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsK
LSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAg
ICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12
b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2
YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24p
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBS
Q1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28g
cHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJh
bnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBwb3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRy
YW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6
Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKLSAgICBM
b29rdXBUYWJsZSBncmVlblRhYmxlOwotICAgIExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKLSAgICBM
b29rdXBUYWJsZSBhbHBoYVRhYmxlOwotICAgIGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUs
IGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7Ci0KLSAgICBJbnRSZWN0IGRyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBp
eGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2ln
bmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5s
ZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0
aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgZGF0
YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRh
dGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsK
LSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZz
ZXQgKyAyXV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0
YVtwaXhlbE9mZnNldCArIDNdXTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxl
JiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFU
YWJsZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVkVGFibGUuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIHJlZFRhYmxlW2ldID0gZ3JlZW5UYWJsZVtpXSA9IGJsdWVUYWJsZVtpXSA9
IGFscGhhVGFibGVbaV0gPSBpOwotCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKiko
TG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJh
bnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUs
ICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlk
ZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAg
ICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9U
QUJMRQotICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5T
RkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAg
ICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9OwotCi0gICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1
bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVu
Y3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0
aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rp
b24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLQotICAgIGNhbGxFZmZl
Y3RbbV9yZWRGdW5jdGlvbi50eXBlXShyZWRUYWJsZSwgbV9yZWRGdW5jdGlvbik7Ci0gICAgY2Fs
bEVmZmVjdFttX2dyZWVuRnVuY3Rpb24udHlwZV0oZ3JlZW5UYWJsZSwgbV9ncmVlbkZ1bmN0aW9u
KTsKLSAgICBjYWxsRWZmZWN0W21fYmx1ZUZ1bmN0aW9uLnR5cGVdKGJsdWVUYWJsZSwgbV9ibHVl
RnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9hbHBoYUZ1bmN0aW9uLnR5cGVdKGFscGhhVGFi
bGUsIG1fYWxwaGFGdW5jdGlvbik7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7
IGluIH0sIG51bGxwdHIpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgQ29tcG9uZW50VHJhbnNmZXJUeXBlIHR5cGUpCkBAIC0yMDksMTAgKzEwNSw5
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3Ry
ZWFtJiBGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3Ry
ZWFtJiBGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQg
PDwgIltmZUNvbXBvbmVudFRyYW5zZmVyIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiXG4iOwogICAgIHsK
ICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMsIDIpOwpAQCAt
MjIxLDkgKzExNiw2IEBAIFRleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VuCiAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAie2JsdWU6ICIgPDwgbV9ibHVlRnVuY3Rpb24gPDwgIn1cbiI7CiAgICAgICAgIHRz
IDw8IGluZGVudCA8PCAie2FscGhhOiAiIDw8IG1fYWxwaGFGdW5jdGlvbiA8PCAifV1cbiI7CiAg
ICAgfQotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAg
IGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlv
bik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCmluZGV4
IDJiNTg2ZGVmN2ZiNDJhMzdiMmUxMjNlZGE4NzExOWM0ZWIzNDhhNTEuLjc2MTA2OWRiODllNDM3
NzRhODc2ODM2OWU5NTU2ZTY3MTYxNDRhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5o
CkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
Myw5ICsyNCw2IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkZp
bHRlci5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBlbnVtIENvbXBvbmVudFRyYW5zZmVyVHlwZSB7CkBAIC01Myw4ICs1MSw3IEBAIHN0cnVjdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHsKIAogY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlciA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb21wb25l
bnRUcmFuc2Zlcj4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYWxwaGFGdW5jKTsKKyAgICBzdGF0aWMgUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IGNy
ZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKTsKIAogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
cmVkRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZEZ1bmN0aW9uOyB9CiAgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBncmVlbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ncmVl
bkZ1bmN0aW9uOyB9CkBAIC02MiwyNCArNTksMTUgQEAgcHVibGljOgogICAgIENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24gYWxwaGFGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFGdW5j
dGlvbjsgfQogCiBwcml2YXRlOgotICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7Ci0KLSAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvbmVudFRyYW5zZmVyIjsgfQorICAgIEZFQ29t
cG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rp
b24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbik7CiAKLSAgICB1c2luZyBMb29rdXBUYWJs
ZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CiAKLSAgICBz
dGF0aWMgdm9pZCBjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlVGFidWxhclRh
YmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAg
IHN0YXRpYyB2b2lkIGNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVMaW5lYXJU
YWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAg
ICBzdGF0aWMgdm9pZCBjb21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVy
UmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMo
TG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFi
bGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpOworICAgIEZpbHRlclJlc3Vs
dCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25z
dCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX3JlZEZ1bmN0aW9uOwogICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gbV9ncmVlbkZ1bmN0aW9uOwpAQCAtODgsNyArNzYsMyBAQCBw
cml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXIpCi0gICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBl
ZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpU
eXBlOjpDb21wb25lbnRUcmFuc2ZlcjsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmNwcAppbmRleCA4YjU5ZTY2ZGU5ZmU4ZDYzOTE2Y2JlNWNlNmRkNDAzOGZhNGNi
MmE4Li5hYzIyY2ZjZGM0NWJlMmExNzIyZDA0MmMyNDZjYThhM2QxMjFjNDk1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0
LDE3ICsyNSwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29tcG9zaXRl
LmgiCiAKLSNpbmNsdWRlICJGRUNvbXBvc2l0ZUFyaXRobWV0aWNORU9OLmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91
dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1GRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQg
azMsIGZsb2F0IGs0KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9zaXRl
KQotICAgICwgbV90eXBlKHR5cGUpCitSZWY8RkVDb21wb3NpdGU+IEZFQ29tcG9zaXRlOjpjcmVh
dGUoRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVD
b21wb3NpdGUoY29tcG9zaXRlT3BlcmF0b3IsIGsxLCBrMiwgazMsIGs0KSk7Cit9CisKK0ZFQ29t
cG9zaXRlOjpGRUNvbXBvc2l0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKKyAgICA6IEZpbHRlckVm
ZmVjdChUeXBlOjpGRUNvbXBvc2l0ZSkKKyAgICAsIG1fY29tcG9zaXRlT3BlcmF0b3IoY29tcG9z
aXRlT3BlcmF0b3IpCiAgICAgLCBtX2sxKGsxKQogICAgICwgbV9rMihrMikKICAgICAsIG1fazMo
azMpCkBAIC00MiwyNjQgKzQ2LDYyIEBAIEZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXIm
IGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvCiB7CiB9CiAK
LVJlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29u
c3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9h
dCBrMywgZmxvYXQgazQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb3NpdGUo
ZmlsdGVyLCB0eXBlLCBrMSwgazIsIGszLCBrNCkpOwotfQotCi1ib29sIEZFQ29tcG9zaXRlOjpz
ZXRPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB0eXBlKQorYm9vbCBGRUNvbXBvc2l0
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0b3IoRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVy
YXRvcikKIHsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fY29tcG9zaXRlT3BlcmF0b3IsIGNvbXBvc2l0ZU9wZXJhdG9yKSAhPSBtX2NvbXBv
c2l0ZU9wZXJhdG9yOwogfQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMShmbG9hdCBrMSkKIHsK
LSAgICBpZiAobV9rMSA9PSBrMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazEgPSBr
MTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2sxLCBrMSkg
IT0gbV9rMTsKIH0KIAogYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzIoZmxvYXQgazIpCiB7Ci0gICAg
aWYgKG1fazIgPT0gazIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2syID0gazI7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMiwgazIpICE9IG1f
azI7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEszKGZsb2F0IGszKQogewotICAgIGlmICht
X2szID09IGszKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMyA9IGszOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazMsIGszKSAhPSBtX2szOwog
fQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBrNCkKIHsKLSAgICBpZiAobV9rNCA9
PSBrNCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazQgPSBrNDsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2s0LCBrNCkgIT0gbV9rNDsKIH0KIAot
dm9pZCBGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkKK0Zsb2F0UmVj
dCBGRUNvbXBvc2l0ZTo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBpZiAobV90
eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci19CisgICAgLy8gRm9yIElu
IGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YK
KyAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50
IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KKyAgICBpZiAobV9jb21wb3NpdGVPcGVy
YXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiB8fCBtX2NvbXBvc2l0ZU9wZXJhdG9yID09
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1ApCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5tYXhE
cmF3aW5nUmVjdChpbnB1dHMsIGlucHV0c1sxXS0+ZHJhd2luZ1JlY3QoKSk7CiAgICAgCi1zdGF0
aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUoaW50IGMpCi17Ci0gICAgdW5zaWduZWQgY2hhciBi
dWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKLSAgICB1
bnNpZ25lZCB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKLSAgICByZXR1cm4gYnVmZlsh
ISh1YyAmIH4weGZmKSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKLX0KLQotdGVtcGxhdGUgPGlu
dCBiMSwgaW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxz
KHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBw
aXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkK
LXsKLSAgICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEp
Ci0gICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBz
Y2FsZWRLNCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+
PSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNp
Z25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAq
IGkxICsgazMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNj
YWxlZEsxICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9
IHNjYWxlZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOwot
ICAgICAgICArK3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLS8v
IGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2Yg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGlu
ZwotLy8gaXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBv
cHRpbWl6YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgotdGVtcGxhdGUgPGludCBi
MSwgaW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5j
bGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24s
IGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCkKLXsKLSAgICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBp
ZiAoYjEpCi0gICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAg
ICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxl
bmd0aCA+PSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAg
ICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQg
PSBrMiAqIGkxICsgazMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0
ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVz
dWx0ICs9IHNjYWxlZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IHJlc3VsdDsKLSAgICAg
ICAgKytzb3VyY2U7Ci0gICAgICAgICsrZGVzdGluYXRpb247Ci0gICAgfQotfQotCi0jaWYgIUhB
VkUoQVJNX05FT05fSU5UUklOU0lDUykKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29m
dHdhcmUodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwg
aW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KQotewotICAgIGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6
Om1heCgwLjBmLCBrMikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBrNDsKLSAgICBmbG9hdCBsb3dl
ckxpbWl0ID0gc3RkOjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjpt
aW4oMC4wZiwgazMpICsgazQ7Ci0gICAgaWYgKChrNCA+PSAwLjBmICYmIGs0IDw9IDEuMGYpICYm
ICh1cHBlckxpbWl0ID49IDAuMGYgJiYgdXBwZXJMaW1pdCA8PSAxLjBmKSAmJiAobG93ZXJMaW1p
dCA+PSAwLjBmICYmIGxvd2VyTGltaXQgPD0gMS4wZikpIHsKLSAgICAgICAgaWYgKGs0KSB7Ci0g
ICAgICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHNVbmNsYW1wZWQ8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwg
azEsIGsyLCBrMywgazQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBp
eGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1Vu
Y2xhbXBlZDwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFy
aXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoazQpIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJh
eUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21w
dXRlQXJpdGhtZXRpY1BpeGVsczwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5
TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGsxKQot
ICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMD4oc291cmNlLCBkZXN0aW5h
dGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAwPihzb3VyY2UsIGRlc3RpbmF0
aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfQotfQotI2VuZGlm
Ci0KLWlubGluZSB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewotICAgIGlu
dCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNf
Y2FzdDxpbnQ+KGRlc3RpbmF0aW9uLmxlbmd0aCgpKSk7Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBo
ZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseS4KLSNpZiBIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCi0gICAgQVNTRVJUKCEobGVuZ3RoICYgMHgzKSk7Ci0gICAgcGxhdGZv
cm1Bcml0aG1ldGljTmVvbihzb3VyY2UuZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0
aCwgazEsIGsyLCBrMywgazQpOwotI2Vsc2UKLSAgICBhcml0aG1ldGljU29mdHdhcmUoc291cmNl
LmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSNl
bmRpZgotfQotCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X0lOOgotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgLy8gRm9y
IEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQg
b2YKLSAgICAgICAgLy8gdGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNvbHV0
ZSBwYWludCByZWN0IG9mIHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCi0gICAgICAgIHNldEFic29s
dXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDEpLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAg
ICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6Ci0gICAgICAgIC8vIEFyaXRobWV0aWMgbWF5
IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBjYW4n
dAotICAgICAgICAvLyBvcHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCi0gICAgICAgIHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBv
ZiBib3RoIGlucHV0IGVmZmVjdHMuCi0gICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBBcml0aG1l
dGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28g
d2UgY2FuJ3QKKyAgICAvLyBvcHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCisgICAgaWYg
KG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykK
KyAgICAgICAgcmV0dXJuIGdlb21ldHJ5Lm1heFByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpOwor
ICAgIAorICAgIHJldHVybiBGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0KGlucHV0cywgZ2VvbWV0
cnkpOwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmls
dGVyUmVzdWx0KiBGRUNvbXBvc2l0ZTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRl
clJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsKLSAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1
dEVmZmVjdCgxKTsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOwogCi0gICAgaWYgKG1f
dHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgICAgIEludFJlY3QgZWZmZWN0QURy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11
bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwotICAgICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgaW4yLT5j
b3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdEJEcmF3
aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLQotICAgICAgICBwbGF0Zm9ybUFyaXRo
bWV0aWNTb2Z0d2FyZSgqc291cmNlUGl4ZWxBcnJheSwgZGVzdGluYXRpb25QaXhlbEFycmF5LCBt
X2sxLCBtX2syLCBtX2szLCBtX2s0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAg
aWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0KLSAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghaW1h
Z2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW4g
PSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAg
ICAKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0p
KQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBj
YXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4y
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09Q
RVJBVE9SX0lOOiB7Ci0gICAgICAgIC8vIEFwcGxpZXMgb25seSB0byB0aGUgaW50ZXJzZWN0ZWQg
cmVnaW9uLgotICAgICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpOwotICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoYWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIEludFJlY3QgYWRqdXN0ZWREZXN0aW5hdGlvblJl
Y3QgPSBkZXN0aW5hdGlvblJlY3QgLSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0g
ICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBk
ZXN0aW5hdGlvblJlY3QgLSBpbjItPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgRmxvYXRS
ZWN0KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZTJSZWN0KSk7Ci0g
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgRmxvYXRS
ZWN0KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZVJlY3QpLCB7IENv
bXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyMi0+bG9naWNh
bFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VC
dWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgotICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdl
QnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAg
IHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiwgaW4yIH0sIG51bGxwdHIpOwogfQog
Ci1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGRUNvbXBvc2l0ZU9wZXJhdG9yJiBjb21wb3NpdGVPcGVy
YXRvcikKIHsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBzd2l0Y2ggKGNvbXBvc2l0ZU9wZXJh
dG9yKSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICB0
cyA8PCAiVU5LTk9XTiI7CiAgICAgICAgIGJyZWFrOwpAQCAtMzI4LDE4ICsxMzAsMTMgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0
ZU9wZXJhdGlvblR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZF
Q29tcG9zaXRlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNl
bnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbXBvc2l0
ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVDb21wb3NpdGUiOwotICAg
IEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotICAgIHRzIDw8ICIgb3BlcmF0aW9uPVwiIiA8PCBtX3R5cGUgPDwgIlwiIjsKLSAgICBpZiAo
bV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgdHMgPDwgIiBv
cGVyYXRpb249XCIiIDw8IG1fY29tcG9zaXRlT3BlcmF0b3IgPDwgIlwiIjsKKyAgICBpZiAobV9j
b21wb3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQogICAg
ICAgICB0cyA8PCAiIGsxPVwiIiA8PCBtX2sxIDw8ICJcIiBrMj1cIiIgPDwgbV9rMiA8PCAiXCIg
azM9XCIiIDw8IG1fazMgPDwgIlwiIGs0PVwiIiA8PCBtX2s0IDw8ICJcIiI7CiAgICAgdHMgPDwg
Il1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0g
ICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0
aW9uKTsKLSAgICBpbnB1dEVmZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IDdkMDhl
MWY3MTA3YjRiOTY4YzU4ZTNhMzdjMzJhZTJmNzZhZWEwYzMuLjk5ZjI5MDVkY2ZiYzA0YzhmYzFl
YTU4ZjFjMGE1ZjFiODllYjQzYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDEyICsyNCw5IEBACiAKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSB7CitlbnVtIEZFQ29tcG9zaXRlT3BlcmF0b3IgewogICAgIEZFQ09N
UE9TSVRFX09QRVJBVE9SX1VOS05PV04gICAgPSAwLCAKICAgICBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9PVkVSICAgICAgID0gMSwKICAgICBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiAgICAgICAgID0g
MiwKQEAgLTQxLDEwICszOSwxMCBAQCBlbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgewogCiBj
bGFzcyBGRUNvbXBvc2l0ZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVy
YXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOworICAgIHN0YXRpYyBSZWY8
RkVDb21wb3NpdGU+IGNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQg
azIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKLSAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIGJvb2wgc2V0T3BlcmF0aW9u
KENvbXBvc2l0ZU9wZXJhdGlvblR5cGUpOworICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU9wZXJhdG9yOyB9CisgICAg
Ym9vbCBzZXRDb21wb3NpdGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yKTsKIAogICAgIGZs
b2F0IGsxKCkgY29uc3QgeyByZXR1cm4gbV9rMTsgfQogICAgIGJvb2wgc2V0SzEoZmxvYXQpOwpA
QCAtNTgsMzAgKzU2LDIwIEBAIHB1YmxpYzoKICAgICBmbG9hdCBrNCgpIGNvbnN0IHsgcmV0dXJu
IG1fazQ7IH0KICAgICBib29sIHNldEs0KGZsb2F0KTsKIAotcHJvdGVjdGVkOgotICAgIGJvb2wg
cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBvdmVycmlkZSB7IHJldHVybiBtX3R5
cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQotCiBwcml2YXRlOgotICAg
IEZFQ29tcG9zaXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmLCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CisgICAgRkVDb21wb3NpdGUoRkVDb21wb3NpdGVPcGVy
YXRvciwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwogCiAgICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvc2l0ZSI7
IH0KIAotICAgIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1
bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBm
bG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisgICAgYm9vbCBhcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0jaWYgSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQotICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLSAgICBzdGF0
aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNOZW9uKGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgs
IGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAgICBXVEY6OlRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVw
cmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHBs
YXRmb3JtQXJpdGhtZXRpY05lb24oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBm
bG9hdCBrMywgZmxvYXQgazQpOwotI2VuZGlmCi0KLSAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBl
IG1fdHlwZTsKKyAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIG1fY29tcG9zaXRlT3BlcmF0b3I7CiAg
ICAgZmxvYXQgbV9rMTsKICAgICBmbG9hdCBtX2syOwogICAgIGZsb2F0IG1fazM7CkBAIC04OSw0
ICs3NywzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2
ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguY3BwCmluZGV4IDc1YjJlN2M2ZWExM2MyYzFjMmY4ZjY1ZDNkYjRlZDVj
YzNhZmRhOGYuLjFiZGRlOTUwZDE4M2ZmY2M4NWQ5MDNjOTcwOTkzZTVmYjZiOWI0MDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2
ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFpv
bHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTI0LDE4ICsyNSwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29udm9s
dmVNYXRyaXguaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1
dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1GRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmlsdGVy
LCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJp
YXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwK
LSAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxw
aGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OkNvbnZvbHZlTWF0cml4KQorUmVmPEZFQ29udm9sdmVNYXRyaXg+IEZF
Q29udm9sdmVNYXRyaXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBk
aXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wg
cHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQoreworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoa2VybmVsU2l6ZSwgZGl2aXNv
ciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwgcHJlc2Vy
dmVBbHBoYSwga2VybmVsTWF0cml4KSk7Cit9CisKK0ZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9s
dmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2Rl
LCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEs
IGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICA6IEZpbHRlckVmZmVjdChU
eXBlOjpGRUNvbnZvbHZlTWF0cml4KQogICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAg
ICAgLCBtX2Rpdmlzb3IoZGl2aXNvcikKICAgICAsIG1fYmlhcyhiaWFzKQpAQCAtNDksMTQgKzUx
LDYgQEAgRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwg
Y29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAgICBBU1NFUlQobV9rZXJuZWxTaXplLmhlaWdo
dCgpID4gMCk7CiB9CiAKLVJlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4Ojpj
cmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxv
YXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRn
ZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5n
dGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoZmlsdGVyLCBr
ZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxV
bml0TGVuZ3RoLAotICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKLX0KLQog
dm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmIGtlcm5l
bFNpemUpCiB7CiAgICAgQVNTRVJUKGtlcm5lbFNpemUud2lkdGgoKSA+IDApOwpAQCAtMTIwLDMx
OCArMTE0LDIwIEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29s
IHByZXNlcnZlQWxwaGEpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgQ29udm9sdmVNYXRyaXggaW1wbGVtZW50
YXRpb24KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIFRoZSBp
bWFnZSByZWN0YW5nbGUgaXMgc3BsaXQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLSAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEEgICAgICAgICAgfAotICAg
ICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8
Ci0gICAgICB8IEIgfCAgICAgIEMgICAgICB8IEQgfAotICAgICAgfCAgIHwgICAgICAgICAgICAg
fCAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEUg
ICAgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgV2hlcmUgcmVn
aW9uIEMgY29udGFpbnMgdGhvc2UgcGl4ZWxzLCB3aG9zZSB2YWx1ZXMKLSAgIGNhbiBiZSBjYWxj
dWxhdGVkIHdpdGhvdXQgY3Jvc3NpbmcgdGhlIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZS4KLQotICAg
RXhhbXBsZToKLSAgICAgIEltYWdlIHNpemU6IHdpZHRoOiAxMCwgaGVpZ2h0OiAxMAotCi0gICAg
ICBPcmRlciAoa2VybmVsIG1hdHJpeCBzaXplKTogd2lkdGg6IDMsIGhlaWdodCA0Ci0gICAgICBU
YXJnZXQ6IHg6MSwgeTozCi0KLSAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSB0
YXJnZXQgaW5zaWRlIHRoZSBrZXJuZWwgbWF0cml4OgotCi0gICAgICAgIC4uLgotICAgICAgICAu
Li4KLSAgICAgICAgLi4uCi0gICAgICAgIC5YLgotCi0gICBUaGUgcmVnaW9ucyBpbiB0aGlzIGNh
c2UgYXJlIHRoZSBmb2xsb3dpbmc6Ci0gICAgICBOb3RlOiAoeDEsIHkxKSB0b3AtbGVmdCBhbmQg
KHgyLCB5MikgaXMgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIKLSAgICAgIE5vdGU6IHJvdyB4MiBh
bmQgY29sdW1uIHkyIGlzIG5vdCBwYXJ0IG9mIHRoZSByZWdpb24KLSAgICAgICAgICAgIG9ubHkg
dGhvc2UgKHgsIHkpIHBpeGVscywgd2hlcmUgeDEgPD0geCA8IHgyIGFuZCB5MSA8PSB5IDwgeTIK
LQotICAgICAgUmVnaW9uIEE6IHgxOiAwLCB5MTogMCwgeDI6IDEwLCB5MjogMwotICAgICAgUmVn
aW9uIEI6IHgxOiAwLCB5MTogMywgeDI6IDEsIHkyOiAxMAotICAgICAgUmVnaW9uIEM6IHgxOiAx
LCB5MTogMywgeDI6IDksIHkyOiAxMAotICAgICAgUmVnaW9uIEQ6IHgxOiA5LCB5MTogMywgeDI6
IDEwLCB5MjogMTAKLSAgICAgIFJlZ2lvbiBFOiB4MTogMCwgeTE6IDEwLCB4MjogMTAsIHkyOiAx
MCAoZW1wdHkgcmVnaW9uKQotCi0gICBTaW5jZSByZWdpb24gQyAob2Z0ZW4pIGNvbnRhaW5zIG1v
c3Qgb2YgdGhlIHBpeGVscywgd2UgaW1wbGVtZW50ZWQKLSAgIGEgZmFzdCBhbGdvcml0bSB0byBj
YWxjdWxhdGUgdGhlc2UgdmFsdWVzLCBjYWxsZWQgZmFzdFNldEludGVyaW9yUGl4ZWxzLgotICAg
Rm9yIG90aGVyIHJlZ2lvbnMsIGZhc3RTZXRPdXRlclBpeGVscyBpcyB1c2VkLCB3aGljaCBjYWxs
cyBnZXRQaXhlbFZhbHVlLAotICAgdG8gaGFuZGxlIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBpbWFn
ZS4gSW4gYSByYXJlIHNpdHVhdGlvbnMsIHdoZW4KLSAgIGtlcm5lbCBtYXRyaXggaXMgYmlnZ2Vy
IHRoYW4gdGhlIGltYWdlLCBhbGwgcGl4ZWxzIGFyZSBjYWxjdWxhdGVkIGJ5IHRoaXMKLSAgIGZ1
bmN0aW9uLgotCi0gICBBbHRob3VnaCB0aGVzZSB0d28gZnVuY3Rpb25zIGhhdmUgbG90IGluIGNv
bW1vbiwgSSBkZWNpZGVkIG5vdCB0byBtYWtlCi0gICBjb21tb24gYSB0ZW1wbGF0ZSBmb3IgdGhl
bSwgc2luY2UgdGhlcmUgYXJlIGtleSBkaWZmZXJlbmNlcyBhcyB3ZWxsLAotICAgYW5kIHdvdWxk
IG1ha2UgaXQgcmVhbGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4KLSovCi0KLXN0YXRpYyBBTFdBWVNf
SU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWdu
ZWQgY2hhciBtYXggPSAyNTUpCitGbG9hdFJlY3QgRkVDb252b2x2ZU1hdHJpeDo6ZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBpZiAoY2hhbm5lbCA8PSAwKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCi0gICAgICAgIHJldHVybiBtYXg7Ci0gICAg
cmV0dXJuIGNoYW5uZWw7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heFByaW1pdGl2ZVN1YnJlZ2lv
bihpbnB1dHMpOwogfQogCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdB
WVNfSU5MSU5FIHZvaWQgc2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZVBpeGVscywgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RQaXhlbHMsIGludCYgcGl4
ZWwsIGZsb2F0KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMpCitGaWx0ZXJSZXN1
bHQqIEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQg
Y2hhciBtYXhBbHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1
ZSh0b3RhbHNbM10gLyBkaXZpc29yICsgYmlhcyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAz
OyArK2kpCi0gICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRv
dGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOwotCi0gICAgaWYgKHByZXNlcnZl
QWxwaGFWYWx1ZXMpIHsKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwsIHNvdXJjZVBpeGVs
cy5pdGVtKHBpeGVsKSk7Ci0gICAgICAgICsrcGl4ZWw7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRl
c3RQaXhlbHMuc2V0KHBpeGVsKyssIG1heEFscGhhKTsKLX0KLQotI2lmIENPTVBJTEVSKE1TVkMp
Ci0vLyBJbmNvcnJlY3RseSBkaWFnbm9zaW5nIG92ZXJ3cml0ZSBvZiBzdGFjayBpbiB8dG90YWxz
fCBkdWUgdG8gfHByZXNlcnZlQWxwaGFWYWx1ZXN8LgotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDc4OSkKLSNlbmRpZgotCi0vLyBPbmx5IGZvciByZWdp
b24gQwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2
b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQs
IGludCB5RW5kKQotewotICAgIC8vIGVkZ2UgbW9kZSBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4
ZWxzCi0gICAgaW50IHBpeGVsID0gKG1fdGFyZ2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53
aWR0aCArIG1fdGFyZ2V0T2Zmc2V0LngoKSkgKiA0OwotICAgIGludCBrZXJuZWxJbmNyZWFzZSA9
IGNsaXBSaWdodCAqIDQ7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChtX2tlcm5lbFNpemUud2lkdGgo
KSAtIDEpICogNDsKLSAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRz
Ci0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07Ci0K
LSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOwotCi0gICAgLy8gU2tpcCB0aGUg
Zmlyc3QgJyhjbGlwQm90dG9tIC0geUVuZCknIGxpbmVzCi0gICAgcGl4ZWwgKz0gKGNsaXBCb3R0
b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKLSAgICBpbnQg
c3RhcnRLZXJuZWxQaXhlbCA9IChjbGlwQm90dG9tIC0geUVuZCkgKiAoeEluY3JlYXNlICsgKGNs
aXBSaWdodCArIDEpICogNCk7Ci0KLSAgICBmb3IgKGludCB5ID0geUVuZCArIDE7IHkgPiB5U3Rh
cnQ7IC0teSkgewotICAgICAgICBmb3IgKGludCB4ID0gY2xpcFJpZ2h0ICsgMTsgeCA+IDA7IC0t
eCkgewotICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1h
dHJpeC5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsID0gc3RhcnRLZXJu
ZWxQaXhlbDsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOwor
ICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxh
c3QoKTsKIAotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1sx
XSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVz
ZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CisgICAgaWYg
KGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKIAotICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsK
LSAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtr
ZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBh
aW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAg
ICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVt
KGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1
ZXMpCi0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3Jj
UGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKSk7Ci0gICAgICAgICAgICAgICAgKytrZXJuZWxQ
aXhlbDsKLSAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOwotICAgICAgICAgICAgICAgIGlm
ICghLS13aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbCArPSBrZXJuZWxJ
bmNyZWFzZTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERl
c3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZp
c29yLCBwYWludGluZ0RhdGEuYmlhcyk7Ci0gICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9
IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwotICAgICAgICBzdGFy
dEtlcm5lbFBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICB9Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50
IEZFQ29udm9sdmVNYXRyaXg6OmdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIGludCB4LCBpbnQgeSkKLXsKLSAgICBpZiAoeCA+PSAwICYmIHggPCBwYWludGluZ0RhdGEu
d2lkdGggJiYgeSA+PSAwICYmIHkgPCBwYWludGluZ0RhdGEuaGVpZ2h0KQotICAgICAgICByZXR1
cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotCi0gICAgc3dpdGNoIChtX2Vk
Z2VNb2RlKSB7Ci0gICAgZGVmYXVsdDogLy8gRURHRU1PREVfTk9ORQotICAgICAgICByZXR1cm4g
LTE7Ci0gICAgY2FzZSBFREdFTU9ERV9EVVBMSUNBVEU6Ci0gICAgICAgIGlmICh4IDwgMCkKLSAg
ICAgICAgICAgIHggPSAwOwotICAgICAgICBlbHNlIGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0
aCkKLSAgICAgICAgICAgIHggPSBwYWludGluZ0RhdGEud2lkdGggLSAxOwotICAgICAgICBpZiAo
eSA8IDApCi0gICAgICAgICAgICB5ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGlu
Z0RhdGEuaGVpZ2h0KQotICAgICAgICAgICAgeSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOwot
ICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAgIGNh
c2UgRURHRU1PREVfV1JBUDoKLSAgICAgICAgd2hpbGUgKHggPCAwKQotICAgICAgICAgICAgeCAr
PSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOwot
ICAgICAgICB3aGlsZSAoeSA8IDApCi0gICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWln
aHQ7Ci0gICAgICAgIHkgJT0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgcmV0dXJuICh5
ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLSAgICB9Ci19Ci0KLS8vIEZvciBvdGhl
ciByZWdpb25zIHRoYW4gQwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotdm9p
ZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICBpbnQgcGl4
ZWwgPSAoeTEgKiBwYWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OwotICAgIGludCBoZWlnaHQg
PSB5MiAtIHkxOwotICAgIGludCB3aWR0aCA9IHgyIC0geDE7Ci0gICAgaW50IGJlZ2luS2VybmVs
UGl4ZWxYID0geDEgLSBtX3RhcmdldE9mZnNldC54KCk7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4
ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEg
LSBtX3RhcmdldE9mZnNldC55KCk7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChwYWludGluZ0RhdGEu
d2lkdGggLSB3aWR0aCkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNv
bXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6
IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7Ci0KLSAgICBmb3Ig
KGludCB5ID0gaGVpZ2h0OyB5ID4gMDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSB3aWR0
aDsgeCA+IDA7IC0teCkgewotICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeC5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVs
WCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0
YXJ0S2VybmVsUGl4ZWxZOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndp
ZHRoKCk7Ci0KLSAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNb
MV0gPSAwOwotICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKLSAgICAgICAgICAgIGlmICghcHJl
c2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICB0b3RhbHNbM10gPSAwOwotCi0gICAg
ICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIGludCBw
aXhlbEluZGV4ID0gZ2V0UGl4ZWxWYWx1ZShwYWludGluZ0RhdGEsIGtlcm5lbFBpeGVsWCwga2Vy
bmVsUGl4ZWxZKTsKLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxJbmRleCA+PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tl
cm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eS5pdGVtKHBpeGVsSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBh
aW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDEpKTsKLSAgICAg
ICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2Vy
bmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
Lml0ZW0ocGl4ZWxJbmRleCArIDIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzICYmIHBpeGVsSW5kZXggPj0gMCkKLSAgICAgICAg
ICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVs
VmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0
ZW0ocGl4ZWxJbmRleCArIDMpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWDsKLSAg
ICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghLS13aWR0
aCkgewotICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVs
WDsKLSAgICAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICAgICAg
ICAgIHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVsczxwcmVzZXJ2ZUFs
cGhhVmFsdWVzPihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBp
eGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIG1fZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMpOwot
ICAgICAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgfQotICAgICAgICBwaXhl
bCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQ
aXhlbFg7Ci0gICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgfQotfQotCi0jaWYgQ09N
UElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3ApIC8vIERpc2FibGUgb2YgNDc4OQotI2Vu
ZGlmCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBp
eGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBC
b3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQotewotICAgIC8vIE11c3QgYmUgaW1wbGVtZW50
ZWQgaGVyZSwgc2luY2UgaXQgcmVmZXJzIGFub3RoZXIgQUxXQVlTX0lOTElORQotICAgIC8vIGZ1
bmN0aW9uLCB3aGljaCBkZWZpbmVkIGluIHRoaXMgQysrIHNvdXJjZSBmaWxlIGFzIHdlbGwKLSAg
ICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8dHJ1
ZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci0g
ICAgZWxzZQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0
YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotfQotCi1BTFdBWVNfSU5M
SU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICAvLyBB
bHRob3VnaCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBtb3ZlZCB0byB0aGUgaGVhZGVyLCBpdCBpcyBp
bXBsZW1lbnRlZCBoZXJlCi0gICAgLy8gYmVjYXVzZSBzZXRJbnRlcmlvclBpeGVscyBpcyBhbHNv
IGltcGxlbWVudGVkIGhlcmUKLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0
U2V0T3V0ZXJQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAg
ZWxzZQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgeDEs
IHkxLCB4MiwgeTIpOwotfQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IGNyZWF0
ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXItPmRhdGEoKTsKLQotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotCi0gICAg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VQaXhlbEFycmF5OwotICAgIGlmIChtX3By
ZXNlcnZlQWxwaGEpCi0gICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVk
UmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGVs
c2UKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVm
ZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNl
UGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBh
YnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCku
ZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewotICAg
ICAgICAqc291cmNlUGl4ZWxBcnJheSwKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5LAot
ICAgICAgICBwYWludFNpemUud2lkdGgoKSwKLSAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAot
ICAgICAgICBtX2JpYXMgKiAyNTUsCi0gICAgICAgIG5vcm1hbGl6ZWRGbG9hdHMobV9rZXJuZWxN
YXRyaXgpCi0gICAgfTsKLQotICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKLSAg
ICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRTaXplLndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgo
KTsKLSAgICBpbnQgY2xpcEJvdHRvbSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAtIG1fa2VybmVsU2l6
ZS5oZWlnaHQoKTsKLQotICAgIGlmIChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7
Ci0gICAgICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemllZCBmb3Igc3BlZWQKLSAg
ICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludFNpemUud2lkdGgo
KSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChpbnQgaXRlcmF0aW9ucyA9IChhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgKiBhYnNvbHV0
ZVBhaW50UmVjdCgpLmhlaWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24pIHsKLSAgICAg
ICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwotICAgICAgICBpbnQgY2h1
bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7Ci0KLSAgICAgICAg
V29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkoY2h1bmtDb3VudCwgWyZdKHNpemVfdCBpbmRleCkg
ewotICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRleCk7Ci0gICAgICAgICAg
ICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4ICsgMSksIGNsaXBCb3R0
b20pOwotCi0gICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBS
aWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKLSAgICAgICAgfSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlw
Qm90dG9tLCAwLCBjbGlwQm90dG9tKTsKLQotICAgIGNsaXBSaWdodCArPSBtX3RhcmdldE9mZnNl
dC54KCkgKyAxOwotICAgIGNsaXBCb3R0b20gKz0gbV90YXJnZXRPZmZzZXQueSgpICsgMTsKLSAg
ICBpZiAobV90YXJnZXRPZmZzZXQueSgpID4gMCkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFp
bnRpbmdEYXRhLCAwLCAwLCBwYWludFNpemUud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsK
LSAgICBpZiAoY2xpcEJvdHRvbSA8IHBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgc2V0T3V0
ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludFNpemUud2lkdGgoKSwg
cGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkKLSAg
ICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55KCks
IG1fdGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7Ci0gICAgaWYgKGNsaXBSaWdodCA8IHBh
aW50U2l6ZS53aWR0aCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNs
aXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lkdGgoKSwgY2xpcEJvdHRv
bSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwog
fQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RWRnZU1vZGVUeXBlJiB0eXBlKQpAQCAtNDUzLDEwICsxNDksOSBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRnZU1vZGVUeXBlJiB0eXBlKQog
ICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJl
c2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0
CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVDb252b2x2ZU1hdHJpeCI7Ci0gICAgRmlsdGVy
RWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAg
dHMgPDwgIiBvcmRlcj1cIiIgPDwgbV9rZXJuZWxTaXplIDw8ICJcIiAiCiAgICAgICAgPDwgImtl
cm5lbE1hdHJpeD1cIiIgPDwgbV9rZXJuZWxNYXRyaXggIDw8ICJcIiAiCiAgICAgICAgPDwgImRp
dmlzb3I9XCIiIDw8IG1fZGl2aXNvciA8PCAiXCIgIgpAQCAtNDY1LDkgKzE2MCw2IEBAIFRleHRT
dHJlYW0mIEZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIFJlcHJlc2VudGF0CiAgICAgICAgPDwgImVkZ2VNb2RlPVwiIiA8PCBtX2VkZ2VNb2Rl
IDw8ICJcIiAiCiAgICAgICAgPDwgImtlcm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1fa2VybmVsVW5p
dExlbmd0aCA8PCAiXCIgIgogICAgICAgIDw8ICJwcmVzZXJ2ZUFscGhhPVwiIiA8PCBtX3ByZXNl
cnZlQWxwaGEgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVu
dFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguaAppbmRleCA2N2Q0YzY1NjdmY2U2YjI3ZWU1YWI4OTVhNmUxZTUwMDU0ZTEzZGJhLi4xYTY5
NWI0ZDkyMWYyNjg2NmYwZGEzZDEyYjljZjJiNjBlMzk3NDIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguaApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJj
emVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNyArMjUsNiBAQAogCiAj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMzgsOSArMzgsNyBAQCBlbnVtIEVkZ2VNb2RlVHlwZSB7CiAKIGNsYXNzIEZFQ29u
dm9sdmVNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBJbnRTaXplJiwKLSAg
ICAgICAgICAgIGZsb2F0LCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNv
bnN0IEZsb2F0UG9pbnQmLAotICAgICAgICAgICAgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYp
OworICAgIHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKGNvbnN0IEludFNpemUm
IGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0
YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExl
bmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRy
aXgpOwogCiAgICAgSW50U2l6ZSBrZXJuZWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxT
aXplOyB9CiAgICAgdm9pZCBzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmKTsKQEAgLTY3LDQx
ICs2NSwxNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwogCiBw
cml2YXRlOgotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5OwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSYg
ZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0Owot
ICAgICAgICBmbG9hdCBiaWFzOwotICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtlcm5lbE1hdHJpeDsK
LSAgICB9OwotCi0gICAgRkVDb252b2x2ZU1hdHJpeChGaWx0ZXImLCBjb25zdCBJbnRTaXplJiwg
ZmxvYXQsIGZsb2F0LAotICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUs
IGNvbnN0IEZsb2F0UG9pbnQmLCBib29sLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisgICAgRkVD
b252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBm
bG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNv
bnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29u
c3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb252b2x2ZU1hdHJpeCI7IH0KIAotICAg
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRl
UGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KLQotICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3Qg
RmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci0gICAg
QUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmLCBp
bnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpOworICAg
IEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEFM
V0FZU19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5
KTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1
dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJp
ZGU7CiAKLSAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci0gICAgdm9pZCBm
YXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgxLCBpbnQgeTEsIGludCB4Miwg
aW50IHkyKTsKLQotICAgIC8vIFdyYXBwZXIgZnVuY3Rpb25zCi0gICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBj
bGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lk
IHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGlu
dCB5Mik7Ci0KLSAgICAvLyBQYXJhbGxlbGl6YXRpb24gcGFydHMKLSAgICBzdGF0aWMgY29uc3Qg
aW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRh
dGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgSW50U2l6ZSBtX2tlcm5lbFNpemU7CiAgICAgZmxvYXQgbV9k
aXZpc29yOwpAQCAtMTE0LDQgKzg4LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAppbmRleCBlZWIxNzI4ZGIzNWU4
YWMzMDJiMjdlNGMzZmYzNGNiODg1NWI5ZDA5Li5hMzlkZGRhZDQ2ZjM5OTFjYTliYjIxYmUxZTIz
ZmZiZjcwNjBjYWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcApAQCAtMiw2ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNywzNiArMjgsMjIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGln
aHRpbmcoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBz
dXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3Vy
Y2UpCi0gICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0Nv
bG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0
aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgVHlwZTo6RGlmZnVz
ZUxpZ2h0aW5nKQorUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1c2VMaWdodGluZzo6Y3Jl
YXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNl
Q29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRURpZmZ1c2VMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQs
IGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpKSk7
CiB9CiAKLVJlZjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShG
aWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VT
Y2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK0ZF
RGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBzb3Vy
Y2UpCisgICAgOiBGRUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFu
dCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKHNv
dXJjZSksIFR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQogewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGZpbHRlciwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxl
LCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwg
V1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVEaWZmdXNlTGlnaHRpbmc6On5GRURpZmZ1
c2VMaWdodGluZygpID0gZGVmYXVsdDsKLQotYm9vbCBGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlm
ZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKLXsKLSAgICBpZiAobV9kaWZmdXNl
Q29uc3RhbnQgPT0gZGlmZnVzZUNvbnN0YW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9kaWZmdXNlQ29uc3RhbnQgPSBkaWZmdXNlQ29uc3RhbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLVRleHRTdHJlYW0mIEZFRGlmZnVzZUxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0
CitUZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwg
aW5kZW50IDw8ICJbZmVEaWZmdXNlTGlnaHRpbmciOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc3VyZmFj
ZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VTY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJkaWZmdXNl
Q29uc3RhbnQ9XCIiIDw8IG1fZGlmZnVzZUNvbnN0YW50IDw8ICJcIiAiCiAgICAgICAgPDwgImtl
cm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1fa2VybmVsVW5pdExlbmd0aFggPDwgIiwgIiA8PCBtX2tl
cm5lbFVuaXRMZW5ndGhZIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29w
ZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGln
aHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZm
dXNlTGlnaHRpbmcuaAppbmRleCBkZjYxMTRkMGZiOGUyZjNlMTEyOGI4NDI2MTVlNDc1MTNhMGRk
ZGMzLi45NjAwNjIwNDlhMjJmZTVhODVjYmZlYmIzNDllY2YxYWJkNDE3OTcyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0
aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
ZmZ1c2VMaWdodGluZy5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI1LDIxICsyNiwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIExpZ2h0U291cmNlOwotCiBjbGFzcyBGRURpZmZ1c2VMaWdodGluZyA6IHB1YmxpYyBGRUxp
Z2h0aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBjcmVh
dGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVm
PExpZ2h0U291cmNlPiYmKTsKLSAgICB2aXJ0dWFsIH5GRURpZmZ1c2VMaWdodGluZygpOwotCi0g
ICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9kaWZmdXNlQ29uc3Rh
bnQ7IH0KLSAgICBib29sIHNldERpZmZ1c2VDb25zdGFudChmbG9hdCk7Ci0KLSAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGF0aWMgUmVmPEZFRGlmZnVzZUxp
Z2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRp
ZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiBwcml2YXRlOgotICAgIEZFRGlmZnVzZUxp
Z2h0aW5nKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQs
IFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgRkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3Im
LCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYp
OworICAgIAorICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiAiRkVEaWZmdXNlTGlnaHRpbmciOyB9CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDA0NzQ5MzM5MmJiMjgxNDZkOGIxNjliYTBhN2MzMmIx
NmM1NjNmYTEuLjNhNzVjYzU5NTNmZDYxOGViMTVhMzIyYzMyZDk2ZTQ0MjM1ZThiMDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNCwxMzIgKzI1LDU0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlz
cGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChGaWx0ZXImIGZpbHRlciwgQ2hhbm5lbFNl
bGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVs
U2VsZWN0b3IsIGZsb2F0IHNjYWxlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6
RGlzcGxhY2VtZW50TWFwKQotICAgICwgbV94Q2hhbm5lbFNlbGVjdG9yKHhDaGFubmVsU2VsZWN0
b3IpCi0gICAgLCBtX3lDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcikKLSAgICAsIG1f
c2NhbGUoc2NhbGUpCitSZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpj
cmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQogeworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFRGlzcGxhY2VtZW50TWFwKHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2Vs
ZWN0b3IsIHNjYWxlKSk7CiB9CiAKLVJlZjxGRURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFjZW1l
bnRNYXA6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5l
bFNlbGVjdG9yLAotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxv
YXQgc2NhbGUpCitGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNl
bGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVs
U2VsZWN0b3IsIGZsb2F0IHNjYWxlKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFRGlzcGxh
Y2VtZW50TWFwKQorICAgICwgbV94Q2hhbm5lbFNlbGVjdG9yKHhDaGFubmVsU2VsZWN0b3IpCisg
ICAgLCBtX3lDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcikKKyAgICAsIG1fc2NhbGUo
c2NhbGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoZmls
dGVyLCB4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkpOwogfQogCiBi
b29sIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxT
ZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcikKIHsKLSAgICBpZiAobV94Q2hhbm5lbFNlbGVj
dG9yID09IHhDaGFubmVsU2VsZWN0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3hD
aGFubmVsU2VsZWN0b3IgPSB4Q2hhbm5lbFNlbGVjdG9yOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1feENoYW5uZWxTZWxlY3RvciwgeENoYW5uZWxTZWxlY3Rv
cikgIT0gbV94Q2hhbm5lbFNlbGVjdG9yOwogfQogCiBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpz
ZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxl
Y3RvcikKIHsKLSAgICBpZiAobV95Q2hhbm5lbFNlbGVjdG9yID09IHlDaGFubmVsU2VsZWN0b3Ip
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3lDaGFubmVsU2VsZWN0b3IgPSB5Q2hhbm5l
bFNlbGVjdG9yOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1f
eUNoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3RvcikgIT0gbV95Q2hhbm5lbFNlbGVjdG9y
OwogfQogCiBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZShmbG9hdCBzY2FsZSkKIHsK
LSAgICBpZiAobV9zY2FsZSA9PSBzY2FsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
c2NhbGUgPSBzY2FsZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5n
ZShtX3NjYWxlLCBzY2FsZSkgIT0gbV9zY2FsZTsKIH0KIAotdm9pZCBGRURpc3BsYWNlbWVudE1h
cDo6c2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKQorRmxv
YXRSZWN0IEZFRGlzcGxhY2VtZW50TWFwOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewot
ICAgIC8vIFNwZWM6IFRoZSAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJyBwcm9wZXJ0eSBv
bmx5IGFwcGxpZXMgdG8gdGhlICdpbjInIHNvdXJjZSBpbWFnZQotICAgIC8vIGFuZCBkb2VzIG5v
dCBhcHBseSB0byB0aGUgJ2luJyBzb3VyY2UgaW1hZ2UuIFRoZSAnaW4nIHNvdXJjZSBpbWFnZSBt
dXN0IHJlbWFpbiBpbiBpdHMKLSAgICAvLyBjdXJyZW50IGNvbG9yIHNwYWNlLgotICAgIC8vIFRo
ZSByZXN1bHQgaXMgaW4gdGhhdCBzbWFlIGNvbG9yIHNwYWNlIGJlY2F1c2UgaXQgaXMgYSBkaXNw
bGFjZW1lbnQgb2YgdGhlICdpbicgaW1hZ2UuCi0gICAgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRD
b2xvclNwYWNlKGlucHV0RWZmZWN0KDApLT5yZXN1bHRDb2xvclNwYWNlKCkpOworICAgIHJldHVy
biBnZW9tZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzKTsKIH0KIAotdm9pZCBGRURp
c3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGlu
LCBjb25zdCBpbnQgaW5kZXgpCitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxhY2VtZW50TWFwOjphcHBs
eShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VC
dWZmZXIqKSBjb25zdAogewotICAgIC8vIERvIG5vdCB0cmFuc2Zvcm0gdGhlIGZpcnN0IHByaW1p
dGl2ZSBpbnB1dCwgYXMgcGVyIHRoZSBzcGVjLgotICAgIGlmIChpbmRleCkKLSAgICAgICAgaW4t
PnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLX0KLQot
c3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1bnNp
Z25lZCB5LCB1bnNpZ25lZCByb3dCeXRlcykKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1Bl
clBpeGVsID0gNDsKLSAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7
Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17
Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVj
dCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9y
ICE9IENIQU5ORUxfVU5LTk9XTik7Ci0gICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBD
SEFOTkVMX1VOS05PV04pOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
YXV0byBpbnB1dEltYWdlID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdS
ZWN0KTsKLQotICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgLy8gVGhl
IGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y4oCZIGFyZSBw
ZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgotICAgIGF1dG8g
ZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2lu
Z1JlY3QpOwotICAgIAotICAgIGlmICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBk
aXNwbGFjZW1lbnRJbWFnZS0+bGVuZ3RoKCkpOwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAg
ICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9z
Y2FsZSwgbV9zY2FsZSB9KTsKLSAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRo
KCkgLyAyNTUuMDsKLSAgICBmbG9hdCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8g
MjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAw
LjU7Ci0gICAgZmxvYXQgc2NhbGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxlLmhlaWdodCgpICogMC41
OworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2su
dGFrZUxhc3QoKTsKICAgICAKLSAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5l
bEluZGV4KCk7Ci0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxZID0geUNoYW5uZWxJbmRleCgp
OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBpbnQgcm93Qnl0ZXMgPSBwYWludFNpemUu
d2lkdGgoKSAqIDQ7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IHBhaW50U2l6ZS5oZWlnaHQo
KTsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7Ci0K
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7Ci0g
ICAgICAgICAgICBpbnQgZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxp
bnQ+KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25J
bmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAg
ICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3Bs
YWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVs
WSkgKyBzY2FsZWRPZmZzZXRZKTsKLQotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9u
UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFy
cmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwotICAgICAgICAgICAgaWYgKHNyY1ggPCAw
IHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWlu
dFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9
IDA7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihp
bnB1dEltYWdlLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRl
cykpOwotICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwg
eyBpbiwgaW4yIH0sIG51bGxwdHIpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSYgdHlwZSkKQEAgLTE3
NCwxNyArOTcsMTIgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1UZXh0U3RyZWFtJiBGRURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAor
VGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGlu
ZGVudCA8PCAiW2ZlRGlzcGxhY2VtZW50TWFwIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHNjYWxlPVwi
IiA8PCBtX3NjYWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInhDaGFubmVsU2VsZWN0b3I9XCIiIDw8
IG1feENoYW5uZWxTZWxlY3RvciA8PCAiXCIgIgogICAgICAgIDw8ICJ5Q2hhbm5lbFNlbGVjdG9y
PVwiIiA8PCBtX3lDaGFubmVsU2VsZWN0b3IgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06
OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEp
LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJu
IHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggZGQ3MzJhODgxMDczZTI2NmJj
ODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uMzljZTU0OWNmMTllYWMwZGE1MjhmNjJiZjMwMjQ4M2Q2
MTUxMGQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtMiw2ICsyLDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM3LDcgKzM2LDcgQEAgZW51bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKIAogY2xhc3MgRkVEaXNw
bGFjZW1lbnRNYXAgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoRmlsdGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3Is
IGZsb2F0IHNjYWxlKTsKKyAgICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUo
Q2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBl
IHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKIAogICAgIENoYW5uZWxTZWxlY3RvclR5
cGUgeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3Rvcjsg
fQogICAgIGJvb2wgc2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBl
KTsKQEAgLTQ4LDIyICs0NywyMSBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7
IHJldHVybiBtX3NjYWxlOyB9CiAgICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7CiAKLSAgICB2b2lk
IHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCosIGNv
bnN0IGludCkgb3ZlcnJpZGU7Ci0KIHByaXZhdGU6Ci0gICAgRkVEaXNwbGFjZW1lbnRNYXAoRmls
dGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKKyAgICBGRURpc3BsYWNlbWVudE1hcChD
aGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUg
eUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOworCisgICAgaW50IHhDaGFubmVsSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50IHlDaGFu
bmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CiAKICAg
ICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRGlzcGxh
Y2VtZW50TWFwIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgRmlsdGVyUmVz
dWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgaW50IHhDaGFubmVs
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9Ci0gICAgaW50
IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9
CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIENoYW5uZWxTZWxlY3RvclR5
cGUgbV94Q2hhbm5lbFNlbGVjdG9yOwogICAgIENoYW5uZWxTZWxlY3RvclR5cGUgbV95Q2hhbm5l
bFNlbGVjdG9yOwpAQCAtNzEsNCArNjksMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggNWNlN2JlM2E0NzFiNDdiOGRkNTQy
NmQ5NjViYmZlNzg5ZjZiYmRkOC4uMjA0YzE2NDQ2MTFmOWFhNzBlYWM2NzhiMzYzNDk3YzZkZjk5
MzJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMyw5OCArMjQsNDkgQEAKICNpbmNsdWRlICJDb2xv
clNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0gICAgCi1GRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhGaWx0ZXImIGZpbHRlciwg
ZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYg
c2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmls
dGVyLCBUeXBlOjpEcm9wU2hhZG93KQotICAgICwgbV9zdGRYKHN0ZFgpCi0gICAgLCBtX3N0ZFko
c3RkWSkKLSAgICAsIG1fZHgoZHgpCi0gICAgLCBtX2R5KGR5KQotICAgICwgbV9zaGFkb3dDb2xv
cihzaGFkb3dDb2xvcikKLSAgICAsIG1fc2hhZG93T3BhY2l0eShzaGFkb3dPcGFjaXR5KQotewot
fQogCi1SZWY8RkVEcm9wU2hhZG93PiBGRURyb3BTaGFkb3c6OmNyZWF0ZShGaWx0ZXImIGZpbHRl
ciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xv
ciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCitSZWY8RkVEcm9wU2hhZG93PiBG
RURyb3BTaGFkb3c6OmNyZWF0ZShmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxv
YXQgZHksIGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRURyb3BTaGFkb3coZmlsdGVyLCBzdGRYLCBzdGRZLCBkeCwgZHksIHNo
YWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVE
cm9wU2hhZG93KHN0ZFgsIHN0ZFksIGR4LCBkeSwgY29sb3IsIG9wYWNpdHkpKTsKIH0KIAotdm9p
ZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0ZFRHJvcFNoYWRv
dzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBk
eSwgY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0
KFR5cGU6OkZFRHJvcFNoYWRvdykKKyAgICAsIG1fc3RkWChzdGRYKQorICAgICwgbV9zdGRZKHN0
ZFkpCisgICAgLCBtX2R4KGR4KQorICAgICwgbV9keShkeSkKKyAgICAsIG1fY29sb3IoY29sb3Ip
CisgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKIHsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMt
PmZpbHRlcigpOwotCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZl
Y3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0
UGFpbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKLSAgICBhYnNvbHV0ZU9mZnNldFBhaW50UmVj
dC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsK
LSAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShhYnNvbHV0ZU9mZnNldFBhaW50UmVjdCk7Ci0K
LSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVs
U2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBo
YWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1
biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgz
ICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5m
bGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKLQotICAgIGlmIChjbGlwc1Rv
Qm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RS
ZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZm
ZWN0UmVjdCgpKTsKLQotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
YWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVEcm9wU2hhZG93OjpkcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0CiB7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdElt
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRl
cigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRC
eUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBibHVyUmFkaXVzLnNj
YWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVy
LnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7Ci0KLSAgICBGbG9hdFJl
Y3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3
aW5nUmVnaW9uKTsKLSAgICBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7Ci0K
LSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
LSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIHJlc3Vs
dENvbnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFjaXR5KTsKLSAgICByZXN1bHRDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAg
ICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOwotCi0gICAgU2hhZG93Qmx1ciBjb250ZXh0U2hh
ZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7Ci0KLSAgICBQaXhlbEJ1ZmZl
ckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3Qgc2hh
ZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0
byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRv
d0FyZWEpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGNvbnRleHRT
aGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVy
LT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOwotICAgIAotICAgIHJl
c3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOwotCi0g
ICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZUluKTsKLSAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7Ci0gICAg
cmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRl
c3RpbmF0aW9uT3Zlcik7Ci0KLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1
ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb24pOworICAgIHJldHVybiB7IH07CisvLyAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOworLy8KKy8vICAgIEZsb2F0UmVjdCBh
YnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwor
Ly8gICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0
KTsKKy8vICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOworLy8gICAgYWJzb2x1dGVQYWludFJlY3Qu
dW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOworLy8KKy8vICAgIEludFNpemUga2VybmVs
U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0
ZFgsIG1fc3RkWSB9KTsKKy8vCisvLyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXpl
IGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJl
ZSB0aW1lcy4KKy8vICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXpl
LndpZHRoKCkgKiAwLjVmKTsKKy8vICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBr
ZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CisvLworLy8gICAgaWYgKGNsaXBzVG9Cb3VuZHMo
KSkKKy8vICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKKy8vICAgIGVsc2UKKy8vICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShtYXhFZmZl
Y3RSZWN0KCkpOworLy8KKy8vICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFp
bnRSZWN0KTsKIH0KIAogSW50T3V0c2V0cyBGRURyb3BTaGFkb3c6Om91dHNldHMoKSBjb25zdApA
QCAtMTI4LDE0ICs4MCwyMyBAQCBJbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cygpIGNv
bnN0CiAgICAgfTsKIH0KIAotVGV4dFN0cmVhbSYgRkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFRHJvcFNoYWRvdzo6YXBwbHkoRmlsdGVyT3V0cHV0
JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QK
IHsKLSAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNoYWRvdyI7Ci0gICAgRmlsdGVyRWZmZWN0
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwg
IiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9
XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIg
PDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9zaGFkb3dDb2xvcikgPDwiXCIg
Zmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5IDw8ICJdXG4iOworICAgIEFTU0VS
VCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAot
ICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVm
ZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAg
IGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsg
aW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0
Cit7CisgICAgdHMgIDw8IGluZGVudCA8PCJbZmVEcm9wU2hhZG93IjsKKyAgICB0cyAgPDwgIiBz
dGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWQorICAgICAgICA8PCAi
XCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5CisgICAgICAgIDw8ICJcIiBj
b2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9jb2xvcikgPDwi
XCIgb3BhY2l0eT1cIiIgPDwgbV9vcGFjaXR5IDw8ICJdXG4iOwogICAgIHJldHVybiB0czsKIH0K
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAxMmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEy
OWVmZjM4NGMuLmQ1NTY1ZTQ5NzI4ZTA4M2UxYjMxM2VlZDExNmJiYzY1YjA4N2NiODQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMCwxNCArMjEsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29s
b3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3MgRkVEcm9wU2hhZG93IDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0
ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9h
dCk7CisgICAgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShmbG9hdCBzdGRYLCBmbG9h
dCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7
CiAKICAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29uc3QgeyByZXR1cm4gbV9zdGRYOyB9CiAg
ICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0ZFgpIHsgbV9zdGRYID0gc3RkWDsgfQpA
QCAtNDEsMzIgKzQxLDMzIEBAIHB1YmxpYzoKICAgICBmbG9hdCBkeSgpIGNvbnN0IHsgcmV0dXJu
IG1fZHk7IH0KICAgICB2b2lkIHNldER5KGZsb2F0IGR5KSB7IG1fZHkgPSBkeTsgfQogCi0gICAg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dDb2xvcjsg
fSAKLSAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikgeyBt
X3NoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7IH0KKyAgICBjb25zdCBDb2xvciYgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgdm9pZCBzZXRjQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsgfQogCi0gICAgZmxvYXQgc2hhZG93T3BhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93T3BhY2l0eTsgfQotICAgIHZvaWQgc2V0U2hhZG93T3Bh
Y2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hhZG93T3BhY2l0eSA9IHNoYWRvd09wYWNp
dHk7IH0KKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9Cisg
ICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsg
fQogCiBwcml2YXRlOgotICAgIEZFRHJvcFNoYWRvdyhGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgRkVEcm9wU2hhZG93KGZsb2F0
IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImLCBmbG9h
dCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIEludE91
dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0IG92ZXJyaWRl
OworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IGZsb2F0IG1fc3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7CiAgICAgZmxvYXQgbV9keDsKICAgICBm
bG9hdCBtX2R5OwotICAgIENvbG9yIG1fc2hhZG93Q29sb3I7Ci0gICAgZmxvYXQgbV9zaGFkb3dP
cGFjaXR5OworICAgIENvbG9yIG1fY29sb3I7CisgICAgZmxvYXQgbV9vcGFjaXR5OwogfTsKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggYjQyMzU1MzRjMzhiMWVi
YTIxMWVlODQ4NjE3OTkyMzgwZjNiNmIwMS4uOGI5YTc1ZGI2ZjE3MTQyODY5MjU5Yzg3YmY2Yjk1
YWJjZjY1Yjk5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUZsb29kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRmxvb2QuY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDU2ICsy
NSw1NiBAQAogI2luY2x1ZGUgIkZFRmxvb2QuaCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXph
dGlvbi5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GRUZsb29kOjpGRUZsb29kKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgZmxvb2RD
b2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlw
ZTo6Rmxvb2QpCi0gICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikKLSAgICAsIG1fZmxvb2RP
cGFjaXR5KGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoY29uc3Qg
Q29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFRmxvb2QoY29sb3IsIG9wYWNpdHkpKTsKIH0KIAotUmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNy
ZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29k
T3BhY2l0eSkKK0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBvcGFj
aXR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFRmxvb2QpCisgICAgLCBtX2NvbG9yKGNv
bG9yKQorICAgICwgbV9vcGFjaXR5KG9wYWNpdHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVGbG9vZChmaWx0ZXIsIGZsb29kQ29sb3IsIGZsb29kT3BhY2l0eSkpOwogfQogCi1ib29s
IEZFRmxvb2Q6OnNldEZsb29kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQorYm9vbCBGRUZsb29k
OjpzZXRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKG1fZmxvb2RDb2xvciA9
PSBjb2xvcikKKyAgICBpZiAobV9jb2xvciA9PSBjb2xvcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIG1fZmxvb2RDb2xvciA9IGNvbG9yOworICAgIG1fY29sb3IgPSBjb2xvcjsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxv
b2RPcGFjaXR5KQorYm9vbCBGRUZsb29kOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCiB7Ci0g
ICAgaWYgKG1fZmxvb2RPcGFjaXR5ID09IGZsb29kT3BhY2l0eSkKKyAgICBpZiAobV9vcGFjaXR5
ID09IG9wYWNpdHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Zsb29kT3BhY2l0eSA9
IGZsb29kT3BhY2l0eTsKKyAgICBtX29wYWNpdHkgPSBvcGFjaXR5OwogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3Qg
RkVGbG9vZDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkK
LSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBnZW9tZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdp
b24oeyB9KTsKK30KKworRmlsdGVyUmVzdWx0KiBGRUZsb29kOjphcHBseShGaWx0ZXJPdXRwdXQm
IG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqKSBjb25zdAoreworICAg
IGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9y
V2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb29kT3BhY2l0eSgpKTsKLSAgICByZXN1bHRJbWFnZS0+
Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRS
ZWN0KCkuc2l6ZSgpKSwgY29sb3IpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwg
eyB9LCBudWxscHRyKTsKIH0KIAotVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9u
KSBjb25zdAorVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgdHMgPDwgaW5k
ZW50IDw8ICJbZmVGbG9vZCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBmbG9vZC1jb2xvcj1cIiIgPDwg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoZmxvb2RDb2xvcigpKSA8PCAiXCIgIgot
ICAgICAgIDw8ICJmbG9vZC1vcGFjaXR5PVwiIiA8PCBmbG9vZE9wYWNpdHkoKSA8PCAiXCJdXG4i
OworICAgIHRzICA8PCBpbmRlbnQgPDwgIltmZUZsb29kIjsKKyAgICB0cyAgPDwgIiBjb2xvcj1c
IiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IoKSkgPDwgIlwiICIK
KyAgICAgICAgPDwgIm9wYWNpdHk9XCIiIDw8IG9wYWNpdHkoKSA8PCAiXCJdXG4iOwogICAgIHJl
dHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0ZGM5NjljNmQ3NTg4YmNlYjBhZDhiMjQ2ODJmYTA2
MTczNDhlLi43OTg2ZDQ2Njg0YmY1OGFiY2JjZTg0Y2ZiNjZhMjEyMjgwOGFlNzk0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApA
QCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw0
MiArMjMsMzUgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGRUZsb29kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9h
dCk7CisgICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBv
cGFjaXR5KTsKIAotICAgIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9mbG9vZENvbG9yOyB9Ci0gICAgYm9vbCBzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJik7Cisg
ICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIGJv
b2wgc2V0Q29sb3IoY29uc3QgQ29sb3ImKTsKIAotICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OyB9Ci0gICAgYm9vbCBzZXRGbG9vZE9wYWNpdHko
ZmxvYXQpOwotCi0jaWYgIVVTRShDRykKLSAgICAvLyBmZUZsb29kIGRvZXMgbm90IHBlcmZvcm0g
Y29sb3IgaW50ZXJwb2xhdGlvbiBvZiBhbnkga2luZCwgc28gdGhlIHJlc3VsdCBpcyBhbHdheXMg
aW4gdGhlIGN1cnJlbnQKLSAgICAvLyBjb2xvciBzcGFjZSByZWdhcmRsZXNzIG9mIHRoZSB2YWx1
ZSBvZiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMuCi0gICAgdm9pZCBzZXRPcGVyYXRpbmdD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVy
RWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsgfQotICAgIHZvaWQgc2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KLSNlbmRpZgorICAgIGZsb2F0IG9wYWNpdHko
KSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KKyAgICBib29sIHNldE9wYWNpdHkoZmxvYXQp
OwogCiBwcml2YXRlOgotICAgIEZFRmxvb2QoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7
CisgICAgRkVGbG9vZChjb25zdCBDb2xvciYsIGZsb2F0IG9wYWNpdHkpOwogCiAgICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUZsb29kIjsgfQogCi0g
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3Qg
ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZp
bHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
clJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJl
c3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIENvbG9yIG1fZmxvb2RDb2xvcjsKLSAgICBmbG9hdCBtX2Zsb29kT3BhY2l0eTsKKyAgICBD
b2xvciBtX2NvbG9yOworICAgIGZsb2F0IG1fb3BhY2l0eTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCAwOGU4NWEwOGFhMDFiMDgxMjIz
ZjM2ZWJiNmJiYjhhYjM2Mzk0MzY1Li41NjA0OGQ1YmYzM2ZmMzkxZDJjMTJjYTJmNDY5ZTBkYjVl
NmM5NWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNiw0NTAgKzI2LDM4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKIAotI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyTkVPTi5o
IgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgog
Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+
Ci0jZW5kaWYKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQg
Z2F1c3NpYW5LZXJuZWxGYWN0b3IoKQotewotICAgIHJldHVybiAzIC8gNC5mICogc3FydGYoMiAq
IHBpRmxvYXQpOwotfQotCi1zdGF0aWMgY29uc3QgaW50IGdNYXhLZXJuZWxTaXplID0gNTAwOwot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBi
bHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0
YVJpZ2h0KQorUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZsb2F0
IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKLSAgICAvLyBDaGVjayBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlR2F1c3NpYW5CbHVyRWxlbWVudCBm
b3IgZGV0YWlscy4KLSAgICBzd2l0Y2ggKGJsdXJJdGVyYXRpb24pIHsKLSAgICBjYXNlIDA6Ci0g
ICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7Ci0gICAgICAgICAgICBkZWx0YUxlZnQgPSByYWRp
dXMgLyAyIC0gMTsKLSAgICAgICAgICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyOwot
ICAgICAgICAgICAgZGVsdGFSaWdodCA9IHJhZGl1cyAtIGRlbHRhTGVmdDsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7
Ci0gICAgICAgICAgICBkZWx0YUxlZnQrKzsKLSAgICAgICAgICAgIGRlbHRhUmlnaHQtLTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGlmICghKHJhZGl1
cyAlIDIpKSB7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0Kys7Ci0gICAgICAgICAgICByYWRpdXMr
KzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVHYXVzc2lhbkJsdXIoeCwgeSwgZWRnZU1vZGUpKTsKIH0KIAotRkVHYXVzc2lhbkJs
dXI6OkZFR2F1c3NpYW5CbHVyKEZpbHRlciYgZmlsdGVyLCBmbG9hdCB4LCBmbG9hdCB5LCBFZGdl
TW9kZVR5cGUgZWRnZU1vZGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpHYXVz
c2lhbkJsdXIpCitGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQg
eSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFR2F1
c3NpYW5CbHVyKQogICAgICwgbV9zdGRYKHgpCiAgICAgLCBtX3N0ZFkoeSkKICAgICAsIG1fZWRn
ZU1vZGUoZWRnZU1vZGUpCiB7CiB9CiAKLVJlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJs
dXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKGZp
bHRlciwgeCwgeSwgZWRnZU1vZGUpKTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0U3Rk
RGV2aWF0aW9uWChmbG9hdCB4KQotewotICAgIG1fc3RkWCA9IHg7Ci19Ci0KLXZvaWQgRkVHYXVz
c2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkKLXsKLSAgICBtX3N0ZFkgPSB5Owot
fQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRnZU1v
ZGUpCi17Ci0gICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9u
IG9ubHkgb3BlcmF0ZXMgb24gQWxwaGEgY2hhbm5lbC4KLWlubGluZSB2b2lkIGJveEJsdXJBbHBo
YU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkc3RQaXhlbEFycmF5LAotICAgIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50
JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRo
LCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQotewotICAgIGNv
bnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKLSAgICB1aW50OF90
KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgLy8gTWVtb3J5IGFsaWdubWVu
dCBpczogUkdCQSwgemVyby1pbmRleCBiYXNlZC4KLSAgICBjb25zdCBpbnQgY2hhbm5lbCA9IDM7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7Ci0gICAgICAg
IGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAgIGludCBzdW0gPSAwOwotCi0gICAg
ICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhL
ZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBp
ICogc3RyaWRlOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSAr
IG9mZnNldDsKLSAgICAgICAgICAgIHN1bSArPSBzcmNQdHJbY2hhbm5lbF07Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZl
Y3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBs
aW5lICsgeCAqIHN0cmlkZSArIGNoYW5uZWw7Ci0gICAgICAgICAgICB1aW50OF90KiBkc3RQdHIg
PSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN1bSAvIGR4KTsKLQotICAgICAgICAgICAgLy8gU2hpZnQga2VybmVs
LgotICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAg
ICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsK
LSAgICAgICAgICAgICAgICBzdW0gLT0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7
Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0
T2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1bSArPSAqc3JjUHRyOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJh
eSwKLSAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUs
IGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wg
YWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIGNvbnN0IGludCBtYXhL
ZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOwotICAgIGlmIChhbHBo
YUltYWdlKQotICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5LCBk
c3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUsICBl
ZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxTaXplKTsKLQotICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3RE
YXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICAvLyBDb25jZXJuaW5nIHRoZSBhcnJh
eSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSArIE1hcmdpbiArIEJvcmRlci4gVGhl
IG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQotICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdodCAqIGNo
YW5uZWxzLgotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKLSAg
ICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKLSAgICAgICAgaW50IHN1bVIgPSAwLCBz
dW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAwOwotCi0gICAgICAgIGlmIChlZGdlTW9kZSA9PSBF
REdFTU9ERV9OT05FKSB7Ci0gICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNpemU7ICsraSkgewotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAg
ICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0gICAgICAgICAg
ICAgICAgc3VtUiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAg
c3VtQSArPSAqc3JjUHRyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBCbHVycmlu
Zy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3Ry
aWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5
dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAgICAgICAgICAgICAgIC8vIFNoaWZ0
IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAq
IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3Jj
RGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBd
OwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gc3Jj
UHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh4ICsgZHhS
aWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0
T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0Owot
ICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAg
ICAgc3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRy
WzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIGhlcmUuCi0gICAgICAgICAgICAvLyBHZXQg
ZWRnZSB2YWx1ZXMgZm9yIGVkZ2VNb2RlICdkdXBsaWNhdGUnLgotICAgICAgICAgICAgY29uc3Qg
dWludDhfdCogZWRnZVZhbHVlTGVmdCA9IHNyY0RhdGEgKyBsaW5lOwotICAgICAgICAgICAgY29u
c3QgdWludDhfdCogZWRnZVZhbHVlUmlnaHQgID0gc3JjRGF0YSArIChsaW5lICsgKGVmZmVjdFdp
ZHRoIC0gMSkgKiBzdHJpZGUpOwotCi0gICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0g
ICAgICAgICAgICBmb3IgKGludCBpID0gZHhMZWZ0ICogLTE7IGkgPCBkeFJpZ2h0OyArK2kpIHsK
LSAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHJpZ2h0IGZvciBuZWdhdGl2ZSB2YWx1ZXMgb2Yg
J2knPwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRl
OwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZz
ZXQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
c3VtUiArPSBlZGdlVmFsdWVMZWZ0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVk
Z2VWYWx1ZUxlZnRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlTGVm
dFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVMZWZ0WzNdOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+PSBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAg
ICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOwotICAgICAgICAgICAgICAgICAgICBz
dW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVk
Z2VWYWx1ZVJpZ2h0WzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJp
Z2h0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1
bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIrKzsK
LSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRl
T2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgdWludDhfdCogZHN0
UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLQotICAgICAgICAgICAgICAgICpkc3RQ
dHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7Ci0gICAgICAgICAgICAgICAg
KmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKLSAgICAgICAgICAg
ICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOwotICAgICAg
ICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOwotCi0g
ICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgotICAgICAgICAgICAgICAgIGlmICh4IDwg
ZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gZWRnZVZhbHVlTGVmdFswXTsK
LSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBlZGdlVmFsdWVMZWZ0WzFdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1CIC09IGVkZ2VWYWx1ZUxlZnRbMl07Ci0gICAgICAgICAgICAgICAgICAg
IHN1bUEgLT0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0g
ZHhMZWZ0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQ
dHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBz
cmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOwotICAgICAg
ICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3Vt
QSAtPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHggKyBkeFJpZ2h0ID49IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIg
Kz0gZWRnZVZhbHVlUmlnaHRbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZh
bHVlUmlnaHRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmlnaHRb
Ml07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRP
ZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwotICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBzcmNQdHJb
Ml07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotI2lmIFVTRShBQ0NF
TEVSQVRFKQotaW5saW5lIHZvaWQgYWNjZWxlcmF0ZUJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVs
U2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQotewot
ICAgIGlmICghaW9CdWZmZXIuZGF0YSgpIHx8ICF0ZW1wQnVmZmVyLmRhdGEoKSkgewotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChlZmZlY3RXaWR0aCA8PSAwIHx8IGVmZmVjdEhlaWdodCA8PSAwIHx8IHN0cmlkZSA8PSAwKSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gV2UgbXVzdCBhbHdheXMgdXNlIGFuIG9kZCByYWRpdXMuCi0gICAgaWYgKGtlcm5l
bFNpemUgJSAyICE9IDEpCi0gICAgICAgIGtlcm5lbFNpemUgKz0gMTsKLQotICAgIHZJbWFnZV9C
dWZmZXIgZWZmZWN0SW5CdWZmZXI7Ci0gICAgZWZmZWN0SW5CdWZmZXIuZGF0YSA9IHN0YXRpY19j
YXN0PHZvaWQqPihpb0J1ZmZlci5kYXRhKCkpOwotICAgIGVmZmVjdEluQnVmZmVyLndpZHRoID0g
ZWZmZWN0V2lkdGg7Ci0gICAgZWZmZWN0SW5CdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0Owot
ICAgIGVmZmVjdEluQnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOwotCi0gICAgdkltYWdlX0J1ZmZl
ciBlZmZlY3RPdXRCdWZmZXI7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLmRhdGEgPSB0ZW1wQnVmZmVy
LmRhdGEoKTsKLSAgICBlZmZlY3RPdXRCdWZmZXIud2lkdGggPSBlZmZlY3RXaWR0aDsKLSAgICBl
ZmZlY3RPdXRCdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0OwotICAgIGVmZmVjdE91dEJ1ZmZl
ci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIC8vIERldGVybWluZSB0aGUgc2l6ZSBvZiBhIHRl
bXBvcmFyeSBidWZmZXIgYnkgY2FsbGluZyB0aGUgZnVuY3Rpb24gZmlyc3Qgd2l0aCBhIHNwZWNp
YWwgZmxhZy4gdkltYWdlIHdpbGwgcmV0dXJuCi0gICAgLy8gdGhlIHNpemUgbmVlZGVkLCBvciBh
biBlcnJvciAod2hpY2ggYXJlIGFsbCBuZWdhdGl2ZSkuCi0gICAgc2l6ZV90IHRtcEJ1ZmZlclNp
emUgPSB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RP
dXRCdWZmZXIsIDAsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdl
RXh0ZW5kIHwga3ZJbWFnZUdldFRlbXBCdWZmZXJTaXplKTsKLSAgICBpZiAodG1wQnVmZmVyU2l6
ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2b2lkKiB0bXBCdWZmZXIgPSBmYXN0TWFs
bG9jKHRtcEJ1ZmZlclNpemUpOwotICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZl
Y3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXpl
LCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7Ci0gICAgdkltYWdlQm94Q29udm9s
dmVfQVJHQjg4ODgoJmVmZmVjdE91dEJ1ZmZlciwgJmVmZmVjdEluQnVmZmVyLCB0bXBCdWZmZXIs
IDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKLSAg
ICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRC
dWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFn
ZUVkZ2VFeHRlbmQpOwotICAgIFdURjo6ZmFzdEZyZWUodG1wQnVmZmVyKTsKLQotICAgIC8vIFRo
ZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAgICBBU1NFUlQo
aW9CdWZmZXIubGVuZ3RoKCkgPT0gdGVtcEJ1ZmZlci5sZW5ndGgoKSk7Ci0gICAgbWVtY3B5KGlv
QnVmZmVyLmRhdGEoKSwgdGVtcEJ1ZmZlci5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKLX0K
LSNlbmRpZgotCi1pbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVs
U2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNp
emUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgaW50
IGR4TGVmdCA9IDA7Ci0gICAgaW50IGR4UmlnaHQgPSAwOwotICAgIGludCBkeUxlZnQgPSAwOwot
ICAgIGludCBkeVJpZ2h0ID0gMDsKLSAgICAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZnJvbUJ1
ZmZlciA9ICZpb0J1ZmZlcjsKLSAgICBVaW50OENsYW1wZWRBcnJheSogdG9CdWZmZXIgPSAmdGVt
cEJ1ZmZlcjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGlm
IChrZXJuZWxTaXplWCkgewotICAgICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6
ZVgsIGR4TGVmdCwgZHhSaWdodCk7Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAg
ICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAgICAgICAgICAgYm94Qmx1ck5FT04o
KmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwg
c3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIs
IGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vsc2UKLSAgICAgICAg
ICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwg
ZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgp
LCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgotICAgICAgICAgICAgc3RkOjpzd2Fw
KGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChrZXJuZWxT
aXplWSkgewotICAgICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVksIGR5TGVm
dCwgZHlSaWdodCk7Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAg
aWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAgICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZm
ZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBw
YWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNp
emVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWlu
dFNpemUud2lkdGgoKSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJs
dXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwg
c3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCBpc0FscGhh
SW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgotICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZm
ZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBmaW5hbCByZXN1
bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAgICBpZiAoJmlvQnVmZmVyICE9IGZy
b21CdWZmZXIpIHsKLSAgICAgICAgQVNTRVJUKGlvQnVmZmVyLmxlbmd0aCgpID09IGZyb21CdWZm
ZXItPmxlbmd0aCgpKTsKLSAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgZnJvbUJ1ZmZl
ci0+ZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBG
RUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlv
QnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVs
U2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpCi17Ci0gICAg
aW50IHN0cmlkZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRF
KQotICAgIGlmIChrZXJuZWxTaXplWCA9PSBrZXJuZWxTaXplWSAmJiAobV9lZGdlTW9kZSA9PSBF
REdFTU9ERV9OT05FIHx8IG1fZWRnZU1vZGUgPT0gRURHRU1PREVfRFVQTElDQVRFKSkgewotICAg
ICAgICBhY2NlbGVyYXRlQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6
ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0YW5kYXJkQm94Qmx1cihpb0J1ZmZl
ciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50
U2l6ZSwgaXNBbHBoYUltYWdlKCksIG1fZWRnZU1vZGUpOwotfQotCi12b2lkIEZFR2F1c3NpYW5C
bHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0
ZXJzKQotewotICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFtZXRlcnMtPndpZHRoLCBwYXJhbWV0
ZXJzLT5oZWlnaHQpOwotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVy
aWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXks
IHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRT
aXplKTsKLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJh
eSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBw
YWludFNpemUpCitzdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkKIHsK
LSNpZiAhVVNFKEFDQ0VMRVJBVEUpCi0gICAgaW50IHNjYW5saW5lID0gNCAqIHBhaW50U2l6ZS53
aWR0aCgpOwotICAgIGludCBleHRyYUhlaWdodCA9IDMgKiBrZXJuZWxTaXplWSAqIDAuNWY7Ci0g
ICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNp
emUuaGVpZ2h0KCkpIC8gKHNfbWluaW1hbFJlY3REaW1lbnNpb24gKyBleHRyYUhlaWdodCAqIHBh
aW50U2l6ZS53aWR0aCgpKTsKLQotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewot
ICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxs
ZWxKb2JzKCZwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQotICAg
ICAgICBpbnQgam9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYg
KGpvYnMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gImJsb2NrSGVp
Z2h0Ii1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGln
aHRseSBsYXJnZXIgc2luY2UKLSAgICAgICAgICAgIC8vIGJsb2NrSGVpZ2h0ICogam9icyA8IHRv
dGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2Jz
V2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGNvbnN0IGludCBibG9ja0hlaWdodCA9IHBhaW50U2l6
ZS5oZWlnaHQoKSAvIGpvYnM7Ci0gICAgICAgICAgICBjb25zdCBpbnQgam9ic1dpdGhFeHRyYSA9
IHBhaW50U2l6ZS5oZWlnaHQoKSAlIGpvYnM7Ci0KLSAgICAgICAgICAgIGludCBjdXJyZW50WSA9
IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAwOyBqb2IgPCBqb2JzOyBqb2IrKykgewot
ICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxl
bEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRo
aXM7Ci0KLSAgICAgICAgICAgICAgICBpbnQgc3RhcnRZID0gIWpvYiA/IDAgOiBjdXJyZW50WSAt
IGV4dHJhSGVpZ2h0OwotICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRo
RXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdodDsKLSAgICAgICAgICAgICAgICBp
bnQgZW5kWSA9IGpvYiA9PSBqb2JzIC0gMSA/IGN1cnJlbnRZIDogY3VycmVudFkgKyBleHRyYUhl
aWdodDsKLQotICAgICAgICAgICAgICAgIGludCBibG9ja1NpemUgPSAoZW5kWSAtIHN0YXJ0WSkg
KiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBpZiAoIWpvYikgewotICAgICAgICAgICAgICAg
ICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gJmlvQnVmZmVyOwotICAgICAgICAgICAgICAgICAg
ICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9ICZ0bXBQaXhlbEFycmF5OwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSBVaW50
OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAgICAg
ICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVh
dGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweShw
YXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCksIGlvQnVmZmVyLmRhdGEoKSArIHN0YXJ0WSAqIHNj
YW5saW5lLCBibG9ja1NpemUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHBhcmFtcy53aWR0aCA9IHBhaW50U2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIHBhcmFt
cy5oZWlnaHQgPSBlbmRZIC0gc3RhcnRZOwotICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxT
aXplWCA9IGtlcm5lbFNpemVYOwotICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWSA9
IGtlcm5lbFNpemVZOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXJhbGxlbEpvYnMu
ZXhlY3V0ZSgpOwotCi0gICAgICAgICAgICAvLyBDb3B5IHRvZ2V0aGVyIHRoZSBwYXJ0cyBvZiB0
aGUgaW1hZ2UuCi0gICAgICAgICAgICBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGlu
dCBqb2IgPSAxOyBqb2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAgIFBsYXRmb3Jt
QXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0g
ICAgICAgICAgICAgICAgaW50IHNvdXJjZU9mZnNldDsKLSAgICAgICAgICAgICAgICBpbnQgZGVz
dGluYXRpb25PZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICAg
ICAgaW50IGFkanVzdGVkQmxvY2tIZWlnaHQgPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tI
ZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0KLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBh
ZGp1c3RlZEJsb2NrSGVpZ2h0OwotICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNldCA9IGV4dHJh
SGVpZ2h0ICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgZGVzdGluYXRpb25PZmZzZXQgPSBj
dXJyZW50WSAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAgIHNpemUgPSBhZGp1c3RlZEJsb2Nr
SGVpZ2h0ICogc2NhbmxpbmU7Ci0KLSAgICAgICAgICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0
YSgpICsgZGVzdGluYXRpb25PZmZzZXQsIHBhcmFtcy5pb1BpeGVsQXJyYXktPmRhdGEoKSArIHNv
dXJjZU9mZnNldCwgc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUuCi0g
ICAgfQotI2VuZGlmCi0KLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91
bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgotICAgIHBsYXRmb3JtQXBw
bHlHZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6
ZVksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIDMgLyA0LmYgKiBzcXJ0ZigyICogcGlGbG9hdCk7
CiB9CiAKIHN0YXRpYyBpbnQgY2xhbXBlZFRvS2VybmVsU2l6ZShmbG9hdCB2YWx1ZSkKIHsKICAg
ICAvLyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAwLiBBIGJpZ2dlciByYWRpdXMgd29uJ3Qg
bWFrZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0IGltYWdlIGJ1dAogICAgIC8vIGlu
ZmxhdGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRvbyBtdWNoLiBUaGlzIGlzIGNvbXBhdGli
bGUgd2l0aCBGaXJlZm94JyBiZWhhdmlvci4KKyAgICBzdGF0aWMgY29uc3QgaW50IGdNYXhLZXJu
ZWxTaXplID0gNTAwOwogICAgIHVuc2lnbmVkIHNpemUgPSBzdGQ6Om1heDx1bnNpZ25lZD4oMiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1ZSAqIGdhdXNzaWFuS2VybmVsRmFjdG9y
KCkgKyAwLjVmKSkpOwogICAgIHJldHVybiBjbGFtcFRvPGludD4oc3RkOjptaW4oc2l6ZSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGdNYXhLZXJuZWxTaXplKSkpOwogfQotICAgIAotSW50U2l6ZSBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGRE
ZXZpYXRpb24pCisKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2Vy
bmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKICAgICBBU1NFUlQoc3Rk
RGV2aWF0aW9uLndpZHRoKCkgPj0gMCAmJiBzdGREZXZpYXRpb24uaGVpZ2h0KCkgPj0gMCk7CiAg
ICAgSW50U2l6ZSBrZXJuZWxTaXplOwpAQCAtNDgzLDEyICs3MSwxMiBAQCBJbnRTaXplIEZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlh
dGlvbikKICAgICByZXR1cm4ga2VybmVsU2l6ZTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0
ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUo
Y29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7Ci0gICAgcmV0dXJuIGNhbGN1bGF0ZVVu
c2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHN0ZERldmlh
dGlvbikpOworICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0
aW9uIC8qZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzdGREZXZpYXRpb24pKi8pOwog
fQogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6
ZSBzdGREZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewogICAgIGF1dG8ga2VybmVsU2l6
ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGREZXZpYXRpb24pOwogCkBAIC00OTYs
NTYgKzg0LDIwIEBAIEludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUo
RmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0
aCgpIC8gMiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07CiB9CiAKLXZvaWQgRkVHYXVz
c2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zsb2F0UmVjdCBGRUdhdXNz
aWFuQmx1cjo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBJbnRTaXplIGtlcm5l
bFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9zdGRZIH0p
OwotCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFi
c29sdXRlUGFpbnRSZWN0KCk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBd
LT5kcmF3aW5nUmVjdCgpOwogICAgIC8vIEVkZ2UgbW9kZXMgb3RoZXIgdGhhbiAnbm9uZScgZG8g
bm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBhaW50IHJlY3QuCi0gICAgaWYgKG1fZWRnZU1vZGUg
IT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkKKyAgICAgICAgcmV0dXJuIGRyYXdp
bmdSZWN0OwogCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlw
bHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0g
ICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAu
NWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdo
dCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBhYnNvbHV0
ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0KLSAgICBzZXRBYnNv
bHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci19Ci0K
LXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEludFNpemUga2VybmVsU2l6ZSA9
IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKIAotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
LSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRh
dGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVk
UmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0
ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBrZXJuZWxTaXplLnNjYWxlKGZpbHRlcigp
LmZpbHRlclNjYWxlKCkpOwotCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUo
KSk7Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7Ci0gICAgaWYgKCF0bXBJbWFnZURh
dGEpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXpl
IGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJl
ZSB0aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgp
ICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0
KCkgKiAwLjVmKTsKIAotICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhlbEFycmF5LCAq
dG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBh
aW50U2l6ZSk7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERyYXdpbmdSZWN0KGlucHV0cywgZHJh
d2luZ1JlY3QpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29u
c3QKQEAgLTU1NCwxNCArMTA2LDIxIEBAIEludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNl
dHMoKSBjb25zdAogICAgIHJldHVybiB7IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUu
d2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpIH07CiB9CiAK
LVRleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitGaWx0
ZXJSZXN1bHQqIEZFR2F1c3NpYW5CbHVyOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmls
dGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAoreworICAgIEFTU0VS
VCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKKwor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUdhdXNzaWFuQmx1ciI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAg
ICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8
PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMp
OwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKaW5kZXggNWZi
OTdmZmIwNzBjMmRhZWI2ZWIyODNiZWFhYTE3NjQ3Y2JiMmQzZS4uOTRhMGY1M2QxOTk5ZWE4YWM2
NmE3NzQ1YzUxYTkzM2M0ZDE4ZWZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaApAQCAtMiw2ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1OSArMjMsNDAgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgotI2luY2x1ZGUg
IkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5CbHVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4gY3JlYXRlKEZpbHRlciYsIGZsb2F0
LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBj
cmVhdGUoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwogCiAgICAgZmxvYXQgc3RkRGV2aWF0
aW9uWCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9u
WChmbG9hdCk7CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHgpIHsgbV9zdGRYID0g
eDsgfQogCiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWTsg
fQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCk7CisgICAgdm9pZCBzZXRTdGREZXZp
YXRpb25ZKGZsb2F0IHkpIHsgbV9zdGRZID0geTsgfQogCiAgICAgRWRnZU1vZGVUeXBlIGVkZ2VN
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlTW9kZTsgfQotICAgIHZvaWQgc2V0RWRnZU1vZGUo
RWRnZU1vZGVUeXBlKTsKKyAgICB2b2lkIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdlTW9k
ZSkgeyBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7IH0KIAotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1
bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxvYXRTaXplIHN0ZERldmlhdGlvbik7Ci0g
ICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBz
dGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZU91dHNldFNpemUoRmxv
YXRTaXplIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlS2VybmVs
U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIEludFNpemUg
Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9u
KTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRzZXRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAgICBGRUdhdXNzaWFuQmx1cihGaWx0ZXIm
LCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CisgICAgRkVHYXVzc2lhbkJsdXIoZmxvYXQs
IGZsb2F0LCBFZGdlTW9kZVR5cGUpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7IH0KIAotICAgIHN0YXRpYyBjb25z
dCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRh
dGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFR2F1c3NpYW5CbHVyKiBmaWx0ZXI7Ci0gICAgICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OwotICAgICAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAg
ICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVg7Ci0gICAgICAg
IHVuc2lnbmVkIGtlcm5lbFNpemVZOwotICAgIH07Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1
bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
SW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91
dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3Jt
QXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtl
cm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwg
VWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNp
Z25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKKyAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVz
ZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9zdGRYOwogICAgIGZsb2F0
IG1fc3RkWTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGRmMTc2ZjhlMDcwYTQxOGMyMDg1MTgwOTBlZTdh
NmNhMTEzZTU2ZjUuLmVhZmE3ODY4YTZmYmY3ZTZhMmEyM2EwZjQzODgxYzc2YjIzN2EzY2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
VW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3pl
ZwotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ3MCArMjgsNzMgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24uaCIK
LSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0j
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZF
TGlnaHRpbmc6OkZFTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIExpZ2h0aW5nVHlwZSBsaWdodGlu
Z1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZs
b2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3Vs
YXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UsIFR5cGUgdHlwZSkKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xpZ2h0aW5nVHlwZShsaWdodGluZ1R5
cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGlnaHRTb3VyY2UpKQotICAgICwgbV9s
aWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKGNvbnN0
IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQs
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIHNvdXJjZSwgRmlsdGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKKyAgICA6IEZpbHRlckVmZmVj
dCh0eXBlKQorICAgICwgbV9jb2xvcihjb2xvcikKICAgICAsIG1fc3VyZmFjZVNjYWxlKHN1cmZh
Y2VTY2FsZSkKICAgICAsIG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCkKICAgICAs
IG1fc3BlY3VsYXJDb25zdGFudChzcGVjdWxhckNvbnN0YW50KQogICAgICwgbV9zcGVjdWxhckV4
cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKGtlcm5l
bFVuaXRMZW5ndGhYKQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0TGVuZ3Ro
WSkKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKIHsKIH0KIAotYm9vbCBGRUxpZ2h0
aW5nOjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQotewotICAgIGlmIChtX3N1
cmZhY2VTY2FsZSA9PSBzdXJmYWNlU2NhbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNjYWxlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29s
b3IpCitib29sIEZFTGlnaHRpbmc6OnNldENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBpZiAobV9saWdodGluZ0NvbG9yID09IGxpZ2h0aW5nQ29sb3IpCisgICAgaWYgKG1fY29sb3Ig
PT0gY29sb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fbGlnaHRpbmdDb2xvciA9
IGxpZ2h0aW5nQ29sb3I7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdodGluZzo6
c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQga2VybmVsVW5pdExlbmd0aFgpCi17Ci0gICAgaWYg
KG1fa2VybmVsVW5pdExlbmd0aFggPT0ga2VybmVsVW5pdExlbmd0aFgpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVu
Z3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKLXsKLSAgICBpZiAobV9rZXJuZWxVbml0TGVu
Z3RoWSA9PSBrZXJuZWxVbml0TGVuZ3RoWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
bV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5lbFVuaXRMZW5ndGhZOworICAgIG1fY29sb3IgPSBj
b2xvcjsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGNvbnN0ZXhwciBpbnQgY1BpeGVs
U2l6ZSA9IDQ7Ci1zdGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsK
LXN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0aWNfY2FzdDx1aW50
OF90PigweEZGKTsKLQotLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1hbCBjb2VmZmljaWVu
dHMgY29tZSBmcm9tIHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Zp
bHRlcnMuaHRtbCNmZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCi1zdGF0aWMgY29uc3RleHByIGZs
b2F0IGNGYWN0b3IxZGl2MiA9IC0xIC8gMi5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFj
dG9yMWRpdjMgPSAtMSAvIDMuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXY0
ID0gLTEgLyA0LmY7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IyZGl2MyA9IC0yIC8g
My5mOwotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcExlZnRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAqIGNlbnRlciAr
IDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtMiAqIGNlbnRlciAt
IHJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIElu
dFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkg
Y29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRl
ciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAr
PSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICogbGVmdCArIDIg
KiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAgICAgLWxlZnQgLSAyICog
Y2VudGVyIC0gcmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0g
ICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BS
aWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSB3aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAqIGxlZnQg
KyAyICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAgLWxlZnQgLSAyICog
Y2VudGVyICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQotCi1pbmxpbmUgSW50
U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNl
dCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwot
ICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBi
b3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICByZXR1cm4gewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJp
Z2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQg
KyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhh
V2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKLXsKLSAgICBpbnQgcmlnaHRBbHBoYU9mZnNldCA9
IG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0OwotICAgIAotICAgIGlu
dCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQp
KTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdo
dEFscGhhT2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKLSAgICBpbnQgYm90
dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0
ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKLQotICAgIGludCBsZWZ0ID0gYWxwaGFX
aW5kb3cubGVmdCgpOwotICAgIGludCB0b3BMZWZ0ID0gYWxwaGFXaW5kb3cudG9wTGVmdCgpOwot
ICAgIGludCB0b3AgPSBhbHBoYVdpbmRvdy50b3AoKTsKLQotICAgIGludCBib3R0b21MZWZ0ID0g
YWxwaGFXaW5kb3cuYm90dG9tTGVmdCgpOwotICAgIGludCBib3R0b20gPSBhbHBoYVdpbmRvdy5i
b3R0b20oKTsKLQotICAgIC8vIFRoZSBhbHBoYVdpbmRvdyBoYXMgYmVlbiBzaGlmdGVkLCBhbmQg
aGVyZSB3ZSBmaWxsIGluIHRoZSByaWdodCBjb2x1bW4uCi0gICAgYWxwaGFXaW5kb3cuYWxwaGFb
MF1bMl0gPSB0b3BSaWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsxXVsyXSA9IHJpZ2h0Owot
ICAgIGFscGhhV2luZG93LmFscGhhWzJdWzJdID0gYm90dG9tUmlnaHQ7Ci0gICAgCi0gICAgLy8g
Q2hlY2sgdGhhdCB0aGUgYWxwaGFXaW5kb3cgaXMgd29ya2luZyB3aXRoIHNvbWUgc3BvdC1jaGVj
a3MuCi0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcExlZnQoKSA9PSBwaXhlbHMtPml0ZW0ob2Zm
c2V0IC0gY1BpeGVsU2l6ZSAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOyAvLyB0b3BMZWZ0Ci0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcCgpID09
IHBpeGVscy0+aXRlbShvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wCi0KLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVm
dCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9t
UmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgYm90dG9tTGVm
dCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXpl
IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkg
Y29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRl
ciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAg
aW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
b2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9t
TGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1
cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJv
dHRvbUxlZnQgKyBib3R0b20sCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCArIGJvdHRvbUxl
ZnQgKyAyICogYm90dG9tCi0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
IG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAg
ICAgICAgLXRvcCArIHRvcFJpZ2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdodCwKLSAgICAgICAg
LTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBjZW50ZXIgKyByaWdodAotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0Citib29sIEZFTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZShmbG9hdCBz
dXJmYWNlU2NhbGUpCiB7Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBv
ZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcFJp
Z2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAt
IHRvcFJpZ2h0ICsgbGVmdCArIDIgKiBjZW50ZXIgKyByaWdodAotICAgIH07CisgICAgcmV0dXJu
IHN0ZDo6ZXhjaGFuZ2UobV9zdXJmYWNlU2NhbGUsIHN1cmZhY2VTY2FsZSkgIT0gbV9zdXJmYWNl
U2NhbGU7CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90
dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2Jvb2wgRkVMaWdodGluZzo6c2V0RGlm
ZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKIHsKLSAgICBpbnQgbGVmdCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQg
KyB0b3AgLSAyICogbGVmdCArIDIgKiBjZW50ZXIsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRv
cCArIGxlZnQgKyAyICogY2VudGVyCi0gICAgfTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZSht
X2RpZmZ1c2VDb25zdGFudCwgZGlmZnVzZUNvbnN0YW50KSAhPSBtX2RpZmZ1c2VDb25zdGFudDsK
IH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5v
cm1hbDJEVmVjdG9yKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0
IHNwZWN1bGFyQ29uc3RhbnQpCiB7Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEs
IHBhaW50aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0b3IsIGRh
dGEucGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1
cm4gc3RkOjpleGNoYW5nZShtX3NwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyQ29uc3RhbnQpICE9
IHNwZWN1bGFyQ29uc3RhbnQ7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5h
bChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNl
OjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JY
LCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSkKK2Jv
b2wgRkVMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCBzcGVjdWxhckV4cG9uZW50
KQogewotICAgIGZsb2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOwotICAgIExpZ2h0
U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBtX2xpZ2h0U291cmNl
LT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKLQotICAg
IGZsb2F0IGxpZ2h0U3RyZW5ndGg7Ci0gICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygpKSB7
Ci0gICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUg
ZnJlcXVlbnQgY2FzZS4KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6
OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VD
b25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3JMZW5ndGg7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNE
IGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVj
dG9yLngoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAot
ICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0Rh
dGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBo
YWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAg
IGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVu
Z3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVj
dG9yTGVuZ3RoOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5n
dGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndh
eVZlY3Rvckxlbmd0aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0gICAgICAgICAgICBm
YWN0b3JYICogbm9ybWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAg
ICAgICAgICAgZmFjdG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICogZGF0YS5zdXJmYWNl
U2NhbGUsCi0gICAgICAgICAgICAxLjBmCi0gICAgICAgIH07Ci0gICAgICAgIGZsb2F0IG5vcm1h
bFZlY3Rvckxlbmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKLQotICAgICAgICBpZiAobV9s
aWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAg
bGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGxpZ2h0
aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogbGlnaHRpbmdEYXRh
LmxpZ2h0VmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9hdFBv
aW50M0QgaGFsZndheVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3IueCgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci55
KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0
aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGZs
b2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAg
ICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0
U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZl
Y3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJD
b25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZl
Y3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25lbnQpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxKQotICAgICAgICBs
aWdodFN0cmVuZ3RoID0gMTsKLSAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDApCi0gICAgICAgIGxp
Z2h0U3RyZW5ndGggPSAwOwotCi0gICAgdWludDhfdCBwaXhlbFZhbHVlWzNdID0gewotICAgICAg
ICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9y
VmVjdG9yLngoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0
U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueSgpICogMjU1LjBmKSwKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xv
clZlY3Rvci56KCkgKiAyNTUuMGYpCi0gICAgfTsKLSAgICAKLSAgICBkYXRhLnBpeGVscy0+c2V0
UmFuZ2UocGl4ZWxWYWx1ZSwgMywgb2Zmc2V0KTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZSht
X3NwZWN1bGFyRXhwb25lbnQsIHNwZWN1bGFyRXhwb25lbnQpICE9IG1fc3BlY3VsYXJFeHBvbmVu
dDsKIH0KIAotLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHNh
bWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEgY2hhbm5lbCwgYW5k
IHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5uZWxzLgotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkK
LXsKLSAgICAvLyBNYWtlIHN1cmUgc3RhcnRZIGlzID4gMCBzaW5jZSB3ZSByZWFkIGZyb20gdGhl
IHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4KLSAgICBBU1NFUlQoc3RhcnRZKTsKLSAgICBBU1NF
UlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsg
Kyt5KSB7Ci0gICAgICAgIGludCByb3dTdGFydE9mZnNldCA9IHkgKiBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQgcHJldmlvdXNSb3dTdGFydCA9IHJvd1N0YXJ0
T2Zmc2V0IC0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IG5l
eHRSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0ICsgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKLQotICAgICAgICAvLyBhbHBoYVdpbmRvdyBpcyBhIGxvY2FsIGNhY2hlIG9mIGFscGhh
IHZhbHVlcy4KLSAgICAgICAgLy8gRmlsbCB0aGUgdHdvIHJpZ2h0IGNvbHVtbnMgcHV0dGluZyB0
aGUgbGVmdCBlZGdlIHZhbHVlIGluIHRoZSBjZW50ZXIgY29sdW1uLgotICAgICAgICAvLyBGb3Ig
ZWFjaCBwaXhlbCwgd2Ugc2hpZnQgZWFjaCByb3cgbGVmdCB0aGVuIGZpbGwgdGhlIHJpZ2h0IGNv
bHVtbi4KLSAgICAgICAgQWxwaGFXaW5kb3cgYWxwaGFXaW5kb3c7Ci0gICAgICAgIGFscGhhV2lu
ZG93LnNldFRvcChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3BSaWdodChkYXRhLnBpeGVs
cy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRDZW50ZXIoZGF0YS5waXhlbHMtPml0ZW0o
cm93U3RhcnRPZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgICAgIGFscGhhV2lu
ZG93LnNldFJpZ2h0KGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0
b20oZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b21SaWdodChkYXRhLnBpeGVscy0+aXRlbShu
ZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotCi0gICAg
ICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9mZnNldCArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZv
ciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCAr
PSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBhbHBoYVdpbmRvdy5zaGlmdCgpOwotICAgICAg
ICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwg
Y0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JOb3JtYWwob2Zmc2V0LCBh
bHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNlbnRlcigpKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0Zm9ybUFw
cGx5R2VuZXJpY1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCitib29sIEZFTGlnaHRpbmc6OnNldEtl
cm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKQogewotICAgIHBhcmFtZXRl
cnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBw
YXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+
eUVuZCk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rZXJuZWxVbml0TGVuZ3RoWCwga2Vy
bmVsVW5pdExlbmd0aFgpICE9IG1fa2VybmVsVW5pdExlbmd0aFg7CiB9CiAKLXZvaWQgRkVMaWdo
dGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25z
dCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgdW5zaWdu
ZWQgcm93c1RvUHJvY2VzcyA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgLSAxOwotICAgIHVu
c2lnbmVkIG1heE51bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsKLSAgICB1bnNpZ25lZCBv
cHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aERlY3Jl
YXNlZEJ5T25lIC0gMSkgKiByb3dzVG9Qcm9jZXNzKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24s
IG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAg
ICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpv
YnM8UGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3Jt
QXBwbHlHZW5lcmljV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQotICAgICAgICAvLyBG
aWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgaW50IGpvYiA9IHBhcmFsbGVsSm9icy5u
dW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKGpvYiA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNw
bGl0IHRoZSBqb2IgaW50byAieVN0ZXAiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMg
dGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQotICAgICAgICAgICAgLy8geVN0
ZXAgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSBy
ZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgotICAgICAgICAgICAgY29uc3QgaW50IHlTdGVwID0g
cm93c1RvUHJvY2VzcyAvIGpvYjsKLSAgICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4dHJh
ID0gcm93c1RvUHJvY2VzcyAlIGpvYjsKLQotICAgICAgICAgICAgaW50IHlTdGFydCA9IDE7Ci0g
ICAgICAgICAgICBmb3IgKC0tam9iOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAg
ICBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5w
YXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAg
ICAgICAgICAgICAgICBwYXJhbXMuZGF0YSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1z
LnBhaW50aW5nRGF0YSA9IHBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMueVN0
YXJ0ID0geVN0YXJ0OwotICAgICAgICAgICAgICAgIHlTdGFydCArPSBqb2IgPCBqb2JzV2l0aEV4
dHJhID8geVN0ZXAgKyAxIDogeVN0ZXA7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnlFbmQgPSB5
U3RhcnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRv
IHNpbmdsZSB0aHJlYWRlZCBtb2RlLgotICAgIH0KLQotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFpbnQoZGF0YSwgcGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lKTsK
LX0KLQotaW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseShjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSkKK2Jvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5p
dExlbmd0aFkpCiB7Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxk
IGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSNpZiBDUFUoQVJNX05FT04p
ICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdDQ19DT01QQVRJQkxFKQotICAg
IHBsYXRmb3JtQXBwbHlOZW9uKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0jZWxzZQotICAgIHBsYXRm
b3JtQXBwbHlHZW5lcmljKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0jZW5kaWYKKyAgICByZXR1cm4g
c3RkOjpleGNoYW5nZShtX2tlcm5lbFVuaXRMZW5ndGhZLCBrZXJuZWxVbml0TGVuZ3RoWSkgIT0g
bV9rZXJuZWxVbml0TGVuZ3RoWTsKIH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmco
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorRmxvYXRS
ZWN0IEZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgTGlnaHRpbmdEYXRhIGRhdGE7
Ci0KLSAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90
aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBj
YXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCi0gICAgaWYgKHdpZHRoIDw9IDIgfHwg
aGVpZ2h0IDw9IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRhdGEucGl4ZWxzID0g
JnBpeGVsczsKLSAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1LjBm
OwotICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSB3aWR0aCAqIGNQaXhlbFNp
emU7Ci0gICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gd2lkdGggLSAxOwotICAgIGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOwotCi0gICAgYXV0byBbciwgZywgYiwg
YV0gPSBtX2xpZ2h0aW5nQ29sb3IudG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2Uob3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5j
b2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKLQotICAgIG1fbGlnaHRTb3VyY2Ut
PmluaXRQYWludGluZ0RhdGEoKnRoaXMsIHBhaW50aW5nRGF0YSk7Ci0KLSAgICAvLyBUb3AgbGVm
dC4KLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgMCwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9wTGVmdE5v
cm1hbChvZmZzZXQpKTsKLQotICAgIC8vIFRvcCByaWdodC4KLSAgICBvZmZzZXQgPSBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChvZmZz
ZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCAwLCBjRmFj
dG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BSaWdodE5vcm1hbChvZmZzZXQpKTsKLQot
ICAgIC8vIEJvdHRvbSBsZWZ0LgotICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlP
bmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFj
dG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21MZWZ0Tm9ybWFsKG9mZnNldCkpOwot
Ci0gICAgLy8gQm90dG9tIHJpZ2h0LgotICAgIG9mZnNldCA9IGhlaWdodCAqIGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwg
ZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbVJp
Z2h0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgaWYgKHdpZHRoID49IDMpIHsKLSAgICAgICAgLy8g
VG9wIHJvdy4KLSAgICAgICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQg
eCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhl
bFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwg
eCwgMCwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEudG9wUm93Tm9ybWFsKG9mZnNl
dCkpOwotCi0gICAgICAgIC8vIEJvdHRvbSByb3cuCi0gICAgICAgIG9mZnNldCA9IGRhdGEuaGVp
Z2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1Bp
eGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwg
Y0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEuYm90dG9tUm93Tm9ybWFsKG9mZnNldCkp
OwotICAgIH0KLQotICAgIGlmIChoZWlnaHQgPj0gMykgewotICAgICAgICAvLyBMZWZ0IGNvbHVt
bi4KLSAgICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAg
ICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ks
IG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAg
c2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIHksIGNGYWN0b3IxZGl2Miwg
Y0ZhY3RvcjFkaXYzLCBkYXRhLmxlZnRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAgICAg
Ly8gUmlnaHQgY29sdW1uLgotICAgICAgICBvZmZzZXQgPSAyICogZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwg
ZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFp
bnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIHksIGNGYWN0b3IxZGl2MiwgY0Zh
Y3RvcjFkaXYzLCBkYXRhLnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOwotICAgIH0KLQotICAg
IGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAzKSB7Ci0gICAgICAgIC8vIEludGVyaW9yIHBp
eGVscy4KLSAgICAgICAgcGxhdGZvcm1BcHBseShkYXRhLCBwYWludGluZ0RhdGEpOwotICAgIH0K
LQotICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICog
aGVpZ2h0OwotICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IGNBbHBoYUNoYW5uZWxPZmZzZXQ7IGkgPCBsYXN0UGl4ZWw7IGkg
Kz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSwgY09wYXF1ZUFs
cGhhKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxhc3RQaXhl
bDsgaSArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICB1aW50OF90IGExID0gZGF0YS5waXhl
bHMtPml0ZW0oaSk7Ci0gICAgICAgICAgICB1aW50OF90IGEyID0gZGF0YS5waXhlbHMtPml0ZW0o
aSArIDEpOwotICAgICAgICAgICAgdWludDhfdCBhMyA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAy
KTsKLSAgICAgICAgICAgIC8vIGFscGhhIHNldCB0byBzZXQgdG8gbWF4KGExLCBhMiwgYTMpCi0g
ICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGkgKyAzLCBhMSA+PSBhMiA/IChhMSA+PSBhMyA/
IGExIDogYTMpIDogKGEyID49IGEzID8gYTIgOiBhMykpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heFByaW1pdGl2ZVN1YnJlZ2lv
bihpbnB1dHMpOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
CitGaWx0ZXJSZXN1bHQqIEZFTGlnaHRpbmc6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICgh
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0g
ICAgc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7
CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRp
b25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
LSAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEp
LiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwotICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0
ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMg
c3RyYW5nZQotICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3RocywgYW5k
IEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCi0gICAgLy8gQW55d2F5LCBmZUNvbnZv
bHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXV0
byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1
cm4gcmVzdWx0OwogCi0gICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpOwotICAgIGRyYXdMaWdodGluZyhkZXN0aW5hdGlvblBpeGVsQXJyYXks
IGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRTaXplLmhlaWdodCgpKTsK
KyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5kZXggN2ZiNTYwOWRiYjU3Yjc2MjAx
ZjMzMDMzNzA1MmU0MWFjMjUwM2NmOS4uYWU2NmM0YjJmNjVlN2VlNmJmMDUyZjFkNmY1YTJmNzYz
YjdiMDA2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFu
IEhlcmN6ZWcKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywyNiArMjgsMjcg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0KLS8vIENvbW1v
biBiYXNlIGNsYXNzIGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5n
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZFTGlnaHRpbmdQYWludGluZ0RhdGFG
b3JOZW9uOwotCiBjbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJs
aWM6Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQor
ICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBi
b29sIHNldENvbG9yKGNvbnN0IENvbG9yJik7CiAKICAgICBmbG9hdCBzdXJmYWNlU2NhbGUoKSBj
b25zdCB7IHJldHVybiBtX3N1cmZhY2VTY2FsZTsgfQogICAgIGJvb2wgc2V0U3VyZmFjZVNjYWxl
KGZsb2F0KTsKIAotICAgIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9saWdodGluZ0NvbG9yOyB9Ci0gICAgYm9vbCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENv
bG9yJik7CisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9kaWZm
dXNlQ29uc3RhbnQ7IH0KKyAgICBib29sIHNldERpZmZ1c2VDb25zdGFudChmbG9hdCk7CisKKyAg
ICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckNvbnN0
YW50OyB9CisgICAgYm9vbCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0KTsKKworICAgIGZsb2F0
IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0K
KyAgICBib29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpOwogCiAgICAgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhYOyB9CiAgICAg
Ym9vbCBzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCk7CkBAIC01NCwxMTUgKzU2LDI1IEBAIHB1
YmxpYzoKICAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0IHsgcmV0dXJuIG1fa2Vy
bmVsVW5pdExlbmd0aFk7IH0KICAgICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0KTsK
IAotICAgIGNvbnN0IExpZ2h0U291cmNlJiBsaWdodFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGlnaHRTb3VyY2UuZ2V0KCk7IH0KKyAgICBjb25zdCBMaWdodFNvdXJjZSYgc291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBj
b25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2Fs
IGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIGVudW0gTGlnaHRpbmdUeXBlIHsK
LSAgICAgICAgRGlmZnVzZUxpZ2h0aW5nLAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nCi0gICAg
fTsKLSAgICAKLSAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cgewotICAgICAgICB1aW50OF90IGFscGhh
WzNdWzNdIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJl
IGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgotICAgICAgICB1aW50
OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsgfQot
ICAgICAgICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBo
YVsxXVswXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7
IHJldHVybiBhbHBoYVsyXVswXTsgfQotCi0gICAgICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAg
ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgY2Vu
dGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzFdOyB9Ci0gICAgICAg
IHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFd
OyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1ZSkgICAgICAgICAgeyBhbHBo
YVswXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUp
ICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldEJvdHRvbSh1
aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFsdWU7IH0KLQotICAgICAgICB2
b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFsdWU7
IH0KLSAgICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90IHZhbHVlKSAgICAgICAgeyBhbHBoYVsx
XVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhfdCB2YWx1
ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQotCi0gICAgICAgIHN0YXRpYyB2b2lkIHNoaWZ0
Um93KHVpbnQ4X3QgYWxwaGFbM10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFscGhhWzBdID0g
YWxwaGFbMV07Ci0gICAgICAgICAgICBhbHBoYVsxXSA9IGFscGhhWzJdOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hp
ZnRSb3coYWxwaGFbMF0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOwotICAgICAg
ICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0cnVj
dCBMaWdodGluZ0RhdGEgewotICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5
IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBp
eGVsczsKLSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOwotICAgICAgICBpbnQgd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOwotICAg
ICAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7Ci0KLSAgICAgICAgaW5saW5lIEludFNpemUg
dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUg
dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0
b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUg
bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNp
emUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKLSAgICAg
ICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0g
ICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkg
Y29uc3Q7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5k
IGNsYXNzIFBhcmFsbGVsSm9iczsKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
cmFtZXRlcnMgewotICAgICAgICBGRUxpZ2h0aW5nKiBmaWx0ZXI7Ci0gICAgICAgIExpZ2h0aW5n
RGF0YSBkYXRhOwotICAgICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0
YTsKLSAgICAgICAgaW50IHlTdGFydDsKLSAgICAgICAgaW50IHlFbmQ7Ci0gICAgfTsKLQotICAg
IHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBwbHlHZW5l
cmljUGFyYW1ldGVycyopOwotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uV29ya2Vy
KEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uKik7Ci0KLSAgICBGRUxpZ2h0aW5nKEZpbHRl
ciYsIExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwotCi0gICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUxpZ2h0aW5nIjsgfQot
Ci0gICAgYm9vbCBkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmLCBpbnQsIGludCk7Ci0K
LSAgICB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0
IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3Rvclgs
IGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yKTsKLSAgICB2b2lkIHNldFBpeGVs
SW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3Vy
Y2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFj
dG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IsIGZsb2F0IGFscGhhKTsKLQotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHko
Y29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRYLCBpbnQgc3RhcnRZ
KTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNv
bnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotI2lmIENQVShBUk1fTkVPTikgJiYg
Q1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElCTEUpCi0gICAgc3Rh
dGljIGludCBnZXRQb3dlckNvZWZmaWNpZW50cyhmbG9hdCBleHBvbmVudCk7Ci0gICAgaW5saW5l
IHZvaWQgcGxhdGZvcm1BcHBseU5lb24oY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYpOwotI2VuZGlmCi0KLSAgICBMaWdodGluZ1R5cGUgbV9saWdo
dGluZ1R5cGU7Ci0gICAgUmVmPExpZ2h0U291cmNlPiBtX2xpZ2h0U291cmNlOwotCi0gICAgQ29s
b3IgbV9saWdodGluZ0NvbG9yOworICAgIEZFTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCBz
dXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYsIEZpbHRlckZ1bmN0aW9uOjpU
eXBlKTsKKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKworICAg
IEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJv
b2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKKworICAg
IENvbG9yIG1fY29sb3I7CiAgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7CiAgICAgZmxvYXQgbV9k
aWZmdXNlQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckNvbnN0YW50OwogICAgIGZsb2F0
IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwogICAg
IGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7CisgICAgUmVmPExpZ2h0U291cmNlPiBtX3NvdXJj
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMGEyMDAwMWIx
NzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uY2UxYzE2ZWI1ZDk4NzVjODBkZTFkNWQz
YTE3NmI2ZDQ4NGQ1MGM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1MSArMjMsNDkgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKKyNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUZFTWVyZ2U6OkZFTWVyZ2UoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZl
Y3QoZmlsdGVyLCBUeXBlOjpNZXJnZSkKK1JlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUodW5z
aWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVNZXJnZShudW1iZXJPZkVmZmVjdElucHV0cykpOwogfQogCi1SZWY8RkVNZXJnZT4gRkVNZXJn
ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVNZXJnZTo6RkVNZXJnZSh1bnNpZ25lZCBudW1i
ZXJPZkVmZmVjdElucHV0cykKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU1lcmdlKQorICAg
ICwgbV9udW1iZXJPZkVmZmVjdElucHV0cyhudW1iZXJPZkVmZmVjdElucHV0cykKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1lcmdlKGZpbHRlcikpOworICAgIEFTU0VSVChtX251bWJl
ck9mRWZmZWN0SW5wdXRzKTsKIH0KIAotdm9pZCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQorY29uc3QgQXRvbVN0cmluZyYgRkVNZXJnZTo6ZWZmZWN0TmFtZSgpCiB7Ci0gICAgdW5z
aWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNTRVJUKHNpemUgPiAw
KTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IHNfZWZmZWN0TmFtZSgiRkVNZXJnZSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKKyAgICByZXR1cm4gc19lZmZlY3ROYW1lOworfQorCitGaWx0ZXJSZXN1bHQqIEZFTWVyZ2U6
OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJ
bWFnZUJ1ZmZlciopIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA9PSBtX251bWJl
ck9mRWZmZWN0SW5wdXRzKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0
ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0
dXJuOworICAgIFZlY3RvcjxSZWY8RmlsdGVyUmVzdWx0Pj4gaW5wdXRzOworICAgIGZvciAoYXV0
byBpbnB1dHNTaXplID0gbV9udW1iZXJPZkVmZmVjdElucHV0czsgaW5wdXRzU2l6ZS0tOyApCisg
ICAgICAgIGlucHV0cy5hcHBlbmQoc3RhY2sudGFrZUxhc3QoKSk7CiAKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsKLSAgICAgICAgaWYg
KEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpKQotICAgICAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgfQorICAgIHJl
dHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgaW5wdXRzLCBudWxscHRyKTsKIH0KIAotVGV4dFN0
cmVhbSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVw
cmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVNZXJn
ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVNZXJnZSI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0g
ICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNTRVJUKHNp
emUgPiAwKTsKLSAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IHNpemUgPDwgIlwiXVxuIjsK
LQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBpbnB1dEVmZmVjdChpKS0+
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHRzIDw8ICIg
bWVyZ2VOb2Rlcz1cIiIgPDwgbV9udW1iZXJPZkVmZmVjdElucHV0cyA8PCAiXCJdXG4iOwogICAg
IHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRleCA1Y2ZjNWNiNzk4MTljZWNlZDUwNzNlNTdiMDE5NGVi
Y2YxOGYyNjA3Li5mM2Y0NWMzNjhhM2FhMzFmMzg1ZDYyYzA4NDJjNjNlNjdiNWU5NGU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjgsMTYgKzI5LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVNZXJnZSA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVNZXJnZT4gY3Jl
YXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVNZXJnZT4gY3JlYXRlKHVuc2lnbmVkIG1f
bnVtYmVyT2ZFZmZlY3RJbnB1dHMpOworCisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVm
ZmVjdE5hbWUoKTsKIAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKEZpbHRlciYpOworICAgIEZFTWVy
Z2UodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogCiAgICAgY29uc3QgY2hhciogZmls
dGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1lcmdlIjsgfQogCi0gICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5
KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
RmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBl
KSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJy
aWRlOworICAgIAorICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHM7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggOGE3ZTViNjY3YWI3
NzNiOTBiODkwZTM4Mzg2MzkzNTYyYjlkOGRmNS4uYzRkZDIwYzBjMDUwNTg1OWRjMDFiODZiMjIz
YTBiZmQwMjdiZmE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtNCw3ICs0LDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTctMjAxOCBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTctMjAyMSBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwyNjUgKzI1LDYyIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNb3JwaG9sb2d5LmgiCiAKLSNpbmNsdWRlICJDb2xv
ckNvbXBvbmVudHMuaCIKLSNpbmNsdWRlICJDb2xvclR5cGVzLmgiCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2Jz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5
KEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpNb3Jw
aG9sb2d5KQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKLSAg
ICAsIG1fcmFkaXVzWShyYWRpdXNZKQorUmVmPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5Ojpj
cmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVz
WCwgZmxvYXQgcmFkaXVzWSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1vcnBob2xv
Z3kobW9ycGhvbG9neU9wZXJhdG9yLCByYWRpdXNYLCByYWRpdXNZKSk7CiB9CiAKLVJlZjxGRU1v
cnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCitGRU1vcnBo
b2xvZ3k6OkZFTW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9y
LCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6
OkZFTW9ycGhvbG9neSkKKyAgICAsIG1fbW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVy
YXRvcikKKyAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQorICAgICwgbV9yYWRpdXNZKHJhZGl1c1kp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwg
cmFkaXVzWCwgcmFkaXVzWSkpOwogfQogCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9n
eU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK2Jvb2wgRkVNb3JwaG9sb2d5
OjpzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVy
YXRvcikKIHsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fbW9ycGhvbG9neU9wZXJhdG9yLCBtb3JwaG9sb2d5T3BlcmF0b3IpICE9IG1vcnBo
b2xvZ3lPcGVyYXRvcjsKIH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1goZmxvYXQg
cmFkaXVzWCkKIHsKLSAgICBpZiAobV9yYWRpdXNYID09IHJhZGl1c1gpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX3JhZGl1c1ggPSByYWRpdXNYOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fcmFkaXVzWCwgcmFkaXVzWCkgIT0gbV9yYWRpdXNYOwog
fQogCiBib29sIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKQogewotICAg
IGlmIChtX3JhZGl1c1kgPT0gcmFkaXVzWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
cmFkaXVzWSA9IHJhZGl1c1k7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVNb3JwaG9s
b2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0IHBhaW50
UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUoZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKLSAgICBp
ZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVj
dFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVj
dCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVj
dCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5
LCBpbnQgd2lkdGgpCi17Ci0gICAgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7Ci19Ci0KLWlu
bGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21Q
aXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKQotewotICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7Ci19Ci0KLWlubGluZSBQYWNrZWRDb2xvcjo6UkdC
QSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+JiBjb21wb25lbnRzKQotewotICAgIHJldHVybiBQYWNrZWRDb2xvcjo6UkdC
QSB7IG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsKLX0K
LQotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIpCi17
Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICBy
ZXR1cm4gcGVyQ29tcG9uZW50TWluKGEsIGIpOwotCi0gICAgcmV0dXJuIHBlckNvbXBvbmVudE1h
eChhLCBiKTsKLX0KLQotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxX
QVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBp
bnQgeUVuZCwgaW50IHdpZHRoKQotewotICAgIGF1dG8gZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21w
b25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4
KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKLQotICAgIGZvciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5
IDwgeUVuZDsgKyt5KSB7Ci0gICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JDb21wb25lbnRz
ZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHks
IHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVtdW0s
IHBpeGVsKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4dHJlbXVtOwotfQotCi1BTFdBWVNfSU5MSU5F
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBp
bnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9
PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBjb2x1bW5FeHRy
ZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFy
dCwgeUVuZCwgd2lkdGgpOwotCi0gICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9ESUxBVEU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgp
OwotfQotCi11c2luZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiwgMTY+OwotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1B
TFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShj
b25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IGtlcm5l
bFswXTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKLSAg
ICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwga2VybmVsW2ldKTsKLQot
ICAgIHJldHVybiBleHRyZW11bTsKLX0KLQotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9M
T0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQ
SE9MT0dZX09QRVJBVE9SX0VST0RFPihrZXJuZWwpOwotCi0gICAgcmV0dXJuIGtlcm5lbEV4dHJl
bXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KGtlcm5lbCk7Ci19Ci0KLXZvaWQgRkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFy
dFkpOwotCi0gICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuc3Jj
UGl4ZWxBcnJheTsKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQ
aXhlbEFycmF5OwotCi0gICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVz
WDsKLSAgICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOwotICAgIGNv
bnN0IGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICBjb25zdCBpbnQgaGVpZ2h0
ID0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLQotICAgIEFTU0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8
IHJhZGl1c1kgPD0gaGVpZ2h0KTsKLSAgICBBU1NFUlQoc3RhcnRZID49IDAgJiYgZW5kWSA8PSBo
ZWlnaHQgJiYgc3RhcnRZIDwgZW5kWSk7Ci0KLSAgICBDb2x1bW5FeHRyZW1hIGV4dHJlbWE7Ci0g
ICAgZXh0cmVtYS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRpdXNYICsgMSk7Ci0KLSAg
ICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCB5UmFk
aXVzU3RhcnQgPSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7Ci0gICAgICAgIGludCB5UmFkaXVz
RW5kID0gc3RkOjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOwotCi0gICAgICAgIGV4dHJl
bWEuc2hyaW5rKDApOwotCi0gICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNv
IGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRyZW1hLmFwcGVuZChj
b2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQs
IHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0
cmVtYSBvZiBuZXh0IGNvbHVtbgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyAr
K3gpIHsKLSAgICAgICAgICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAg
ICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRp
dXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAg
ICAgICAgaWYgKHggPiByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDAp
OwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdp
ZHRoKSk7Ci0gICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JD
b21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkpLnZhbHVlOwotICAgICAg
ICB9Ci0gICAgfQorICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fcmFkaXVzWSwgcmFkaXVzWSkg
IT0gbV9yYWRpdXNZOwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtl
cihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW0pCitGbG9hdFJlY3QgRkVNb3JwaG9sb2d5
OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRm
b3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJh
bS0+ZW5kWSk7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOworICAgIGRyYXdpbmdSZWN0
LmluZmxhdGUoeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KTsKKyAgICByZXR1cm4gZ2VvbWV0cnku
bWF4RHJhd2luZ1JlY3QoaW5wdXRzLCBkcmF3aW5nUmVjdCk7CiB9CiAKLXZvaWQgRkVNb3JwaG9s
b2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorRmls
dGVyUmVzdWx0KiBGRU1vcnBob2xvZ3k6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgLy8gRW1w
aXJpY2FsbHksIHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFzb25hYmxl
IGtlcm5lbCBzaXplcyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9hdCBrZXJu
ZWxGYWN0b3IgPSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRhLnJhZGl1
c1kpICogMC42NTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9
IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxBcmVhID0g
KDE2MCAqIDE2MCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0g
ICAgCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4
OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4o
KHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3Ip
IC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVt
YmVyID4gMSkgewotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1l
dGVycz4gcGFyYWxsZWxKb2JzKCZXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlX
b3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotICAgICAgICBhdXRvIG51bU9mVGhyZWFkcyA9
IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bU9mVGhyZWFkcyA+
IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSItc2l6ZWQg
am9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2Vy
IHNpbmNlCi0gICAgICAgICAgICAvLyBqb2JTaXplICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNl
IGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAg
ICAgICAgICAgIGludCBqb2JTaXplID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIG51bU9mVGhyZWFk
czsKLSAgICAgICAgICAgIGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRpbmdEYXRhLmhlaWdodCAl
IG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAg
ICBmb3IgKGludCBqb2IgPSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxlbEpv
YnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW0uZmlsdGVyID0gdGhpczsK
LSAgICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXpl
OwotICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAg
ICBwYXJhbS5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVsCi0gICAg
fQorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWlu
dGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIHJldHVybiBhcHBseVBsYXRm
b3JtKG91dHB1dCwgeyBpbiB9LCBudWxscHRyKTsKIH0KIAotYm9vbCBGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBj
b25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5
T3BlcmF0b3ImIG1vcnBob2xvZ3lPcGVyYXRvcikKIHsKLSAgICBpZiAocmFkaXVzWCA8IDAgfHwg
cmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewotICAgICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5jb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdChkc3RQaXhlbEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNl
dElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3RE
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0KLSAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZs
b2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVn
ZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMu
d2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmlsdGVy
JiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBp
bi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JT
cGFjZSgpKTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRp
b24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaW50IHJhZGl1c1ggPSBzdGQ6Om1p
bihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwotICAgIGlu
dCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRp
dXMuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7Ci0gICAg
cGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwotICAg
IHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiBm
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVm
ZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBh
aW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCAqIGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kgKiBmaWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0KLSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7Ci19Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9s
b2d5T3BlcmF0b3JUeXBlJiB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRj
aCAobW9ycGhvbG9neU9wZXJhdG9yKSB7CiAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1Jf
VU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTI5
NywxNSArOTQsMTEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7CiB9
CiAKLVRleHRTdHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4
dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwg
IltmZU1vcnBob2xvZ3kiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8IG1vcnBo
b2xvZ3lPcGVyYXRvcigpIDw8ICJcIiAiCiAgICAgICAgPDwgInJhZGl1cz1cIiIgPDwgcmFkaXVz
WCgpIDw8ICIsICIgPDwgcmFkaXVzWSgpIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJ
bmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oCmluZGV4IDQ4ZmMzNTQxMTdmYzI3Y2NmYzhlOTNmMTRlZGYwNzVkZTM5YzVh
MTEuLmExOTUwMTY5YTVkNWY1M2M4M2EwNzRlMDk1M2Y0YTE1MzVhZTBmOWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjIsMTEgKzIzLDEwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0g
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CitlbnVtIE1vcnBob2xvZ3lPcGVyYXRvciB7CiAgICAg
RkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV04gPSAwLAogICAgIEZFTU9SUEhPTE9HWV9PUEVS
QVRPUl9FUk9ERSA9IDEsCiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSA9IDIKQEAg
LTM0LDEwICszNCwxMCBAQCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewogCiBjbGFzcyBG
RU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFTW9ycGhvbG9neT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUs
IGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9s
b2d5PiBjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZKTsKIAotICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3Io
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xv
Z3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9CisgICAg
Ym9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yKTsKIAogICAgIGZs
b2F0IHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1g7IH0KICAgICBib29sIHNldFJh
ZGl1c1goZmxvYXQpOwpAQCAtNDYsNDAgKzQ2LDE5IEBAIHB1YmxpYzoKICAgICBib29sIHNldFJh
ZGl1c1koZmxvYXQpOwogCiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0ZXImLCBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBG
RU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVNb3JwaG9sb2d5IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBv
dmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmlsdGVy
UmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJ
bWFnZUJ1ZmZlciopIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50
OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBp
bnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFy
cmF5KiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWln
aHQ7Ci0gICAgICAgIGludCByYWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9Owot
Ci0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVNb3JwaG9s
b2d5KiBmaWx0ZXI7Ci0gICAgICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAg
ICAgICBjb25zdCBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICB9OwotCi0gICAgc3Rh
dGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZvaWQg
cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50
IGVuZFkpOwotCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7CisgICAgTW9ycGhv
bG9neU9wZXJhdG9yIG1fbW9ycGhvbG9neU9wZXJhdG9yOwogICAgIGZsb2F0IG1fcmFkaXVzWDsK
ICAgICBmbG9hdCBtX3JhZGl1c1k7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMjcwZGI5MjQ4MWEzMzky
ZDNkNWExZTkxN2MyZDY1YWE0MTQwZjY5Li4zMTM1OGFjMzFkZjA2MDU0YTUwYTQwNWI2ZWIxNGUx
YjJhMzFmYzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI0LDcxICsyNSw0NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZFT2Zmc2V0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVPZmZzZXQ6OkZFT2Zm
c2V0KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCi0gICAgOiBGaWx0ZXJFZmZl
Y3QoZmlsdGVyLCBUeXBlOjpPZmZzZXQpCitGRU9mZnNldDo6RkVPZmZzZXQoZmxvYXQgZHgsIGZs
b2F0IGR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFT2Zmc2V0KQogICAgICwgbV9keChk
eCkKICAgICAsIG1fZHkoZHkpCiB7CiB9CiAKLVJlZjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0
ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQorUmVmPEZFT2Zmc2V0PiBGRU9m
ZnNldDo6Y3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRU9mZnNldChmaWx0ZXIsIGR4LCBkeSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFT2Zmc2V0KGR4LCBkeSkpOwogfQogCi12b2lkIEZFT2Zmc2V0OjpzZXREeChmbG9hdCBkeCkK
K0Zsb2F0UmVjdCBGRU9mZnNldDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QKIHsKLSAgICBtX2R4ID0gZHg7
CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byBkcmF3aW5nUmVjdCA9
IGlucHV0c1swXS0+ZHJhd2luZ1JlY3QoKTsKKyAgICBkcmF3aW5nUmVjdC5tb3ZlKHsgbV9keCwg
bV9keSB9KTsKKyAgICByZXR1cm4gZHJhd2luZ1JlY3Q7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OnNl
dER5KGZsb2F0IGR5KQorRmlsdGVyUmVzdWx0KiBGRU9mZnNldDo6YXBwbHkoRmlsdGVyT3V0cHV0
JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QK
IHsKLSAgICBtX2R5ID0gZHk7Ci19Ci0KLXZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCkt
PmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIo
KTsKLSAgICBwYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsg
bV9keCwgbV9keSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRS
ZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRS
ZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5j
bG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKLX0KKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHko
KSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLXZvaWQgRkVPZmZzZXQ6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuOworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMg
fSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlz
QWxwaGFJbWFnZSgpKTsKLQotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgRmlsdGVyJiBm
aWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIHJlc3VsdEltYWdl
LT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbik7Cisg
ICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCi1U
ZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYg
RkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlT2Zmc2V0IjsK
LSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0
aW9uKTsKICAgICB0cyA8PCAiIGR4PVwiIiA8PCBkeCgpIDw8ICJcIiBkeT1cIiIgPDwgZHkoKSA8
PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMp
OwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNjVhYmRhOTBhNDdiMWJm
ZTc2YWU1Yzc0YWFiNWFhMTY3ZmIxZTY5ZS4uYWU1OWM4ZmUwNDk4OGRiZjRhZDhkYTA2NmJhNTRj
NzAzOGI1OTlkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjIsMzQgKzIzLDY0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZFT2Zmc2V0IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKEZpbHRlciYsIGZsb2F0IGR4LCBmbG9h
dCBkeSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKGZs
b2F0IGR4LCBmbG9hdCBkeSk7CiAKICAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7
IH0KLSAgICB2b2lkIHNldER4KGZsb2F0KTsKKyAgICB2b2lkIHNldER4KGZsb2F0IGR4KSB7IG1f
ZHggPSBkeDsgfQogCiAgICAgZmxvYXQgZHkoKSBjb25zdCB7IHJldHVybiBtX2R5OyB9Ci0gICAg
dm9pZCBzZXREeShmbG9hdCk7CisgICAgdm9pZCBzZXREeShmbG9hdCBkeSkgeyBtX2R5ID0gZHk7
IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxS
ZWY8RkVPZmZzZXQ+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEZFT2Zmc2V0
KEZpbHRlciYsIGZsb2F0IGR4LCBmbG9hdCBkeSk7CisgICAgRkVPZmZzZXQoZmxvYXQgZHgsIGZs
b2F0IGR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiRkVPZmZzZXQiOyB9CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92
ZXJyaWRlOwotICAgIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVy
cmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZpbHRlclJl
c3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0
ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBmbG9hdCBtX2R4OwogICAgIGZsb2F0IG1fZHk7CiB9Owog
Cit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRU9mZnNldDo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2R4OworICAgIGVuY29kZXIgPDwg
bV9keTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZF
T2Zmc2V0Pj4gRkVPZmZzZXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6
b3B0aW9uYWw8ZmxvYXQ+IGR4OworICAgIGRlY29kZXIgPj4gZHg7CisgICAgaWYgKCFkeCkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGR5
OworICAgIGRlY29kZXIgPj4gZHk7CisgICAgaWYgKCFkeSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHJldHVybiBGRU9mZnNldDo6Y3JlYXRlKCpkeCwgKmR5KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OkZFT2Zmc2V0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpG
aWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LnR5cGUoKSA9PSBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZzZXQ7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAppbmRleCA1OTk3MjMwNjg4NmE2M2Zh
NDEyYjViNzE0MWY3NGY5YzQ4N2ExNDRjLi42OTkyNDQzM2Y5M2ZlNGYyMWZlYmJhYmY0ODQ0NTg3
NjZlZWU2Yzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCkBAIC0yLDYgKzIsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw0OSArMjMsMjYgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRVNwZWN1bGFyTGlnaHRpbmcuaCIKIAot
I2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxh
ckxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4
cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVy
LCBTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1
bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxV
bml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OlNwZWN1bGFyTGlnaHRpbmcp
CitSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25z
dCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxl
LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwg
a2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSkpOwogfQogCi1SZWY8RkVTcGVjdWxh
ckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29u
c3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3Vs
YXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3Vy
Y2UpCitGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYg
Y29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQorICAgIDogRkVMaWdodGluZyhj
b2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50
LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSwg
VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
U3BlY3VsYXJMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3Bl
Y3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5l
bFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRVNwZWN1bGFyTGln
aHRpbmc6On5GRVNwZWN1bGFyTGlnaHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRkVTcGVjdWxh
ckxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCi17
Ci0gICAgaWYgKG1fc3BlY3VsYXJDb25zdGFudCA9PSBzcGVjdWxhckNvbnN0YW50KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zcGVjdWxhckNvbnN0YW50ID0gc3BlY3VsYXJDb25zdGFu
dDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNw
ZWN1bGFyRXhwb25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkKLXsKLSAgICBpZiAobV9zcGVj
dWxhckV4cG9uZW50ID09IHNwZWN1bGFyRXhwb25lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9uZW50OwotICAgIHJldHVybiB0
cnVlOwotfQotCi1UZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlv
bikgY29uc3QKK1RleHRTdHJlYW0mIEZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAg
ICAgdHMgPDwgaW5kZW50IDw8ICJbZmVTcGVjdWxhckxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZl
Y3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8
PCAiIHN1cmZhY2VTY2FsZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKICAgICAgICA8
PCAic3BlY3VhbENvbnN0YW50PVwiIiA8PCBtX3NwZWN1bGFyQ29uc3RhbnQgPDwgIlwiICIKICAg
ICAgICA8PCAic3BlY3VsYXJFeHBvbmVudD1cIiIgPDwgbV9zcGVjdWxhckV4cG9uZW50IDw8ICJc
Il1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0g
ICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0
aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCmluZGV4
IGU5OThhNzYwNWQxZTQ3MzVkOWY0OTc5OGQzOTgxOGJmM2IyNDk1OGEuLmNhZTViODJmYmViYzVh
YjYzNDM1NjkwNWU5YmU3ZTZmM2YwMzJmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaApA
QCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcs
MjAgKzI4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVTcGVjdWxhckxpZ2h0
aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVTcGVj
dWxhckxpZ2h0aW5nPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+
RkVTcGVjdWxhckxpZ2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+
IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCi0gICAgZmxv
YXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsg
fQotICAgIGJvb2wgc2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7Ci0KLSAgICBmbG9hdCBzcGVj
dWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9Ci0gICAg
Ym9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KTsKK3ByaXZhdGU6CisgICAgRkVTcGVjdWxh
ckxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxh
ckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKLSAgICBX
VEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwg
UmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIkZFU3BlY3VsYXJMaWdodGluZyI7IH0K
IAotcHJpdmF0ZToKLSAgICBGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3Im
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7
CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCmluZGV4IDM1YzUxY2JiMjI5ZGVlOTY0MmRjMWU3ZGNh
MGM1ZGIyZmNhYzIwYWQuLjQ2NDJiYmUyZjU5NGViNDU3YjczZWIzMGJjZDcyN2ZhYjQ1MWY3MjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXgg
TWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjEsODAgKzIyLDQxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUaWxl
LmgiCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5j
bHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQu
aCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVRpbGU6OkZFVGlsZShGaWx0ZXIm
IGZpbHRlcikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlRpbGUpCitSZWY8RkVU
aWxlPiBGRVRpbGU6OmNyZWF0ZSgpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUaWxl
KCkpOwogfQogCi1SZWY8RkVUaWxlPiBGRVRpbGU6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK0ZF
VGlsZTo6RkVUaWxlKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRVRpbGUpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUaWxlKGZpbHRlcikpOwogfQogCi12b2lkIEZFVGlsZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRVRpbGU6OmRyYXdpbmdSZWN0KGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkg
Y29uc3QKIHsKLS8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3Jr
IGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhl
cndpc2UuCi0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJ
bWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNB
bHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICAvLyBTb3VyY2UgaW5wdXQgbmVl
ZHMgbW9yZSBhdHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1
dCBnaXZlcyB0aGUKLSAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4g
VGhpcyBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCi0gICAg
RmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKLSAgICBGbG9hdFBvaW50
IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwotICAgIEZsb2F0UG9p
bnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKLSAgICBp
ZiAoaW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQp
IHsKLSAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICAgICAgdGls
ZVJlY3QgPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAgICAgIHRpbGVSZWN0LnNjYWxlKGZp
bHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24o
KS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOwotICAgIGlmICgh
dGlsZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJ
bWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0
LnRyYW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9u
LnkoKSk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBp
bi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKLQotICAgIGF1dG8gdGlsZUltYWdl
Q29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdl
KSk7Ci0gICAgaWYgKCF0aWxlSW1hZ2VDb3B5KQotICAgICAgICByZXR1cm47CisgICAgLy8gRG9u
J3QgdXNlIHRoZSBpbnB1dHMnIHN1YnJlZ2lvbnMgZm9yIDxmZVRpbGU+LgorICAgIHJldHVybiBn
ZW9tZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdpb24oeyB9KTsKK30KIAotICAgIEFmZmluZVRyYW5z
Zm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIHBhdHRlcm5UcmFuc2Zvcm0udHJhbnNsYXRlKGlu
TWF4RWZmZWN0TG9jYXRpb24gLSBtYXhFZmZlY3RMb2NhdGlvbik7CitGaWx0ZXJSZXN1bHQqIEZF
VGlsZTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKikgY29uc3QKK3sKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7
CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBhdXRvIHBhdHRlcm4gPSBQ
YXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlQ29weS5yZWxlYXNlTm9uTnVsbCgpLCB7IHRydWUsIHRy
dWUsIHBhdHRlcm5UcmFuc2Zvcm0gfSk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJl
c3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEdy
YXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKLSAgICBm
aWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGlu
IH0sIG51bGxwdHIpOwogfQogCi1UZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgdHMgPDwgaW5kZW50
IDw8ICJbZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiXVxuIjsKLQotICAgIFRleHRTdHJlYW06
OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotCisgICAgdHMgPDwgaW5kZW50
IDw8ICJbZmVUaWxlXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCmluZGV4IDQ5YmQ5OWYwOTQ0
N2RhZTFjZjA5YWYxMjM1OGM2ZGU4NDA2ODc3MTQuLjdmMzA3MTJmZjI2OGJhYzQ5MjBjOThiMjM4
NTMwMjMyMzI4YThlOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjcgKzIzLDI1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgCiBjbGFzcyBGRVRpbGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBS
ZWY8RkVUaWxlPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBGRVRpbGUoRmlsdGVyJik7Cisg
ICAgRkVUaWxlKCk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIkZFVGlsZSI7IH0KIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0
VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVUaWxlOyB9Cisg
ICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZp
bHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
clJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJl
c3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGFjMjM0
NmU4YTRiYTU4YWFhOTI0YTZkNjdiZDVlNGI3N2RkMjI2OGYuLjEyMzQzM2QzODBjYzcxN2JmZTIw
NmNiZjQxNzBmYThmOTI5NzYwN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTUsNyArNSw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1
PgogICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMzEgKzI2LDE5IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKLSNpbmNs
dWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLS8qCi0gICAgUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2Ug
WzEsIDIqKjMxIC0gMl0uIEFsZ29yaXRobSBpczoKLSAgICByID0gKGEgKiByKSBtb2QgbSB3aGVy
ZSBhID0gcmFuZEFtcGxpdHVkZSA9IDE2ODA3IGFuZAotICAgIG0gPSByYW5kTWF4aW11bSA9IDIq
KjMxIC0gMSA9IDIxNDc0ODM2NDcsIHIgPSBzZWVkLgotICAgIFNlZSBbUGFyayAmIE1pbGxlcl0s
IENBQ00gdm9sLiAzMSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4Ci0gICAgVG8gdGVzdDogdGhl
IGFsZ29yaXRobSBzaG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUKLSAgICBhcyB0
aGUgMTAsMDAwdGggZ2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgot
Ki8KLXN0YXRpYyBjb25zdCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7Ci1zdGF0aWMgY29uc3Qg
bG9uZyBzX3JhbmRNYXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCi1zdGF0aWMgY29u
c3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBv
ZiBtCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCi1zdGF0aWMg
Y29uc3QgaW50IHNfcmFuZFIgPSAyODM2OyAvLyBtICUgYQorUmVmPEZFVHVyYnVsZW5jZT4gRkVU
dXJidWxlbmNlOjpjcmVhdGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9v
bCBzdGl0Y2hUaWxlcykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2Uo
dHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBz
dGl0Y2hUaWxlcykpOworfQogCi1GRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZp
bHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJh
c2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxl
cykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlR1cmJ1bGVuY2UpCi0gICAgLCBt
X3R5cGUodHlwZSkKK0ZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlIHR1
cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVks
IGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQorICAgIDogRmls
dGVyRWZmZWN0KFR5cGU6OkZFVHVyYnVsZW5jZSkKKyAgICAsIG1fdHVyYnVsZW5jZVR5cGUodHVy
YnVsZW5jZVR5cGUpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQogICAg
ICwgbV9iYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKICAgICAsIG1fbnVtT2N0YXZlcyhu
dW1PY3RhdmVzKQpAQCAtNTksNDA1ICs0Nyw0NyBAQCBGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5j
ZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZQog
ewogfQogCi1SZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShGaWx0ZXImIGZp
bHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJh
c2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxl
cykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UoZmlsdGVyLCB0eXBl
LCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRj
aFRpbGVzKSk7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRUeXBlKFR1cmJ1bGVuY2VUeXBl
IHR5cGUpCitib29sIEZFVHVyYnVsZW5jZTo6c2V0VHVyYnVsZW5jZVR5cGUoVHVyYnVsZW5jZVR5
cGUgdHVyYnVsZW5jZVR5cGUpCiB7Ci0gICAgaWYgKG1fdHlwZSA9PSB0eXBlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV90eXBlID0gdHlwZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKGZsb2F0IGJhc2VGcmVxdWVuY3lZ
KQotewotICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lZID09IGJhc2VGcmVxdWVuY3lZKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYXNlRnJlcXVlbmN5WSA9IGJhc2VGcmVxdWVuY3lZOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fdHVyYnVsZW5jZVR5
cGUsIHR1cmJ1bGVuY2VUeXBlKSAhPSBtX3R1cmJ1bGVuY2VUeXBlOwogfQogCiBib29sIEZFVHVy
YnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVgoZmxvYXQgYmFzZUZyZXF1ZW5jeVgpCiB7Ci0gICAg
aWYgKG1fYmFzZUZyZXF1ZW5jeVggPT0gYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX2Jhc2VGcmVxdWVuY3lYID0gYmFzZUZyZXF1ZW5jeVg7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9iYXNlRnJlcXVlbmN5WCwgYmFzZUZy
ZXF1ZW5jeVgpICE9IG1fYmFzZUZyZXF1ZW5jeVg7CiB9CiAKLWJvb2wgRkVUdXJidWxlbmNlOjpz
ZXRTZWVkKGZsb2F0IHNlZWQpCitib29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVko
ZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCiB7Ci0gICAgaWYgKG1fc2VlZCA9PSBzZWVkKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zZWVkID0gc2VlZDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Jhc2VGcmVxdWVuY3lZLCBiYXNlRnJlcXVlbmN5WSkg
IT0gbV9iYXNlRnJlcXVlbmN5WTsKIH0KIAogYm9vbCBGRVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2
ZXMoaW50IG51bU9jdGF2ZXMpCiB7Ci0gICAgaWYgKG1fbnVtT2N0YXZlcyA9PSBudW1PY3RhdmVz
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9udW1PY3RhdmVzID0gbnVtT2N0YXZlczsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVz
KGJvb2wgc3RpdGNoKQotewotICAgIGlmIChtX3N0aXRjaFRpbGVzID09IHN0aXRjaCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3RpdGNoVGlsZXMgPSBzdGl0Y2g7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLS8vIFRoZSB0dXJidWxlbmNlIGNhbGN1bGF0aW9uIGNvZGUgaXMgYW4gYWRh
cHRlZCB2ZXJzaW9uIG9mIHdoYXQgYXBwZWFycyBpbiB0aGUgU1ZHIDEuMSBzcGVjaWZpY2F0aW9u
OgotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5j
ZQotCi0vLyBDb21wdXRlIHBzZXVkbyByYW5kb20gbnVtYmVyLgotaW5saW5lIGxvbmcgRkVUdXJi
dWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSgpCi17Ci0gICAgbG9uZyByZXN1bHQgPSBzX3Jh
bmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5k
USk7Ci0gICAgaWYgKHJlc3VsdCA8PSAwKQotICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11
bTsKLSAgICBzZWVkID0gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBm
bG9hdCBzbW9vdGhDdXJ2ZShmbG9hdCB0KQotewotICAgIHJldHVybiB0ICogdCAqICgzIC0gMiAq
IHQpOwotfQotCi1pbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9h
dCBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhICsgdCAqIChiIC0gYSk7Ci19Ci0KLXZvaWQg
RkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0g
ICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvcjsKLQotICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNs
YW1wIHRvIHRoZSByYW5nZSBbMSwgc19yYW5kTWF4aW11bSAtIDFdLgotICAgIGlmIChwYWludGlu
Z0RhdGEuc2VlZCA8PSAwKQotICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IC0ocGFpbnRpbmdE
YXRhLnNlZWQgJSAoc19yYW5kTWF4aW11bSAtIDEpKSArIDE7Ci0gICAgaWYgKHBhaW50aW5nRGF0
YS5zZWVkID4gc19yYW5kTWF4aW11bSAtIDEpCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0g
c19yYW5kTWF4aW11bSAtIDE7Ci0KLSAgICBmbG9hdCogZ3JhZGllbnQ7Ci0gICAgZm9yIChpbnQg
Y2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2ldID0gaTsKLSAgICAgICAgICAgIGdyYWRpZW50ID0gcGFpbnRpbmdE
YXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAg
ICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9t
KCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAg
ICAgICAgICAgICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdE
YXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9j
a1NpemU7Ci0gICAgICAgICAgICB9IHdoaWxlICghZ3JhZGllbnRbMF0gJiYgIWdyYWRpZW50WzFd
KTsKLSAgICAgICAgICAgIG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50
WzBdLCBncmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBncmFkaWVudFswXSAvPSBub3JtYWxpemF0
aW9uRmFjdG9yOwotICAgICAgICAgICAgZ3JhZGllbnRbMV0gLz0gbm9ybWFsaXphdGlvbkZhY3Rv
cjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSBzX2Jsb2NrU2l6ZSAtIDE7
IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgaW50IGsgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVj
dG9yW2ldOwotICAgICAgICBpbnQgaiA9IHBhaW50aW5nRGF0YS5yYW5kb20oKSAlIHNfYmxvY2tT
aXplOwotICAgICAgICBBU1NFUlQoaiA+PSAwKTsKLSAgICAgICAgQVNTRVJUKGogPCAyICogc19i
bG9ja1NpemUgKyAyKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal07Ci0gICAgICAgIHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3Jbal0gPSBrOwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c19ibG9ja1NpemUgKyAyOyArK2kpIHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3RvcltzX2Jsb2NrU2l6ZSArIGldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsK
LSAgICAgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsK
LSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSAr
IGldWzBdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzBdOwotICAgICAgICAg
ICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMV0gPSBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMV07Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLUZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2U6OmNvbXB1dGVTdGl0Y2hp
bmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZy
ZXF1ZW5jeVkpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3N0aXRjaFRpbGVzKQotICAgICAgICByZXR1
cm4geyB9OwotCi0gICAgZmxvYXQgdGlsZVdpZHRoID0gdGlsZVNpemUud2lkdGgoKTsKLSAgICBm
bG9hdCB0aWxlSGVpZ2h0ID0gdGlsZVNpemUuaGVpZ2h0KCk7Ci0gICAgQVNTRVJUKHRpbGVXaWR0
aCA+IDAgJiYgdGlsZUhlaWdodCA+IDApOwotCi0gICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQg
dHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQKLSAgICAvLyBzbyB0
aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgotICAgIGlmIChiYXNlRnJl
cXVlbmN5WCkgewotICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZVdpZHRo
ICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOwotICAgICAgICBmbG9hdCBoaWdoRnJlcXVl
bmN5ID0gY2VpbGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOwotICAg
ICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRv
IHRoZSBzdGFuZGFyZC4KLSAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5
IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAgICAgYmFzZUZyZXF1
ZW5jeVggPSBsb3dGcmVxdWVuY3k7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGcmVx
dWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsKLSAgICB9Ci0gICAgaWYgKGJhc2VGcmVxdWVuY3lZKSB7
Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlSGVpZ2h0ICogYmFzZUZy
ZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKLSAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNl
aWxmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OwotICAgICAgICBp
ZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZy
ZXF1ZW5jeVkpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGxvd0ZyZXF1ZW5jeTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBoaWdoRnJlcXVlbmN5Owot
ICAgIH0KLQotICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKLSAgICBzdGl0Y2hEYXRhLndpZHRo
ID0gcm91bmRmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKTsKLSAgICBzdGl0Y2hEYXRhLndy
YXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7Ci0gICAgc3RpdGNoRGF0YS5o
ZWlnaHQgPSByb3VuZGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBzdGl0Y2hE
YXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0OwotCi0gICAgcmV0
dXJuIHN0aXRjaERhdGE7Ci19Ci0KLS8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6
IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVt
ZW50LgotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29u
c3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRjaERh
dGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKSBjb25zdAotewotICAgIHN0cnVjdCBO
b2lzZVBvc2l0aW9uIHsKLSAgICAgICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3Bl
YyB0ZXh0LgotICAgICAgICBpbnQgbmV4dEluZGV4OyAvLyBieDEsIGJ5MSBpbiB0aGUgc3BlYyB0
ZXh0LgotICAgICAgICBmbG9hdCBmcmFjdGlvbjsgLy8gcngwLCByeTAgaW4gdGhlIHNwZWMgdGV4
dC4KLQotICAgICAgICBOb2lzZVBvc2l0aW9uKGZsb2F0IGNvbXBvbmVudCkKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gIHQgPSB2ZWNbMF0gKyBQZXJsaW5OOwotICAgICAgICAgICAgLy8gIGJ4
MCA9IChpbnQpdDsKLSAgICAgICAgICAgIC8vICBieDEgPSBieDArMTsKLSAgICAgICAgICAgIC8v
ICByeDAgPSB0IC0gKGludCl0OwotICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24gPSBjb21wb25l
bnQgKyBzX3Blcmxpbk5vaXNlOwotICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+
KHBvc2l0aW9uKTsKLSAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4ICsgMTsKLSAgICAgICAg
ICAgIGZyYWN0aW9uID0gcG9zaXRpb24gLSBpbmRleDsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgdm9pZCBzdGl0Y2goaW50IHNpemUsIGludCB3cmFwU2l6ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gaWYgKGJ4MCA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQotICAgICAgICAgICAg
Ly8gICBieDAgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKLSAgICAgICAgICAgIGlmIChpbmRleCA+
PSB3cmFwU2l6ZSkKLSAgICAgICAgICAgICAgICBpbmRleCAtPSBzaXplOwotCi0gICAgICAgICAg
ICAvLyBpZiAoYngxID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4
MSAtPSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAgICAgICAgICAgaWYgKG5leHRJbmRleCA+PSB3
cmFwU2l6ZSkKLSAgICAgICAgICAgICAgICBuZXh0SW5kZXggLT0gc2l6ZTsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWChub2lzZVZlY3Rvci54KCkpOwotICAg
IE5vaXNlUG9zaXRpb24gbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7Ci0KLSAgICAvLyBJZiBzdGl0
Y2hpbmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KLSAgICBpZiAobV9zdGl0
Y2hUaWxlcykgewotICAgICAgICBub2lzZVguc3RpdGNoKHN0aXRjaERhdGEud2lkdGgsIHN0aXRj
aERhdGEud3JhcFgpOwotICAgICAgICBub2lzZVkuc3RpdGNoKHN0aXRjaERhdGEuaGVpZ2h0LCBz
dGl0Y2hEYXRhLndyYXBZKTsKLSAgICB9Ci0KLSAgICAvLyBieDAgJj0gQk07Ci0gICAgLy8gYngx
ICY9IEJNOwotICAgIC8vIGJ5MCAmPSBCTTsKLSAgICAvLyBieTEgJj0gQk07Ci0gICAgbm9pc2VY
LmluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWC5uZXh0SW5kZXggJj0gc19ibG9ja01h
c2s7Ci0gICAgbm9pc2VZLmluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWS5uZXh0SW5k
ZXggJj0gc19ibG9ja01hc2s7Ci0KLSAgICAvLyBpID0gdUxhdHRpY2VTZWxlY3RvcltieDBdOwot
ICAgIC8vIGogPSB1TGF0dGljZVNlbGVjdG9yW2J4MV07Ci0gICAgaW50IGxhdHRpY2VJbmRleCA9
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLmluZGV4XTsKLSAgICBpbnQgbmV4
dExhdHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLm5leHRJ
bmRleF07Ci0KLSAgICAvLyBzeCA9IGRvdWJsZShzX2N1cnZlKHJ4MCkpOwotICAgIC8vIHN5ID0g
ZG91YmxlKHNfY3VydmUocnkwKSk7Ci0gICAgZmxvYXQgc3ggPSBzbW9vdGhDdXJ2ZShub2lzZVgu
ZnJhY3Rpb24pOwotICAgIGZsb2F0IHN5ID0gc21vb3RoQ3VydmUobm9pc2VZLmZyYWN0aW9uKTsK
LQotICAgIGF1dG8gbm9pc2VGb3JDaGFubmVsID0gWyZdKGludCBjaGFubmVsKSB7Ci0gICAgICAg
IC8vIGIwMCA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MF0KLSAgICAgICAgaW50IGIwMCA9IHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLmluZGV4XTsK
LSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMDBdOyB1ID0gcngwICog
cVswXSArIHJ5MCAqIHFbMV07Ci0gICAgICAgIGNvbnN0IGZsb2F0KiBxID0gcGFpbnRpbmdEYXRh
LmdyYWRpZW50W2NoYW5uZWxdW2IwMF07Ci0gICAgICAgIGZsb2F0IHUgPSBub2lzZVguZnJhY3Rp
b24gKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9uICogcVsxXTsKLQotICAgICAgICAvLyBiMTAgPSB1
TGF0dGljZVNlbGVjdG9yW2ogKyBieTBdOwotICAgICAgICBpbnQgYjEwID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLmluZGV4XTsKLSAgICAg
ICAgLy8gcngxID0gcngwIC0gMS4wZjsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JD
aGFubmVsXVtiMTBdOyB2ID0gcngxICogcVswXSArIHJ5MCAqIHFbMV07Ci0gICAgICAgIHEgPSBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjEwXTsKLSAgICAgICAgZmxvYXQgdiA9IChu
b2lzZVguZnJhY3Rpb24gLSAxKSAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwotICAg
ICAgICAvLyBhID0gbGVycChzeCwgdSwgdik7Ci0gICAgICAgIGZsb2F0IGEgPSBsaW5lYXJJbnRl
cnBvbGF0aW9uKHN4LCB1LCB2KTsKLQotICAgICAgICAvLyBiMDEgPSB1TGF0dGljZVNlbGVjdG9y
W2kgKyBieTFdOwotICAgICAgICBpbnQgYjAxID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
cltsYXR0aWNlSW5kZXggKyBub2lzZVkubmV4dEluZGV4XTsKLSAgICAgICAgLy8gcnkxID0gcnkw
IC0gMS4wZjsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMDFdOyB1
ID0gcngwICogcVswXSArIHJ5MSAqIHFbMV07Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3Jh
ZGllbnRbY2hhbm5lbF1bYjAxXTsKLSAgICAgICAgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0g
KyAobm9pc2VZLmZyYWN0aW9uIC0gMSkgKiBxWzFdOwotCi0gICAgICAgIC8vIGIxMSA9IHVMYXR0
aWNlU2VsZWN0b3JbaiArIGJ5MV07Ci0gICAgICAgIGludCBiMTEgPSBwYWludGluZ0RhdGEubGF0
dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubmV4dEluZGV4XTsKLSAgICAg
ICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMTFdOyB2ID0gcngxICogcVswXSAr
IHJ5MSAqIHFbMV07Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1b
YjExXTsKLSAgICAgICAgdiA9IChub2lzZVguZnJhY3Rpb24gLSAxKSAqIHFbMF0gKyAobm9pc2VZ
LmZyYWN0aW9uIC0gMSkgKiBxWzFdOwotICAgICAgICAvLyBiID0gbGVycChzeCwgdSwgdik7Ci0g
ICAgICAgIGZsb2F0IGIgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKLQotICAgICAg
ICAvLyByZXR1cm4gbGVycChzeSwgYSwgYik7Ci0gICAgICAgIHJldHVybiBsaW5lYXJJbnRlcnBv
bGF0aW9uKHN5LCBhLCBiKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgbm9pc2VG
b3JDaGFubmVsKDApLAotICAgICAgICBub2lzZUZvckNoYW5uZWwoMSksCi0gICAgICAgIG5vaXNl
Rm9yQ2hhbm5lbCgyKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDMpCi0gICAgfTsKLX0KLQot
Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxl
bWVudCBkZXNjcmliZXMgdGhpcyBjb252ZXJzaW9uIHRvIGNvbG9yIGNvbXBvbmVudHMuCi0vLyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yQ29udmVydDxTUkdCQTx1aW50OD4+KFNSR0JBPGZs
b2F0PikgdG8gZ2V0IHRoZSBzYW1lIGJlaGF2aW9yLgotc3RhdGljIGlubGluZSBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpCi17Ci0gICAgcmV0dXJuIHsKLSAg
ICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50
c1swXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGlj
X2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMV0gKiAyNTUpLCAwLCAyNTUpLAotICAgICAgICBz
dGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzJdICog
MjU1KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxp
bnQ+KGZsb2F0Q29tcG9uZW50c1szXSAqIDI1NSksIDAsIDI1NSksCi0gICAgfTsKKyAgICByZXR1
cm4gc3RkOjpleGNoYW5nZShtX251bU9jdGF2ZXMsIG51bU9jdGF2ZXMpICE9IG1fbnVtT2N0YXZl
czsKIH0KIAotQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZTo6Y2FsY3Vs
YXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
Citib29sIEZFVHVyYnVsZW5jZTo6c2V0U2VlZChmbG9hdCBzZWVkKQogewotICAgIENvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0OwotICAgIEZsb2F0UG9p
bnQgbm9pc2VWZWN0b3IocG9pbnQueCgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lYLCBw
b2ludC55KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVkpOwotICAgIGZsb2F0IHJhdGlv
ID0gMTsKLSAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBtX251bU9jdGF2ZXM7ICsr
b2N0YXZlKSB7Ci0gICAgICAgIGlmIChtX3R5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxO
b2lzZSkKLSAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBh
aW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50
aW5nRGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpLmFicygpIC8gcmF0aW87Ci0KLSAgICAg
ICAgbm9pc2VWZWN0b3Iuc2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKLSAgICAgICAgbm9pc2VW
ZWN0b3Iuc2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsKLSAgICAgICAgcmF0aW8gKj0gMjsKLQot
ICAgICAgICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICAgICAgLy8gVXBkYXRlIHN0aXRj
aCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2UgYmVmb3JlIHRoZSBtdWx0aXBsaWNh
dGlvbiBhbmQKLSAgICAgICAgICAgIC8vIGFkZGluZyBpdCBhZnRlcndhcmQgc2ltcGxpZmllcyB0
byBzdWJ0cmFjdGluZyBpdCBvbmNlLgotICAgICAgICAgICAgc3RpdGNoRGF0YS53aWR0aCAqPSAy
OwotICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hEYXRhLndyYXBYIC0g
c19wZXJsaW5Ob2lzZTsKLSAgICAgICAgICAgIHN0aXRjaERhdGEuaGVpZ2h0ICo9IDI7Ci0gICAg
ICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0aXRjaERhdGEud3JhcFkgLSBzX3Blcmxp
bk5vaXNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHZhbHVlIG9mIHR1cmJ1bGVu
Y2VGdW5jdGlvblJlc3VsdCBjb21lcyBmcm9tICgodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICog
MjU1KSArIDI1NSkgLyAyIGJ5IGZyYWN0YWxOb2lzZQotICAgIC8vIGFuZCAodHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0ICogMjU1KSBieSB0dXJidWxlbmNlLgotICAgIGlmIChtX3R5cGUgPT0gVHVy
YnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKLSAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVz
dWx0ID0gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMC41ZiArIDAuNWY7Ci0KLSAgICByZXR1
cm4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQpOwor
ICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2VlZCwgc2VlZCkgIT0gbV9zZWVkOwogfQogCi12
b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJh
eSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0Citib29sIEZFVHVyYnVsZW5jZTo6c2V0U3Rp
dGNoVGlsZXMoYm9vbCBzdGl0Y2hUaWxlcykKIHsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7
Ci0KLSAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAg
ZmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0UG9p
bnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7Ci0gICAgaW50IGluZGV4T2ZQ
aXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7Ci0gICAg
QWZmaW5lVHJhbnNmb3JtIGludmVyc2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7Ci0KLSAgICBmb3Ig
KGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIHBvaW50LnNldFkocG9p
bnQueSgpICsgMSk7Ci0gICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7ICsreCkgewotICAg
ICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKLSAgICAgICAgICAgIEZsb2F0UG9p
bnQgbG9jYWxQb2ludCA9IGludmVyc2VUcmFuc2Zyb20ubWFwUG9pbnQocG9pbnQpOwotICAgICAg
ICAgICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChwYWlu
dGluZ0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQpOwotICAgICAgICAgICAgcGl4ZWxBcnJh
eS5zZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4T2ZQaXhlbENoYW5u
ZWwpOwotICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0OwotICAgICAgICB9Ci0g
ICAgfQorICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc3RpdGNoVGlsZXMsIHN0aXRjaFRpbGVz
KSAhPSBtX3N0aXRjaFRpbGVzOwogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldv
cmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyogcGFyYW1ldGVycykKK0Zsb2F0UmVjdCBGRVR1cmJ1
bGVuY2U6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPmZp
bGxSZWdpb24oKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0Rh
dGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVy
cy0+ZW5kWSk7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heFByaW1pdGl2ZVN1YnJlZ2lvbih7IH0p
OwogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRl
clJlc3VsdCogRkVUdXJidWxlbmNlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVy
UmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlm
ICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwot
Ci0gICAgSW50U2l6ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAg
ICByZXN1bHRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotCi0gICAgaWYgKHJl
c3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJv
RmlsbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW50U2l6ZSB0aWxlU2l6ZSA9
IHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7Ci0KLSAg
ICBmbG9hdCBiYXNlRnJlcXVlbmN5WCA9IG1fYmFzZUZyZXF1ZW5jeVg7Ci0gICAgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVkgPSBtX2Jhc2VGcmVxdWVuY3lZOwotICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0
YSA9IGNvbXB1dGVTdGl0Y2hpbmcodGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVl
bmN5WSk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgdGlsZVNpemUs
IGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0gICAgaW5pdFBhaW50KHBhaW50aW5n
RGF0YSk7Ci0KLSAgICBhdXRvIGFyZWEgPSByZXN1bHRTaXplLmFyZWEoKTsKLSAgICBpZiAoYXJl
YS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBoZWlnaHQgPSBy
ZXN1bHRTaXplLmhlaWdodCgpOwotCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGhlaWdo
dCAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2ln
bmVkPihhcmVhIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7Ci0gICAg
aWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2Jz
PEZpbGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVsZW5j
ZTo6ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAgICAgLy8g
RmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0gICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFsbGVs
Sm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bUpvYnMgPiAxKSB7Ci0gICAgICAg
ICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInN0ZXBZIi1zaXplZCBqb2JzLCBkaXN0cmlidXRp
bmcgdGhlIGV4dHJhIHJvd3MgaW50byB0aGUgZmlyc3QgImpvYnNXaXRoRXh0cmEiIGpvYnMuCi0g
ICAgICAgICAgICB1bnNpZ25lZCBzdGVwWSA9IGhlaWdodCAvIG51bUpvYnM7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBqb2JzV2l0aEV4dHJhID0gaGVpZ2h0ICUgbnVtSm9iczsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHN0YXJ0WSA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1Kb2JzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVy
cyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKLSAgICAgICAgICAgICAgICBw
YXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9
ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5n
RGF0YSA9ICZwYWludGluZ0RhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0aXRjaERhdGEg
PSBzdGl0Y2hEYXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFydFkgPSBzdGFydFk7Ci0K
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBqb2JIZWlnaHQgPSAoaSA8IGpvYnNXaXRoRXh0cmEp
ID8gc3RlcFkgKyAxIDogc3RlcFk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmVuZFkgPSBwYXJh
bXMuc3RhcnRZICsgam9iSGVpZ2h0OwotICAgICAgICAgICAgICAgIHN0YXJ0WSArPSBqb2JIZWln
aHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAotICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJl
IGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21h
bGwuCi0gICAgZmlsbFJlZ2lvbihkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgfSwgbnVsbHB0cik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpAQCAtNDc2LDExICsxMDYsMTAgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBl
IHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRVR1cmJ1bGVuY2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSBy
ZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0
CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUdXJidWxlbmNlIjsKLSAgICBGaWx0ZXJFZmZl
Y3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8
PCAiIHR5cGU9XCIiIDw8IHR5cGUoKSA8PCAiXCIgIgorICAgIHRzIDw8ICIgdHVyYnVsZW5jZVR5
cGU9XCIiIDw8IHR1cmJ1bGVuY2VUeXBlKCkgPDwgIlwiICIKICAgICAgICA8PCAiYmFzZUZyZXF1
ZW5jeT1cIiIgPDwgYmFzZUZyZXF1ZW5jeVgoKSA8PCAiLCAiIDw8IGJhc2VGcmVxdWVuY3lZKCkg
PDwgIlwiICIKICAgICAgICA8PCAic2VlZD1cIiIgPDwgc2VlZCgpIDw8ICJcIiAiCiAgICAgICAg
PDwgIm51bU9jdGF2ZXM9XCIiIDw8IG51bU9jdGF2ZXMoKSA8PCAiXCIgIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgK
aW5kZXggNGQ1MzZiMzdhODBhYWRmOTExZWJmY2U4OTc3NGNkM2NjZWNiNWNmYi4uMTViYzRjNzA5
NzBhNTc4ODUyOTkzOGRmNmQwNjg5NmM1YjQ2ZmE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCkBAIC00LDcg
KzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2Vk
Lmh1PgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDIxIEFwcGxlIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsOSArMjQsNyBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTM4LDEwICszNiwxMCBAQCBlbnVtIGNsYXNzIFR1cmJ1bGVuY2VUeXBlIHsK
IAogY2xhc3MgRkVUdXJidWxlbmNlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShGaWx0ZXImLCBUdXJidWxlbmNlVHlw
ZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKyAgICBzdGF0aWMgUmVmPEZFVHVy
YnVsZW5jZT4gY3JlYXRlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxv
YXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRj
aFRpbGVzKTsKIAotICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KLSAgICBib29sIHNldFR5cGUoVHVyYnVsZW5jZVR5cGUpOworICAgIFR1cmJ1bGVuY2VU
eXBlIHR1cmJ1bGVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90dXJidWxlbmNlVHlwZTsgfQor
ICAgIGJvb2wgc2V0VHVyYnVsZW5jZVR5cGUoVHVyYnVsZW5jZVR5cGUpOwogCiAgICAgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VGcmVxdWVuY3lYOyB9CiAgICAg
Ym9vbCBzZXRCYXNlRnJlcXVlbmN5WChmbG9hdCk7CkBAIC01OSw3MCArNTcsMTkgQEAgcHVibGlj
OgogICAgIGJvb2wgc2V0U3RpdGNoVGlsZXMoYm9vbCk7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IGNvbnN0IGludCBzX2Jsb2NrU2l6ZSA9IDI1NjsKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxv
Y2tNYXNrID0gc19ibG9ja1NpemUgLSAxOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmlt
YWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZv
ciBwYXJhbGxlbCBqb2JzLgotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIFBh
aW50aW5nRGF0YShsb25nIHBhaW50aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXpl
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAg
ICA6IHNlZWQocGFpbnRpbmdTZWVkKQotICAgICAgICAgICAgLCBmaWx0ZXJTaXplKHBhaW50aW5n
U2l6ZSkKLSAgICAgICAgICAgICwgYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCi0gICAg
ICAgICAgICAsIGJhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQotICAgICAgICB7Ci0gICAg
ICAgIH0KLQotICAgICAgICBsb25nIHNlZWQ7Ci0gICAgICAgIGludCBsYXR0aWNlU2VsZWN0b3Jb
MiAqIHNfYmxvY2tTaXplICsgMl07Ci0gICAgICAgIGZsb2F0IGdyYWRpZW50WzRdWzIgKiBzX2Js
b2NrU2l6ZSArIDJdWzJdOwotICAgICAgICBJbnRTaXplIGZpbHRlclNpemU7Ci0gICAgICAgIGZs
b2F0IGJhc2VGcmVxdWVuY3lYOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsKLQotICAg
ICAgICBpbmxpbmUgbG9uZyByYW5kb20oKTsKLSAgICB9OwotCi0gICAgc3RydWN0IFN0aXRjaERh
dGEgewotICAgICAgICBTdGl0Y2hEYXRhKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIGludCB3aWR0
aCB7IDAgfTsgLy8gSG93IG11Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgot
ICAgICAgICBpbnQgd3JhcFggeyAwIH07IC8vIE1pbmltdW0gdmFsdWUgdG8gd3JhcC4KLSAgICAg
ICAgaW50IGhlaWdodCB7IDAgfTsKLSAgICAgICAgaW50IHdyYXBZIHsgMCB9OwotICAgIH07Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpv
YnM7Ci0KLSAgICBzdHJ1Y3QgRmlsbFJlZ2lvblBhcmFtZXRlcnMgewotICAgICAgICBGRVR1cmJ1
bGVuY2UqIGZpbHRlcjsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7Ci0g
ICAgICAgIFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOwotICAgICAgICBTdGl0Y2hEYXRhIHN0
aXRjaERhdGE7Ci0gICAgICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgIH07
Ci0KLSAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJz
Kik7Ci0KLSAgICBGRVR1cmJ1bGVuY2UoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBm
bG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgRkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBl
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3Rh
dmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAogICAgIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVUdXJidWxlbmNlIjsgfQogCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNs
b3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRl
clJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAgU3RpdGNoRGF0
YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5
WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiwgY29uc3QgU3RpdGNoRGF0YSYsIGNv
bnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4g
Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3Rp
dGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZmlsbFJlZ2lvbihV
aW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBz
dGFydFksIGludCBlbmRZKSBjb25zdDsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91
dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKHZv
aWQqKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBp
bnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBUdXJidWxlbmNlVHlwZSBtX3R5cGU7CisgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdCBvdmVycmlkZTsKKworICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHVyYnVsZW5j
ZVR5cGU7CiAgICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WDsKICAgICBmbG9hdCBtX2Jhc2VGcmVx
dWVuY3lZOwogICAgIGludCBtX251bU9jdGF2ZXM7CkBAIC0xMzEsNCArNzgsMyBAQCBwcml2YXRl
OgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJmODdi
NTk5ZTBkNTk3MzM4MmZhNTQ4NjFhYjZkMmZkN2RkNTVjZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcApAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGaWx0ZXI6OkZpbHRlcihSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIFR5
cGUgdHlwZSkKKyAgICA6IEZpbHRlckZ1bmN0aW9uKHR5cGUpCisgICAgLCBtX3JlbmRlcmluZ01v
ZGUocmVuZGVyaW5nTW9kZSkKK3sKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8SW1hZ2VCdWZmZXI+
LCBGbG9hdFJlY3Q+IEZpbHRlcjo6YXBwbHkoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBzdGQ6
OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgRmls
dGVyUmVzdWx0VmVjdG9yIHN0YWNrOworICAgIEZpbHRlck91dHB1dCBvdXRwdXQoV1RGTW92ZShn
ZW9tZXRyeSksIG1fcmVuZGVyaW5nTW9kZSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGFwcGx5KG91
dHB1dCwgc3RhY2ssIHNvdXJjZUltYWdlKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIEFTU0VSVChzdGFjay5pc0VtcHR5KCkpOworICAgIHJlc3VsdC0+dHJh
bnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICBy
ZXR1cm4geyByZXN1bHQtPmltYWdlQnVmZmVyKCksIHJlc3VsdC0+YWJzb2x1dGVEcmF3aW5nUmVj
dCgpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IGEyZDk5NzkzYjBkYjIy
NThiYzQ3NmRkY2MyOWMwY2UyNjExMGJjMWYuLjMzMGRmZDg4NzgzZTk2MDAyMTAzODZiZmU5NDIx
ZmZiY2Q4ZjRhODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MCw1OSArMjEsMjYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIK
KyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgRmlsdGVyRWZmZWN0OworY2xhc3MgRmlsdGVyIDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsK
KyAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6YXBwbHk7CiAKLWNsYXNzIEZpbHRlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZpbHRlcj4gewogcHVibGljOgotICAgIEZpbHRlcihjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBmbG9hdCBmaWx0ZXJTY2FsZSA9IDEpCi0gICAg
ICAgIDogbV9hYnNvbHV0ZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybSkKLSAgICAgICAgLCBt
X2ZpbHRlclNjYWxlKGZpbHRlclNjYWxlKQotICAgIHsgfQotICAgIHZpcnR1YWwgfkZpbHRlcigp
ID0gZGVmYXVsdDsKLQotICAgIHZvaWQgc2V0U291cmNlSW1hZ2UoUmVmUHRyPEltYWdlQnVmZmVy
PiYmIHNvdXJjZUltYWdlKSB7IG1fc291cmNlSW1hZ2UgPSBXVEZNb3ZlKHNvdXJjZUltYWdlKTsg
fQotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgpIHsgcmV0dXJuIG1fc291cmNlSW1hZ2Uu
Z2V0KCk7IH0KLQotICAgIEZsb2F0U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZXNvbHV0aW9uKGNv
bnN0IEZsb2F0U2l6ZSYgZmlsdGVyUmVzb2x1dGlvbikgeyBtX2ZpbHRlclJlc29sdXRpb24gPSBm
aWx0ZXJSZXNvbHV0aW9uOyB9Ci0KLSAgICBmbG9hdCBmaWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmlsdGVyU2NhbGU7IH0KLSAgICB2b2lkIHNldEZpbHRlclNjYWxlKGZsb2F0IHNjYWxl
KSB7IG1fZmlsdGVyU2NhbGUgPSBzY2FsZTsgfQotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVUcmFuc2Zvcm07
IH0KLQogICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVuZGVyaW5nTW9kZTsgfQotICAgIHZvaWQgc2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0gcmVuZGVyaW5nTW9kZTsgfQotCi0g
ICAgdmlydHVhbCBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0g
ICAgdmlydHVhbCBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSBz
aXplKSBjb25zdCB7IHJldHVybiBzaXplICogbV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAgCi0g
ICAgdmlydHVhbCBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0ID0gMDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGQ6OnR1cGxlPFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gYXBwbHko
SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+
JiYpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgRmlsdGVyKGNvbnN0IEZsb2F0
U2l6ZSYgZmlsdGVyUmVzb2x1dGlvbikKLSAgICAgICAgOiBtX2ZpbHRlclJlc29sdXRpb24oZmls
dGVyUmVzb2x1dGlvbikKLSAgICB7Ci0gICAgfQorICAgIEZpbHRlcihSZW5kZXJpbmdNb2RlLCBU
eXBlKTsKKworICAgIHZpcnR1YWwgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0
ID0gMDsKIAotcHJpdmF0ZToKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7
Ci0gICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
bV9hYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKLSAgICBmbG9hdCBtX2ZpbHRlclNjYWxl
IHsgMSB9OworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IGZiNjc3NTRlNGZjNWJiY2E1
MWMzNDhlYzdmNjNlNGNjOTI3ZGIxMDguLmZjYTg0NmRmMTU4ZTNlNmE5M2MwZDA2ZDViM2EzOWJj
M2RmNTkwOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI0LDY2MCArMjQsMzcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkNv
bG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
LQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1fbmVvbi5oPgot
I2VuZGlmCi0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2Vs
ZXJhdGUuaD4KLSNlbmRpZgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyJiBmaWx0ZXIs
IFR5cGUgdHlwZSkKLSAgICA6IG1fZmlsdGVyKGZpbHRlcikKLSAgICAsIG1fZmlsdGVyRWZmZWN0
Q2xhc3NUeXBlKHR5cGUpCi17Ci19Ci0KLUZpbHRlckVmZmVjdDo6fkZpbHRlckVmZmVjdCgpID0g
ZGVmYXVsdDsKLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkKLXsKLSAgICBtX2Fic29sdXRlUGFpbnRSZWN0ID0gSW50UmVjdCgpOwotICAgIGZvciAoYXV0
byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3Qu
dW5pdGUoZWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBjbGlwQWJzb2x1dGVQYWlu
dFJlY3QoKTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsaXBBYnNvbHV0ZVBhaW50UmVjdCgp
CitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewot
ICAgIC8vIEZpbHRlcnMgaW4gU1ZHIGNsaXAgdG8gcHJpbWl0aXZlIHN1YnJlZ2lvbiwgd2hpbGUg
Q1NTIGRvZXNuJ3QuCi0gICAgaWYgKG1fY2xpcHNUb0JvdW5kcykKLSAgICAgICAgbV9hYnNvbHV0
ZVBhaW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChtX21heEVmZmVjdFJlY3QpKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QudW5pdGUoZW5jbG9zaW5nSW50
UmVjdChtX21heEVmZmVjdFJlY3QpKTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3Q7CisgICAg
Zm9yIChhdXRvJiBpbnB1dCA6IGlucHV0cykKKyAgICAgICAgZHJhd2luZ1JlY3QudW5pdGUoaW5w
dXQtPmRyYXdpbmdSZWN0KCkpOworICAgIHJldHVybiBnZW9tZXRyeS5tYXhEcmF3aW5nUmVjdChp
bnB1dHMsIGRyYXdpbmdSZWN0KTsKIH0KIAotRmxvYXRQb2ludCBGaWx0ZXJFZmZlY3Q6Om1hcFBv
aW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQgdXNlclNwYWNlUG9pbnQpIGNvbnN0
CitGaWx0ZXJSZXN1bHQqIEZpbHRlckVmZmVjdDo6YXBwbHlQbGF0Zm9ybShGaWx0ZXJPdXRwdXQm
IG91dHB1dCwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSkgY29uc3QKIHsKLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9pbnQgPSBtYXBQ
b2ludCh1c2VyU3BhY2VQb2ludCwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24sIG1fYWJzb2x1
dGVVbmNsaXBwZWRTdWJyZWdpb24pOwotICAgIGFic29sdXRlUG9pbnQubW92ZUJ5KC1tX2Fic29s
dXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBhYnNvbHV0ZVBvaW50OwotfQot
Ci1JbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGNvbnN0IEludFJlY3QmIGVmZmVjdFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgbG9jYXRp
b24gPSBtX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCk7Ci0gICAgbG9jYXRpb24ubW92ZUJ5
KC1lZmZlY3RSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci19Ci0KLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6
OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QK
LXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotCi0gICAgRmxvYXRTaXplIHNjYWxlOwotICAg
IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgc2Nh
bGUpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKLSAgICB0cmFuc2Zvcm0uc2Nh
bGUoc2NhbGUpLnRyYW5zbGF0ZSgtbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpKTsKLSAg
ICByZXR1cm4gdHJhbnNmb3JtLm1hcFJlY3Qoc3JjUmVjdCk7Ci19Ci0KLUZsb2F0UmVjdCBGaWx0
ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCi17Ci0gICAgLy8g
RkVUaWxlLCBGRVR1cmJ1bGVuY2UsIEZFRmxvb2QgZG9uJ3QgaGF2ZSBpbnB1dCBlZmZlY3RzLCB0
YWtlIHRoZSBmaWx0ZXIgcmVnaW9uIGFzIHVuaXRlIHJlY3QuCi0gICAgRmxvYXRSZWN0IHN1YnJl
Z2lvbjsKLSAgICBpZiAodW5zaWduZWQgbnVtYmVyT2ZJbnB1dEVmZmVjdHMgPSBpbnB1dEVmZmVj
dHMoKS5zaXplKCkpIHsKLSAgICAgICAgc3VicmVnaW9uID0gaW5wdXRFZmZlY3QoMCktPmRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgbnVtYmVyT2ZJbnB1dEVmZmVjdHM7ICsraSkgewotICAgICAgICAgICAgYXV0byBp
bnB1dFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KGkpLT5kZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICAgICAgICAgIHN1YnJlZ2lvbi51bml0ZShpbnB1dFBy
aW1pdGl2ZVN1YnJlZ2lvbik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgc3VicmVn
aW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIC8vIEFmdGVy
IGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0YXJnZXQg
ZWZmZWN0LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KLSAgICBpZiAo
ZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVUaWxlKQotICAgICAgICBzdWJy
ZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAgYXV0byBi
b3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllcygpOwotICAgIGlmIChoYXNYKCkpCi0gICAgICAg
IHN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJpZXMueCgpKTsKLSAgICBpZiAoaGFzWSgpKQotICAgICAg
ICBzdWJyZWdpb24uc2V0WShib3VuZGFyaWVzLnkoKSk7Ci0gICAgaWYgKGhhc1dpZHRoKCkpCi0g
ICAgICAgIHN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFyaWVzLndpZHRoKCkpOwotICAgIGlmICho
YXNIZWlnaHQoKSkKLSAgICAgICAgc3VicmVnaW9uLnNldEhlaWdodChib3VuZGFyaWVzLmhlaWdo
dCgpKTsKLQotICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24pOwotCi0g
ICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IG1fZmlsdGVyLmFic29sdXRlVHJhbnNmb3JtKCku
bWFwUmVjdChzdWJyZWdpb24pOwotICAgIGF1dG8gZmlsdGVyUmVzb2x1dGlvbiA9IG1fZmlsdGVy
LmZpbHRlclJlc29sdXRpb24oKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0ZXJS
ZXNvbHV0aW9uKTsKLSAgICAvLyBTYXZlIHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1
c2UgaXQgdG8gbWFwIGxpZ2h0aW5nIHBvaW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNv
b3JkaW5hdGVzLgotICAgIHNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3Vi
cmVnaW9uKTsKLQotICAgIC8vIENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVy
IHJlZ2lvbi4KLSAgICBhdXRvIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uID0gbV9maWx0ZXIu
ZmlsdGVyUmVnaW9uKCk7Ci0gICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmls
dGVyUmVzb2x1dGlvbik7Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFic29sdXRl
U2NhbGVkRmlsdGVyUmVnaW9uKTsKLQotICAgIHNldE1heEVmZmVjdFJlY3QoYWJzb2x1dGVTdWJy
ZWdpb24pOwotICAgIHJldHVybiBzdWJyZWdpb247Ci19Ci0KLUZpbHRlckVmZmVjdCogRmlsdGVy
RWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obnVtYmVyIDwgbV9pbnB1dEVmZmVjdHMuc2l6ZSgp
KTsKLSAgICByZXR1cm4gbV9pbnB1dEVmZmVjdHMuYXQobnVtYmVyKS5nZXQoKTsKLX0KLQotc3Rh
dGljIHVuc2lnbmVkIGNvbGxlY3RFZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdCplZmZlY3QsIEhh
c2hTZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4mIGFsbEVmZmVjdHMpCi17Ci0gICAgYWxsRWZmZWN0
cy5hZGQoZWZmZWN0KTsKLSAgICB1bnNpZ25lZCBzaXplID0gZWZmZWN0LT5udW1iZXJPZkVmZmVj
dElucHV0cygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGVmZmVjdC0+aW5wdXRFZmZlY3QoaSk7Ci0gICAgICAg
IGNvbGxlY3RFZmZlY3RzKGluLCBhbGxFZmZlY3RzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFsbEVm
ZmVjdHMuc2l6ZSgpOwotfQotCi11bnNpZ25lZCBGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZF
ZmZlY3RJbnB1dHMoKSBjb25zdAotewotICAgIEhhc2hTZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4g
YWxsRWZmZWN0czsKLSAgICByZXR1cm4gY29sbGVjdEVmZmVjdHModGhpcywgYWxsRWZmZWN0cyk7
Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCi17Ci0gICAgaWYgKGhhc1Jlc3VsdCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG1faW5wdXRFZmZlY3RzLnNp
emUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
IEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQoKTsKLSAgICAgICAg
aW4tPmFwcGx5KCk7Ci0gICAgICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIC8vIENvbnZlcnQgaW5wdXQgcmVzdWx0cyB0byB0aGUgY3VycmVu
dCBlZmZlY3QncyBjb2xvciBzcGFjZS4KLSAgICAgICAgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShpbiwgaSk7Ci0gICAgfQotCi0gICAgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAg
ICBzZXRSZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0KLSAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJO
YW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOlxuICBmaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA8PCAiXG4gIGVmZmVjdEJvdW5k
YXJpZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMgPDwgIlxuICBhYnNvbHV0ZVVuY2xpcHBlZFN1
YnJlZ2lvbiAiIDw8IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gPDwgIlxuICBhYnNvbHV0
ZVBhaW50UmVjdCAiIDw8IG1fYWJzb2x1dGVQYWludFJlY3QgPDwgIlxuICBtYXhFZmZlY3RSZWN0
ICIgPDwgbV9tYXhFZmZlY3RSZWN0IDw8ICJcbiAgZmlsdGVyIHNjYWxlICIgPDwgbV9maWx0ZXIu
ZmlsdGVyU2NhbGUoKSA8PCAiXG4gIGZpbHRlciByZXNvbHV0aW9uICIgPDwgbV9maWx0ZXIuZmls
dGVyUmVzb2x1dGlvbigpKTsKKyAgICBhdXRvIGRyYXdpbmdSZWN0ID0gdGhpcy0+ZHJhd2luZ1Jl
Y3QoaW5wdXRzLCBvdXRwdXQuZ2VvbWV0cnkoKSk7CiAKLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50
UmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKG1fYWJzb2x1
dGVQYWludFJlY3Quc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHJlcXVpcmVz
VmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGlucHV0RWZmZWN0KGkpLT5jb3JyZWN0Rmls
dGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQWRkIHBsYXRmb3JtIHNw
ZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4KLSAgICBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQ
cmVNdWx0aXBsaWVkUGl4ZWxzKCkKLXsKLSAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRp
cGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4K
LSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKLSAgICBpbnQg
cGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7Ci0KLSAgICAvLyBXZSBtdXN0
IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKLSAgICBBU1NF
UlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOwotCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5T
SUNTKQotICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7Ci0gICAgICAgIHVpbnQ4X3Qq
IGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOwotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVsRGF0YSBieSA2NC4KLSAg
ICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0gdmxkNHFfdTgocGl4ZWxEYXRh
KTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0gdm1pbnFfdTgoc2l4dGVlblBp
eGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5Q
aXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMV0sIHNpeHRlZW5QaXhl
bHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzJdID0gdm1pbnFfdTgo
c2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAg
IHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0gICAgICAgICAgICBwaXhlbERh
dGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8IGxhc3RQaXhlbCk7Ci0KLSAg
ICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOwotICAgICAgICBpZiAoIXBpeGVsQXJyYXlM
ZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpbnQgbnVt
UGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgZWFj
aCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlm
IG5lY2Vzc2FyeQotICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAwKSB7Ci0gICAgICAgIC8vIEFs
cGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0gICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4
ZWxEYXRhICsgMyk7Ci0gICAgICAgIC8vIENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBh
bmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDM7ICsraSkgewotICAgICAgICAgICAgaWYgKCpwaXhlbERhdGEgPiBhKQotICAgICAgICAg
ICAgICAgICpwaXhlbERhdGEgPSBhOwotICAgICAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgICAg
IH0KLSAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQotICAgICAgICArK3BpeGVsRGF0YTsK
LSAgICB9Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCi17Ci0gICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6
bnVsbG9wdDsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgp
Ci17Ci0gICAgLy8gQ2xlYXIgYWxsIHJlc3VsdHMsIHJlZ2FyZGxlc3MgdGhhdCB0aGUgY3VycmVu
dCBlZmZlY3QgaGFzCi0gICAgLy8gYSByZXN1bHQuIENhbiBiZSB1c2VkIGlmIGFuIGVmZmVjdCBp
cyBpbiBhbiBlcnJvbmVvdXMgc3RhdGUuCi0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICBj
bGVhclJlc3VsdCgpOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1faW5wdXRFZmZlY3RzLnNpemUo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBtX2lu
cHV0RWZmZWN0cy5hdChpKS5nZXQoKS0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7Ci19Ci0KLUlt
YWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKLXsKLSAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJO
YW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBp
bWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7
Ci0KLSAgICBpZiAoIWhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJl
c3VsdC5nZXQoKTsKLQotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCks
IG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6
OkJHUkE4KTsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIGVsc2UKLSAgICAgICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojp1bm11
bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplKHJl
Y3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhz
Y2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93
PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgIGF1dG8g
cmVzdWx0ID0gb3V0cHV0LmNyZWF0ZUZpbHRlclJlc3VsdChkcmF3aW5nUmVjdCwgRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFy
cmF5LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJheTsKLX0KLQotUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQo
Y29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+
IGNvbG9yU3BhY2UpCi17Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAg
ICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0g
ICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGNo
ZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBp
ZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVj
dCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19Ci0KLXZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0
Ci17Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwotICAgIHNjYWxlZFJlY3Quc2NhbGUo
bV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9u
IHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291
cmNlLgotICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8
IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVj
dC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1lbXNldChkZXN0
aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsKLQotICAgIC8vIEVhcmx5
IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgot
ICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAg
fHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVj
dC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICByZXR1cm47CiAKLSAg
ICBpbnQgeE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOwotICAgIGludCB4RGVzdCA9IDA7Ci0gICAg
aWYgKHhPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHhEZXN0ID0gLXhPcmlnaW47Ci0gICAgICAgIHhP
cmlnaW4gPSAwOworI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGlmIChvdXRwdXQucmVuZGVyaW5n
TW9kZSgpID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7CisgICAgICAgIGlmIChhcHBs
eUNvcmVJbWFnZShpbnB1dHMsIHNvdXJjZUltYWdlLCAqcmVzdWx0KSkKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQubGVha1JlZigpOwogICAgIH0KLSAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3Qu
bWF4WCgpOwotICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAg
IHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsKLQotICAgIGludCB5T3JpZ2luID0gc2Nh
bGVkUmVjdC55KCk7Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAgICBpZiAoeU9yaWdpbiA8IDApIHsK
LSAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKLSAgICAgICAgeU9yaWdpbiA9IDA7Ci0gICAgfQot
ICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlFbmQgPiBzY2FsZWRQ
YWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0
KCk7Ci0KLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OwotICAgIGludCBkZXN0
aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICogNDsKLSAgICBpbnQgc291cmNl
U2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdWludDhfdCogZGVz
dGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0
LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9
IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4
T3JpZ2luKSAqIDQ7Ci0KLSAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKLSAgICAgICAgbWVt
Y3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKLSAgICAgICAgZGVzdGlu
YXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOwotICAgICAgICBzb3VyY2VQaXhlbCAr
PSBzb3VyY2VTY2FubGluZTsKLSAgICAgICAgKyt5T3JpZ2luOwotICAgIH0KLX0KLQotc3RhdGlj
IHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1
dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5w
dXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndp
ZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWln
aHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBk
ZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdo
dCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0g
ICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgp
KTsKLQotICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJ
bWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQg
PSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVu
dCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5h
dGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLQotICAgIHdoaWxlIChzb3VyY2VD
b21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNd
OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8g
MjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4o
c291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RhdGlj
IHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlu
cHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBp
bnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMu
d2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhl
aWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsK
LSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRh
KCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3Qs
IGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9u
ZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21w
b25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVz
dGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0gICAgd2hpbGUgKHNvdXJj
ZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRb
M107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBo
YTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50
Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAq
IDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAw
OwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOwotICAgICAgICB9Ci0g
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNv
bXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0K
LSNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNv
bnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikKLXsKLSAgICAvLyBG
SVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0aGUgY29sb3Igc3BhY2UgY29u
dmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRpcmVjdGx5LgotCi0gICAgSW50
UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKLSAg
ICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAvIG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAg
IEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0aW5h
dGlvblJlY3Quc2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUg
aW5jb21pbmcgUGl4ZWxCdWZmZXIKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAg
IGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIGJ1ZmZlci0+
cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJu
IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNwYWNlLCAqYnVmZmVy
LCBkZXN0aW5hdGlvblJlY3QsIHBpeGVsQnVmZmVyLmZvcm1hdCgpLmFscGhhRm9ybWF0KTsKLX0K
LQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VC
dWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiB0YXJnZXRDb2xv
clNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0QWxwaGFGb3JtYXQpCi17Ci0gICAgLy8gRklYTUU6
IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBkaXJlY3RseSB1c2luZyBQaXhlbEJ1ZmZlckNvbnZlcnNp
b24uCi0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNp
emUocmVjdC5zaXplKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhl
IGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNl
IGNvbnZlcnNpb24KLSAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAo
IWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIC8v
IENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBm
cm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4
ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgdGFyZ2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdl
dFBpeGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17
Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQs
IGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9
IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZl
clJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRw
dXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVy
bjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0
aW5hdGlvbiwgZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRl
ZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBj
b2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0
aGUgZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwKLSAgICAvLyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8g
ZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydFBpeGVs
QnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVsQnVmZmVyKTsKLSAgICBpZiAoIWNv
bnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMo
Y29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0K
LQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0
KCkpOwotICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRl
ckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRp
cGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJl
c3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1h
Z2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAg
ICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNl
KSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRp
b24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2Uo
KSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQg
Zm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAg
ICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZSht
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6
ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgQVNTRVJUKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNl
ID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBm
b3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6
ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSht
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlcXVp
cmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAg
ICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29w
eVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29s
b3JTcGFjZSkKLXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotCi0gICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8
ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1h
Z2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwot
Ci0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBw
cmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1f
aW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVy
Q29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5
Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9p
bWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0g
ICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFj
ZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVm
ZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsK
LSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0
U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxl
KCkpOwotCi0gICAgICAgICAgICBBU1NFUlQobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9y
bWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4
ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAg
ICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShm
b3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlQcmVtdWx0
aXBseWluZ0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JT
cGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihk
ZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVj
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi1JbWFn
ZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0gICAg
TE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQg
JWR4JWQiLCBmaWx0ZXJOYW1lKCksIHRoaXMsIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLndp
ZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIC8vIE9u
bHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7
Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJl
c3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmlu
Z01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhl
bEZvcm1hdDo6QkdSQTgpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwot
fQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3Qg
JXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMp
OwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NFUlQo
IWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwot
Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIu
ZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVz
dWx0Q29sb3JTcGFjZSB9OwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1
ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZp
bHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlz
IGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAg
IEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNT
RVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJl
c3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXpl
KTsKLSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLWJvb2wgRmls
dGVyRWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsK
LSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2Ug
bmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgLy8g
V2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBp
cyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0Ci0gICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFu
aXB1bGF0aW5nIHJhdyBwaXhlbHMKLSAgICByZXR1cm4gZGVzdGluYXRpb25Db2xvclNwYWNlICYm
IHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZGVzdGluYXRpb25Db2xvclNwYWNlOwotI2Vsc2UKLSAg
ICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBu
b24tQ0cKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBkZXN0aW5hdGlvbkNvbG9y
U3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRq
dXN0bWVudHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNw
YWNlKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQoKSB8fCBkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhN
RTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIg
Y29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9y
dCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1
bHQoKS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0KLSAg
ICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5hdGlvbkNvbG9yU3BhY2U7Ci0KLSAgICBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwogI2VuZGlmCi19CiAKLVRleHRTdHJlYW0mIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGR1bXAgdGhlIHN1YlJlZ2lvbnMgb2YgdGhlIGZpbHRlciBwcmltaXRpdmVzIGhl
cmUgbGF0ZXIuIFRoaXMgaXNuJ3QKLSAgICAvLyBwb3NzaWJsZSBhdCB0aGUgbW9tZW50LCBiZWNh
dXNlIHdlIG5lZWQgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgdGFyZ2V0IG9i
amVjdC4KLSAgICAKLSAgICBpZiAocmVwcmVzZW50YXRpb25UeXBlID09IFJlcHJlc2VudGF0aW9u
VHlwZTo6RGVidWdnaW5nKSB7Ci0gICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVu
dFNjb3BlKHRzKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSBpbWFnZSIsIG1fYWxw
aGFJbWFnZSk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5nIGNvbG9yc3BhY2Ui
LCBtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3Vs
dCBjb2xvcnNwYWNlIiwgbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgdHMgPDwgIlxuIiA8
PCBpbmRlbnQ7Ci0gICAgfQotICAgIHJldHVybiB0czsKLX0KKyAgICBpZiAoYXBwbHlTb2Z0d2Fy
ZShpbnB1dHMsIHNvdXJjZUltYWdlLCAqcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5s
ZWFrUmVmKCk7CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IEZpbHRlckVmZmVjdCYgZmlsdGVyKQotewotICAgIC8vIFVzZSBhIG5ldyBzdHJlYW0gYmVjYXVz
ZSB3ZSB3YW50IG11bHRpbGluZSBtb2RlIGZvciBsb2dnaW5nIGZpbHRlcnMuCi0gICAgVGV4dFN0
cmVhbSBmaWx0ZXJTdHJlYW07Ci0gICAgZmlsdGVyLmV4dGVybmFsUmVwcmVzZW50YXRpb24oZmls
dGVyU3RyZWFtLCBGaWx0ZXJFZmZlY3Q6OlJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKTsK
LSAgICAKLSAgICByZXR1cm4gdHMgPDwgZmlsdGVyU3RyZWFtLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5k
ZXggYmZhODc3Y2FhM2U1ZjQyMTFmNzM5YzFiZTM3NjcwN2RmNmVjZDJhNi4uNmQxNDc4MjMxYTFh
NGRmMTg1ZDY1Zjk2ZGE0ZDFmZDJhYmUzNTNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0yMiwyMzcg
KzIyLDM2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oIgotI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0RXh0ZW50
LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19Cisj
aW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlcjsKLWNsYXNzIEZpbHRlckVmZmVjdDsK
LWNsYXNzIEltYWdlQnVmZmVyOwotCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0
Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwotCi1lbnVtIEZpbHRlckVmZmVjdFR5cGUgewotICAgIEZp
bHRlckVmZmVjdFR5cGVVbmtub3duLAotICAgIEZpbHRlckVmZmVjdFR5cGVJbWFnZSwKLSAgICBG
aWx0ZXJFZmZlY3RUeXBlVGlsZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQKLX07
CitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKIAotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJl
ZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmls
dGVyRnVuY3Rpb24gewogcHVibGljOgotICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qgewot
ICAgICAgICBCbGVuZCwKLSAgICAgICAgQ29sb3JNYXRyaXgsCi0gICAgICAgIENvbXBvbmVudFRy
YW5zZmVyLAotICAgICAgICBDb21wb3NpdGUsCi0gICAgICAgIENvbnZvbHZlTWF0cml4LAotICAg
ICAgICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIERpc3BsYWNlbWVudE1hcCwKLSAgICAgICAg
RHJvcFNoYWRvdywKLSAgICAgICAgRmxvb2QsCi0gICAgICAgIEdhdXNzaWFuQmx1ciwKLSAgICAg
ICAgSW1hZ2UsCi0gICAgICAgIExpZ2h0aW5nLAotICAgICAgICBNZXJnZSwKLSAgICAgICAgTW9y
cGhvbG9neSwKLSAgICAgICAgT2Zmc2V0LAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nLAotICAg
ICAgICBUaWxlLAotICAgICAgICBUdXJidWxlbmNlLAotICAgICAgICBTb3VyY2VBbHBoYSwKLSAg
ICAgICAgU291cmNlR3JhcGhpYwotICAgIH07Ci0gICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7
Ci0KLSAgICB2b2lkIGNsZWFyUmVzdWx0KCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNp
dmUoKTsKLQotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gdW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBz
dGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRS
ZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0
KTsKLSAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQot
ICAgIEZpbHRlckVmZmVjdCogaW5wdXRFZmZlY3QodW5zaWduZWQpIGNvbnN0OwotICAgIHVuc2ln
bmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMu
c2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0
OwotICAgIAotICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhl
IG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0g
ICAgfQotCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50
UmVjdCYpIGNvbnN0OwotICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVm
ZmVyKGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICAKLSAgICAvLyBSZWN1cnNlcyBvbiBpbnB1
dHMuCi0gICAgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwot
Ci0gICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBkaWZmZXJlbnQgYWxwaGEgdmFsdWVzLgot
ICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUltYWdlOyB9Ci0g
ICAgdm9pZCBzZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdlKSB7IG1fYWxwaGFJbWFnZSA9
IGFscGhhSW1hZ2U7IH0KLQotICAgIEludFJlY3QgYWJzb2x1dGVQYWludFJlY3QoKSBjb25zdCB7
IHJldHVybiBtX2Fic29sdXRlUGFpbnRSZWN0OyB9Ci0gICAgdm9pZCBzZXRBYnNvbHV0ZVBhaW50
UmVjdChjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZVBhaW50UmVjdCkgeyBtX2Fic29sdXRlUGFpbnRS
ZWN0ID0gYWJzb2x1dGVQYWludFJlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9tYXhFZmZlY3RSZWN0OyB9Ci0gICAgdm9pZCBzZXRNYXhFZmZl
Y3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBtX21heEVmZmVjdFJlY3Qg
PSBtYXhFZmZlY3RSZWN0OyB9IAotCi0gICAgdm9pZCBhcHBseSgpOwotCi0gICAgLy8gQ29ycmVj
dCBhbnkgaW52YWxpZCBwaXhlbHMsIGlmIG5lY2Vzc2FyeSwgaW4gdGhlIHJlc3VsdCBvZiBhIGZp
bHRlciBvcGVyYXRpb24uCi0gICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBlbnN1cmUgdmFs
aWQgcGl4ZWwgdmFsdWVzIG9uIGZpbHRlciBpbnB1dHMgYW5kIHRoZSBmaW5hbCByZXN1bHQuCi0g
ICAgLy8gT25seSB0aGUgYXJpdGhtZXRpYyBjb21wb3NpdGUgZmlsdGVyIGV2ZXIgbmVlZHMgdG8g
cGVyZm9ybSBjb3JyZWN0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0
SWZOZWVkZWQoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpOwotCi0gICAgdmlydHVhbCBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUo
KSBjb25zdCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93bjsgfQotCi0gICAgdmlydHVh
bCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiBJbnRPdXRzZXRzKCk7IH0KLQot
ICAgIGVudW0gY2xhc3MgUmVwcmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5n
IH07Ci0gICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlID0gUmVwcmVzZW50YXRpb25UeXBl
OjpUZXN0T3V0cHV0KSBjb25zdDsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFy
ZSBTVkcgc3BlY2lmaWMgYW5kIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZS4KLSAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NTYxNC4KLSAgICBib29sIGhhc1goKSBjb25zdCB7IHJldHVybiBtX2hhc1g7IH0K
LSAgICB2b2lkIHNldEhhc1goYm9vbCB2YWx1ZSkgeyBtX2hhc1ggPSB2YWx1ZTsgfQotCi0gICAg
Ym9vbCBoYXNZKCkgY29uc3QgeyByZXR1cm4gbV9oYXNZOyB9Ci0gICAgdm9pZCBzZXRIYXNZKGJv
b2wgdmFsdWUpIHsgbV9oYXNZID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzV2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX2hhc1dpZHRoOyB9Ci0gICAgdm9pZCBzZXRIYXNXaWR0aChib29sIHZhbHVl
KSB7IG1faGFzV2lkdGggPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNIZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX2hhc0hlaWdodDsgfQotICAgIHZvaWQgc2V0SGFzSGVpZ2h0KGJvb2wgdmFsdWUp
IHsgbV9oYXNIZWlnaHQgPSB2YWx1ZTsgfQotCi0gICAgRmxvYXRSZWN0IGZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9
Ci0gICAgdm9pZCBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pIHsgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPSBm
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KLQotICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFy
aWVzKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRF
ZmZlY3RCb3VuZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykgeyBtX2Vm
ZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgCi0gICAgdm9pZCBzZXRV
bmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9hYnNvbHV0
ZVVuY2xpcHBlZFN1YnJlZ2lvbiA9IHI7IH0KLSAgICAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50
RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQpIGNvbnN0OwotICAgIAotICAgIFR5cGUg
ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFz
c1R5cGU7IH0KLQotICAgIEZpbHRlciYgZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAg
ICBjb25zdCBGaWx0ZXImIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KLSAg
ICBib29sIGNsaXBzVG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0K
LSAgICB2b2lkIHNldENsaXBzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMg
PSB2YWx1ZTsgfQotCi0gICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdD
b2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9Ci0gICAg
dmlydHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7
IH0KLSAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBj
b25zdCB7IHJldHVybiBtX3Jlc3VsdENvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2Up
IHsgbV9yZXN1bHRDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQotCi0gICAgdmlydHVhbCB2b2lk
IHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7
IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0K
LSAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJik7Ci0gICAgCi0gICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0gICAgewotICAgICAgICBWZWN0b3I8Zmxv
YXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm9ybWFsaXplZFZh
bHVlc1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9y
bWFsaXplZFZhbHVlczsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3QoRmls
dGVyJiwgVHlwZSk7Ci0gICAgCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkg
Y29uc3QgPSAwOwogCi0gICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOwotCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3
aWxsIG9ubHkgb3BlcmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKLSAg
ICAvLyBhbHBoYSBpbiBbMCwyNTVdIGFuZCBlYWNoIGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxw
aGFdLgotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygp
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIElmIGEgcHJlLW11bHRpcGxpZWQgaW1hZ2UsIGNo
ZWNrIGV2ZXJ5IHBpeGVsIGZvciB2YWxpZGl0eSBhbmQgY29ycmVjdCBpZiBuZWNlc3NhcnkuCi0g
ICAgdm9pZCBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOwotCi0gICAgdm9pZCBjbGlw
QWJzb2x1dGVQYWludFJlY3QoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkgPSAwOwotCi0gICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9p
ZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5
JiwgUGl4ZWxCdWZmZXImLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgYm9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24o
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsKLSAgICBzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydFBp
eGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFBpeGVs
QnVmZmVyJik7Ci0gICAgCi0KLSAgICBGaWx0ZXImIG1fZmlsdGVyOwotICAgIEZpbHRlckVmZmVj
dFZlY3RvciBtX2lucHV0RWZmZWN0czsKLQotICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0OworcHJvdGVjdGVkOgorICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9u
OjpGaWx0ZXJGdW5jdGlvbjsKIAotICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAg
ICAKLSAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZH
IHRoaXMgaXMgdGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBz
cGFjZS4KLSAgICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmln
Z2VyIHRoYW4gbV9tYXhFZmZlY3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7
Ci0gICAgCi0gICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3Jk
aW5nIHRvIHRoZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMu
Ci0gICAgLy8gVGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uOworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Owog
Ci0gICAgLy8geCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0dWFsIFNWR0ZFKkVsZW1l
bnQuIElzIG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBvZiB0aGUKLSAgICAvLyBm
aWx0ZXIgcHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9hdFJlY3QgbV9lZmZlY3RC
b3VuZGFyaWVzOworICAgIHZpcnR1YWwgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3Vs
dCYpIGNvbnN0ID0gMDsKICAgICAKLSAgICAvLyBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gbWFw
cGVkIHRvIGFic29sdXRlIGNvb3JkaW5hdGVzIGJlZm9yZSBjbGlwcGluZy4KLSAgICBGbG9hdFJl
Y3QgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbjsKLQotICAgIGJvb2wgbV9hbHBoYUltYWdl
IHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzWCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1kg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNXaWR0aCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hh
c0hlaWdodCB7IGZhbHNlIH07Ci0KLSAgICAvLyBTaG91bGQgdGhlIGVmZmVjdCBjbGlwIHRvIGl0
cyBwcmltaXRpdmUgcmVnaW9uLCBvciBleHBhbmQgdG8gdXNlIHRoZSBjb21iaW5lZCByZWdpb24g
b2YgaXRzIGlucHV0cy4KLSAgICBib29sIG1fY2xpcHNUb0JvdW5kcyB7IHRydWUgfTsKLQotI2lm
IEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpMaW5lYXJTUkdCKCkgfTsKLSNlbHNlCi0gICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1f
b3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07Cisj
aWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmlydHVhbCBib29sIGFwcGx5Q29yZUltYWdlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jl
c3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwotICAgIAot
ICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7CisKKyAgICBGaWx0ZXJSZXN1
bHQqIGFwcGx5UGxhdGZvcm0oRmlsdGVyT3V0cHV0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Q7CiB9OwogCi1XRUJDT1JF
X0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29u
c3QgRmlsdGVyRWZmZWN0Jik7Cit1c2luZyBGaWx0ZXJFZmZlY3RWZWN0b3IgPSBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+OwordXNpbmcgRmlsdGVyRWZmZWN0c0lucHV0cyA9IEhhc2hNYXA8UmVm
PEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Rmls
dGVyRWZmZWN0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbiYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLnR5cGUoKSA+PSBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNaW5pbXVtICYmIGZ1bmN0aW9uLnR5cGUoKSA8PSBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNYXhpbXVtOyB9CitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5ZGE4NTVjZGI5NjMxN2I4MmRlMzU2N2ZjMzFlNWI5ZTlhOWVj
NjA1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0q
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIK
LQotI2lmIFVTRShDT1JFX0lNQUdFKQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9w
dHI8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUo
Ym9vbCBhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQsIEZpbHRlckVmZmVjdCYgbGFz
dEVmZmVjdCkKLXsKLSNpZiBVU0UoQ09SRV9JTUFHRSkKLSAgICBpZiAoYWNjZWxlcmF0ZWRGaWx0
ZXJSZW5kZXJpbmdFbmFibGVkKQotICAgICAgICByZXR1cm4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OnRyeUNyZWF0ZShsYXN0RWZmZWN0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxh
c3RFZmZlY3QpOwotI2VuZGlmCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLQotfSAvLyBuYW1z
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDU2YmUyNDczNjFmNTNiM2MwOWVjYjU3MTMyMmI3NWE3NTczZTljYzQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RS
ZW5kZXJlcj4gdHJ5Q3JlYXRlKGJvb2wsIEZpbHRlckVmZmVjdCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBhcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYXNS
ZXN1bHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVj
dCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZXN1bHQoKSA9IDA7Ci0gICAg
Ci0gICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7Ci0gICAgCi1w
cm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7Ci0gICAgdmly
dHVhbCB2b2lkIHJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgPSAwOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmZTQx
ZmRlZmM0YTAxMDUzMDBhMDI4NDBjZmEyYjhkZDQ2N2Y3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgK
QEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJSZXByZXNlbnRhdGlvbi5o
IgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIK
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFRl
eHRTdHJlYW07Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyR2VvbWV0
cnk7CitjbGFzcyBGaWx0ZXJPdXRwdXQ7CisKK2NsYXNzIEZpbHRlckZ1bmN0aW9uIDogcHVibGlj
IFJlZkNvdW50ZWQ8RmlsdGVyRnVuY3Rpb24+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5
cGUgOiB1aW50OF90IHsKKyAgICAgICAgQ1NTRmlsdGVyLAorICAgICAgICBTVkdGaWx0ZXIsCisK
KyAgICAgICAgRkVNaW5pbXVtLAorCisgICAgICAgIEZFQmxlbmQgPSBGRU1pbmltdW0sCisgICAg
ICAgIEZFQ29sb3JNYXRyaXgsCisgICAgICAgIEZFQ29tcG9uZW50VHJhbnNmZXIsCisgICAgICAg
IEZFQ29tcG9zaXRlLAorICAgICAgICBGRUNvbnZvbHZlTWF0cml4LAorICAgICAgICBGRURpZmZ1
c2VMaWdodGluZywKKyAgICAgICAgRkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAgIEZFRHJvcFNo
YWRvdywKKyAgICAgICAgRkVGbG9vZCwKKyAgICAgICAgRkVHYXVzc2lhbkJsdXIsCisgICAgICAg
IEZFSW1hZ2UsCisgICAgICAgIEZFTWVyZ2UsCisgICAgICAgIEZFTW9ycGhvbG9neSwKKyAgICAg
ICAgRkVPZmZzZXQsCisgICAgICAgIEZFU3BlY3VsYXJMaWdodGluZywKKyAgICAgICAgRkVUaWxl
LAorICAgICAgICBGRVR1cmJ1bGVuY2UsCisgICAgICAgIFNvdXJjZUFscGhhLAorICAgICAgICBT
b3VyY2VHcmFwaGljLAorCisgICAgICAgIEZFTWF4aW11bSA9IFNvdXJjZUdyYXBoaWMKKyAgICB9
OworCisgICAgRmlsdGVyRnVuY3Rpb24oVHlwZSB0eXBlKQorICAgICAgICA6IG1fdHlwZSh0eXBl
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5GaWx0ZXJGdW5jdGlvbigpID0gZGVmYXVs
dDsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgdmly
dHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiB7IH07IH0KKworICAgIHZp
cnR1YWwgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0ID0gMDsKKyAgICAKKyAg
ICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiA9IEZpbHRlclJlcHJlc2VudGF0aW9uOjpU
ZXN0T3V0cHV0KSBjb25zdCA9IDA7CisgICAgCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpD
U1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0
ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4LAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAg
ICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAor
ICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAs
CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAgICAgICBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAgICAgIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVU
dXJidWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNl
QWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFw
aGljCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41MzI3Y2MyZjRiM2VmODE0MTc2NTQxZDkzY2I2MTYwY2QzNzRkZjlmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRmlsdGVyR2VvbWV0cnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWx0ZXJHZW9t
ZXRyeTo6RmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KQorICAgIDogbV9maWx0ZXJSZWdpb24oZmlsdGVy
UmVnaW9uKQorICAgICwgbV9zb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KQoreworfQor
CitGbG9hdFJlY3QgRmlsdGVyR2VvbWV0cnk6Om1heERyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYsIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGRyYXdpbmdSZWN0OworLy8gICAgICAgIGF1dG8gbWF4RHJhd2luZ1JlY3QgPSBkcmF3
aW5nUmVjdDsKKy8vICAgICAgICBtYXhEcmF3aW5nUmVjdC5pbnRlcnNlY3QobWF4UHJpbWl0aXZl
U3VicmVnaW9uKGlucHV0cykpOworLy8gICAgICAgIHJldHVybiBtYXhEcmF3aW5nUmVjdDsKK30K
KworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjpwcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0Cit7CisgICAgaWYgKGlucHV0cy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBmaWx0ZXJSZWdpb24oKTsKKworICAgIEZsb2F0UmVjdCBzdWJy
ZWdpb247CisgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlucHV0cykKKyAgICAgICAgc3VicmVnaW9u
LnVuaXRlKGlucHV0LT5wcmltaXRpdmVTdWJyZWdpb24oKSk7CisKKyAgICByZXR1cm4gc3VicmVn
aW9uOworfQorCitGbG9hdFJlY3QgRmlsdGVyR2VvbWV0cnk6Om1heFByaW1pdGl2ZVN1YnJlZ2lv
bihjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cykgY29uc3QKK3sKKyAgICBGbG9hdFJl
Y3Qgc3VicmVnaW9uID0gcHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CisgICAgc3VicmVnaW9u
LmludGVyc2VjdChmaWx0ZXJSZWdpb24oKSk7CisgICAgcmV0dXJuIHN1YnJlZ2lvbjsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBGaWx0ZXJHZW9tZXRyeTo6ZW5jb2RlKEVu
Y29kZXImKSBjb25zdAoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGQ6Om9w
dGlvbmFsPHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4+IEZpbHRlckdlb21ldHJ5Ojpk
ZWNvZGUoRGVjb2RlciYpCit7CisgICAgcmV0dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJHZW9tZXRyeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4N2I0N2RhOWZmYTI4MmE1OTZh
MTE4Y2U3NjJmZWNmNDVlNjI5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmgKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpOworICAgIHZpcnR1YWwgfkZpbHRl
ckdlb21ldHJ5KCkgPSBkZWZhdWx0OworCisgICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9CisgICAgRmxvYXRSZWN0IHNvdXJjZUltYWdl
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0OyB9CisKKyAgICB2aXJ0dWFs
IEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBp
bnB1dHMpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHRyYW5zZm9ybVRvQWJzb2x1dGVS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QgeyByZXR1cm4gcmVjdDsgfQorCisgICAg
RmxvYXRSZWN0IG1heERyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0
IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QpIGNvbnN0OworICAgIEZsb2F0UmVjdCBtYXhQcmltaXRp
dmVTdWJyZWdpb24oY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0OworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPHN0
ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4+IGRlY29kZShEZWNvZGVyJik7CisKK3Byb3Rl
Y3RlZDoKKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisgICAgRmxvYXRSZWN0IG1fc291
cmNlSW1hZ2VSZWN0OworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0
cHV0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lY2Q3N2VhNWYwNTFlODQ1YTkzMWViYWMyYmFmZDkxZjliMzZh
NmMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPdXRwdXQuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZpbHRlck91dHB1dC5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNp
bmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWx0ZXJP
dXRwdXQ6OkZpbHRlck91dHB1dChzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYgZ2Vv
bWV0cnksIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKKyAgICA6IG1fZ2VvbWV0cnkoV1RG
TW92ZShnZW9tZXRyeSkpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKK3sK
K30KKworUmVmUHRyPEZpbHRlclJlc3VsdD4gRmlsdGVyT3V0cHV0OjpjcmVhdGVGaWx0ZXJSZXN1
bHQoY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNv
bG9yU3BhY2UpCit7CisgICAgcmV0dXJuIEZpbHRlclJlc3VsdDo6Y3JlYXRlKCptX2dlb21ldHJ5
LCBkcmF3aW5nUmVjdCwgbV9yZW5kZXJpbmdNb2RlLCAxLCBjb2xvclNwYWNlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFlOGNmZjE3M2Iw
NGU5OTM5MmFiMjdlMTQyMmFjYjRiZjUyMzllNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmgKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5
OworY2xhc3MgRmlsdGVyUmVzdWx0OworY2xhc3MgRmlsdGVyRnVuY3Rpb247CisKK2NsYXNzIEZp
bHRlck91dHB1dCB7CitwdWJsaWM6CisgICAgdXNpbmcgUmVzdWx0cyA9IEhhc2hNYXA8UmVmPGNv
bnN0IEZpbHRlckZ1bmN0aW9uPiwgUmVmPEZpbHRlclJlc3VsdD4+OworCisgICAgRmlsdGVyT3V0
cHV0KHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiwgUmVuZGVyaW5nTW9kZSk7CisK
KyAgICBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkoKSB7IHJldHVybiAqbV9nZW9tZXRyeTsgfQor
ICAgIFJlc3VsdHMmIHJlc3VsdHMoKSB7IHJldHVybiBtX3Jlc3VsdHM7IH0KKyAgICBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0K
KworICAgIFJlZlB0cjxGaWx0ZXJSZXN1bHQ+IGNyZWF0ZUZpbHRlclJlc3VsdChjb25zdCBGbG9h
dFJlY3QmIGRyYXdpbmdSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOworCitwcml2YXRlOgor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4gbV9nZW9tZXRyeTsKKyAgICBSZXN1
bHRzIG1fcmVzdWx0czsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlZmVyZW5jZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEw
M2E1YWI3NGMwOTQwZWY4YWFlMmY5Y2VlOWI3NWUyZjFkMDY1YWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlZmVyZW5j
ZS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RmlsdGVyOworCit1c2luZyBGaWx0ZXJSZWZlcmVuY2UgPSBSZWY8RmlsdGVyPjsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRkYmZmN2Q4MDQ3Y2VmOWVmNjNhMzZlY2MzNWU1ZTliMjAxMWNlZTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJl
c2VudGF0aW9uLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2VudW0gY2xhc3MgRmlsdGVyUmVwcmVzZW50YXRpb24gOiB1aW50OF90IHsKKyAgICBUZXN0T3V0
cHV0LAorICAgIERlYnVnZ2luZworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1
bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZXN1bHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlZGUyMmVkYjk3NWIwYWIwMGZlOWFkNjMwNDg3ZDhmNmQ0
ZTJlODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKQEAgLTAsMCArMSwzOTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIK
KyNpbmNsdWRlICJGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIu
aCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorI2luY2x1ZGUgIkZpbHRlclJlc3VsdENvcmVJbWFn
ZS5oIgorI2VuZGlmCisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8
YXJtX25lb24uaD4KKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNj
ZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitS
ZWZQdHI8RmlsdGVyUmVzdWx0PiBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZShjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBpZiAoZHJhd2luZ1JlY3QuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVk
c0NsYW1waW5nKGdlb21ldHJ5LnRyYW5zZm9ybVRvQWJzb2x1dGVSZWN0KGRyYXdpbmdSZWN0KS5z
aXplKCkpKTsKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBpZiAocmVuZGVyaW5nTW9kZSA9PSBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RmlsdGVyUmVzdWx0Q29yZUltYWdlKGdlb21ldHJ5LCBkcmF3aW5nUmVjdCwgcmVuZGVyaW5nTW9k
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKSk7CisjZW5kaWYKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGaWx0ZXJSZXN1bHRTb2Z0d2FyZShnZW9tZXRyeSwgZHJhd2luZ1JlY3QsIHJl
bmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkpOworfQorCitGaWx0ZXJS
ZXN1bHQ6OkZpbHRlclJlc3VsdChjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0
IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAg
ICA6IG1fZ2VvbWV0cnkoZ2VvbWV0cnkpCisgICAgLCBtX2RyYXdpbmdSZWN0KGRyYXdpbmdSZWN0
KQorICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCisgICAgLCBtX3Jlc29sdXRp
b25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCisgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkK
K3sKK30KKworRmxvYXRSZWN0IEZpbHRlclJlc3VsdDo6YWJzb2x1dGVEcmF3aW5nUmVjdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZ2VvbWV0cnkudHJhbnNmb3JtVG9BYnNvbHV0ZVJlY3QobV9k
cmF3aW5nUmVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQor
ICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFn
ZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNy
Yy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0
ZXM7CisgICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgp
KTsKKworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXpl
LndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVz
dC5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFf
UkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3Qg
dWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50
OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2Fm
ZUdldCgpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24u
ZGF0YSgpOworCisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBp
bnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxwaGEgLyAy
NTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihz
b3VyY2VDb21wb25lbnRbMV0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29t
cG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogYWxwaGEg
LyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAg
IHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0
OworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0Fs
cGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVS
QVRFKQorICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAg
IHZJbWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwor
ICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0g
cm93Qnl0ZXM7CisgICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2Uu
ZGF0YSgpKTsKKworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5w
dXRTaXplLndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Cisg
ICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VVbnByZW11bHRp
cGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAg
ICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOworICAgIGNv
bnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICog
NCkudW5zYWZlR2V0KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0
aW5hdGlvbi5kYXRhKCk7CisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAg
ICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGlmIChhbHBoYSkg
eworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICog
MjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRp
Y19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOworICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMl0gPSAwOworICAgICAgICB9CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNlbmRpZgorfQorCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyUmVzdWx0OjpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhhRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0
aXBsaWVkUGl4ZWxCdWZmZXIgOiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4
ZWxCdWZmZXIqIEZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBhbHBoYUZvcm1hdCkKK3sKKyAgICBhdXRvJiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZF
eGlzdHMoYWxwaGFGb3JtYXQpOworICAgIGlmIChwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
ICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsg
YWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9jb2xvclNwYWNlIH07CisgICAgYXV0
byBsb2dpY2FsU2l6ZSA9IGFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCk7CisKKyAgICBpZiAo
YXV0byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVmZmVySWZFeGlzdHMoKSkgeworICAgICAgICBwaXhl
bEJ1ZmZlciA9IGltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQo
KSwgSW50U2l6ZShsb2dpY2FsU2l6ZSkgfSk7CisgICAgICAgIGlmICghcGl4ZWxCdWZmZXIpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52
YWx1ZSgpOworICAgIH0KKyAgICAKKyAgICBJbnRTaXplIHNjYWxlZFNpemUobG9naWNhbFNpemUp
OworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUp
KTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHBpeGVs
QnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHNjYWxlZFNpemUpOworICAg
IGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKHBp
eGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSkKKyAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEocGl4ZWxCdWZmZXJJZkV4aXN0cyhB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLT5kYXRhKCksIHBpeGVsQnVm
ZmVyLT5kYXRhKCksIHNjYWxlZFNpemUpOworICAgIGVsc2UgaWYgKHBpeGVsQnVmZmVySWZFeGlz
dHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkpCisgICAgICAgIGNvcHlV
bnByZW11bHRpcGx5aW5nQWxwaGEocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2Fs
ZWRTaXplKTsKKworICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKK30KKworUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJSZXN1bHQ6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIEludFNpemUg
c2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOworICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOworCisgICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNv
cmRPdmVyZmxvdz4oKSAqIDQ7CisgICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFVp
bnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKKyAg
ICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvcHlQ
aXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsK
KyAgICByZXR1cm4gcGl4ZWxCdWZmZXI7Cit9CisKK2Jvb2wgRmlsdGVyUmVzdWx0OjpyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlv
bkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIC8vIFRo
aXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0
cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgorICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xv
ciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1
dAorICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCisg
ICAgcmV0dXJuIGNvbG9yU3BhY2UgJiYgbV9jb2xvclNwYWNlICE9ICpjb2xvclNwYWNlOworI2Vs
c2UKKyAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRl
ZCBvbiBub24tQ0cKKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyhjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBzY2FsZWRSZWN0
KHJlY3QpOworICAgIHNjYWxlZFJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAg
SW50U2l6ZSBzY2FsZWRQYWludFNpemUoYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUoKSk7Cisg
ICAgc2NhbGVkUGFpbnRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIC8vIElu
aXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50
aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgorICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAg
fHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRT
aXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0
KCkpCisgICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxl
bmd0aCgpKTsKKworICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRl
cnNlY3Qgd2l0aCB0aGUgc291cmNlLgorICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8
IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRT
aXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgeE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOwor
ICAgIGludCB4RGVzdCA9IDA7CisgICAgaWYgKHhPcmlnaW4gPCAwKSB7CisgICAgICAgIHhEZXN0
ID0gLXhPcmlnaW47CisgICAgICAgIHhPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeEVuZCA9
IHNjYWxlZFJlY3QubWF4WCgpOworICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRo
KCkpCisgICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsKKworICAgIGludCB5
T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7CisgICAgaW50IHlEZXN0ID0gMDsKKyAgICBpZiAoeU9y
aWdpbiA8IDApIHsKKyAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKKyAgICAgICAgeU9yaWdpbiA9
IDA7CisgICAgfQorICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7CisgICAgaWYgKHlF
bmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHlFbmQgPSBzY2FsZWRQYWlu
dFNpemUuaGVpZ2h0KCk7CisKKyAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0Owor
ICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICogNDsKKyAg
ICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7CisgICAg
dWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3Qg
KiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKKyAgICBjb25zdCB1aW50OF90KiBz
b3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUu
d2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7CisKKyAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsK
KyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKKyAg
ICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOworICAgICAgICBz
b3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKKyAgICAgICAgKyt5T3JpZ2luOworICAgIH0K
K30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyUmVzdWx0OjpnZXRDb252ZXJ0
ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBjb2xvclNwYWNlKSBjb25zdAoreworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAgLy8gQ3JlYXRlIGFuIElt
YWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8g
aGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICBhdXRvIGNvbnZlcnRlZEltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpC
R1JBOCk7CisgICAgaWYgKCFjb252ZXJ0ZWRJbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJu
YWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKKyAgICBj
b252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
ciwgcmVjdCk7CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQsIFBp
eGVsRm9ybWF0OjpSR0JBOCwgY29sb3JTcGFjZSB9OworICAgIHJldHVybiBjb252ZXJ0ZWRJbWFn
ZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsKK30KKworc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gRmlsdGVyUmVzdWx0OjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhl
bEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQs
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKSBjb25zdAoreworICAgIEludFJlY3Qg
cmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXplKCkpOworICAgIHJlY3Quc2NhbGUoMSAv
IG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOworCisgICAgLy8gQ3JlYXRlIGFuIEltYWdl
QnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCisgICAgYXV0byBpbWFnZUJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQsIG1fcmVzb2x1dGlvblNjYWxlLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpC
R1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIGltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgcmVjdCk7
CisgICAgcmV0dXJuIGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFG
b3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOworfQorCit2b2lkIEZpbHRlclJlc3VsdDo6Y29weVBp
eGVsQnVmZmVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgYXV0byogcGl4ZWxC
dWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KSA/ICZwaXhlbEJ1ZmZlcklm
RXhpc3RzKGFscGhhRm9ybWF0KS52YWx1ZSgpIDogbnVsbHB0cjsKKworICAgIGlmICghcGl4ZWxC
dWZmZXIpIHsKKyAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVy
c2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lv
biBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCisgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZl
ciA9IGltYWdlQnVmZmVySWZFeGlzdHMoKSkgeworICAgICAgICAgICAgICAgIEludFJlY3QgcmVj
dCB7IEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUo
KSkgfTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGdl
dENvbnZlcnRlZFBpeGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsICpj
b2xvclNwYWNlKSkKKyAgICAgICAgICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVk
UGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHBpeGVsQnVm
ZmVyID0gdGhpcy0+cGl4ZWxCdWZmZXIoYWxwaGFGb3JtYXQpOworICAgIH0KKworICAgIGlmICgh
cGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgaWYgKGF1dG8g
Y29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZm
ZXIsIGFscGhhRm9ybWF0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICBjb3B5SW1hZ2VCeXRl
cyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb3B5SW1hZ2VCeXRlcyhwaXhlbEJ1ZmZlci0+
ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7Cit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojpj
b3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCkKK3sKKyAgICAvLyBNdXN0IG9wZXJhdGUg
b24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZh
bGlkIHBpeGVscy4KKyAgICBpZiAoIW1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9IG1fcHJlbXVs
dGlwbGllZFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1h
Z2VBcnJheS5kYXRhKCk7CisgICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxl
bmd0aCgpOworCisgICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQg
Y29tcGxldGUgcGl4ZWxzCisgICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKKwor
I2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+
PSA2NCkgeworICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxB
cnJheUxlbmd0aCAmIH4weDNmKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgLy8gSW5jcmVt
ZW50cyBwaXhlbERhdGEgYnkgNjQuCisgICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBp
eGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZh
bFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFsz
XSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5Q
aXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICBzaXh0ZWVu
UGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4
ZWxzLnZhbFszXSk7CisgICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhl
bHMpOworICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OworICAgICAgICB9IHdoaWxlIChwaXhl
bERhdGEgPCBsYXN0UGl4ZWwpOworCisgICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsK
KyAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZgorCisgICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0Owor
CisgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1
c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKKyAgICB3aGlsZSAoLS1udW1QaXhl
bHMgPj0gMCkgeworICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAor
ICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOworICAgICAgICAvLyBDbGFtcCBl
YWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24K
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgq
cGl4ZWxEYXRhID4gYSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKKyAgICAgICAg
ICAgICsrcGl4ZWxEYXRhOworICAgICAgICB9CisgICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxw
aGEKKyAgICAgICAgKytwaXhlbERhdGE7CisgICAgfQorfQorCit2b2lkIEZpbHRlclJlc3VsdDo6
dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQor
eworI2lmIFVTRShDRykKKyAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRz
IGludGVybmFsbHkuCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworI2Vsc2UKKyAgICBp
ZiAoY29sb3JTcGFjZSA9PSBtX2NvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1
ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBz
dXBwb3J0IGZvciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBpZiAoYXV0byBp
bWFnZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdlQnVmZmVyLT50
cmFuc2Zvcm1Db2xvclNwYWNlKG1fY29sb3JTcGFjZSwgY29sb3JTcGFjZSk7CisKKyAgICBtX2Nv
bG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIg
PSBzdGQ6Om51bGxvcHQ7CisgICAgbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51
bGxvcHQ7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjViOWRhOTE1MjNhNjg4YzQyZjYzZDI1ZGE3YzM4YzljZTAzMzMzYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyUmVzdWx0LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdl
QnVmZmVyOworY2xhc3MgUGl4ZWxCdWZmZXI7CisKK2NsYXNzIEZpbHRlclJlc3VsdCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZpbHRlclJlc3VsdD4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8
RmlsdGVyUmVzdWx0PiBjcmVhdGUoY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJl
Y3QmIGRyYXdpbmdSZWN0LCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKKyAgICB2aXJ0dWFsIH5GaWx0ZXJSZXN1bHQoKSA9IGRl
ZmF1bHQ7CisgICAgCisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9kcmF3aW5nUmVjdDsgfQorICAgIEZsb2F0UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWN0KCkgY29u
c3Q7CisKKyAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3VicmVnaW9uKCkgY29uc3QgeyByZXR1cm4g
bV9wcmltaXRpdmVTdWJyZWdpb247IH0KKyAgICAKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KKyAgICAKKyAgICBib29s
IGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFJbWFnZTsgfQorICAgIHZvaWQg
c2V0SXNBbHBoYUltYWdlKGJvb2wgYWxwaGFJbWFnZSkgeyBtX2FscGhhSW1hZ2UgPSBhbHBoYUlt
YWdlOyB9CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZF
eGlzdHMoKSA9IDA7CisgICAgdmlydHVhbCBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSA9IDA7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgcGl4ZWxCdWZmZXJJZkV4aXN0cyhB
bHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAgICBQaXhlbEJ1ZmZlciogcGl4ZWxCdWZmZXIoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIHZv
aWQgY29weVBpeGVsQnVmZmVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgCisgICAgdm9pZCBjb3JyZWN0UHJl
bXVsdGlwbGllZFBpeGVsQnVmZmVyKCk7CisgICAgdm9pZCB0cmFuc2Zvcm1Ub0NvbG9yU3BhY2Uo
RGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworcHJvdGVjdGVkOgorICAgIEZpbHRlclJlc3VsdChj
b25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIFJlbmRl
cmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsK
KworICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6
b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5SW1h
Z2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Up
IGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBpeGVs
QnVmZmVyKFBpeGVsQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgRGVzdGluYXRpb25D
b2xvclNwYWNlKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBtX3ByaW1pdGl2ZVN1YnJlZ2lvbjsK
KyAgICBib29sIG1fYWxwaGFJbWFnZSB7IGZhbHNlIH07CisgICAgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIG1fZ2VvbWV0cnk7CisKKyAgICBGbG9hdFJlY3QgbV9kcmF3aW5nUmVjdDsKKyAgICBSZW5k
ZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsK
KyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworCisgICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKKyAgICBzdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK307CisK
K3VzaW5nIEZpbHRlclJlc3VsdFZlY3RvciA9IFZlY3RvcjxSZWY8RmlsdGVyUmVzdWx0Pj47CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IDFh
YjVlMTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3OTEyOGY1NGI0NGIuLjRiYzZiYzcxYzg1ZGZiMWFl
MzkxZGViMjQzZGM4MTQ1NzVkYjBjMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApAQCAt
MzYsMTIgKzM2LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBQb2ludExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0
LCBQYWludGluZ0RhdGEmKQordm9pZCBQb2ludExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRh
KGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQb3Np
dGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91
c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQg
b2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4K
LSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRp
b24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9u
LnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisvLyAgICBtX2J1ZmZl
clBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZl
cihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpKTsKKy8vICAgIC8vIFRvIHNjYWxlIFosIG1hcCBh
IHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9u
IGJ5IHouCisvLyAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRG
cm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNw
YWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKKy8vICAgIG1fYnVm
ZmVyUG9zaXRpb24uc2V0WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKIH0K
IAogTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIFBvaW50TGlnaHRTb3VyY2U6OmNv
bXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
aW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCA3NjQ5ZjA1
OGFjODY5YjU1NGFmMGRjNTA3ZmZmOTA5MGFkNmNmM2EzLi44NDdhNjllMjlhZjIwYmMyOTZkYTRk
ZGUzNDA0YzI3ZDU5Nzc5Mjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNjAgKzIxLDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKIAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmls
dGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VB
bHBoYTo6Y3JlYXRlKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQorUmVmPFNvdXJjZUFscGhh
PiBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3Vy
Y2VBbHBoYShzb3VyY2VFZmZlY3QpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VB
bHBoYSgpKTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUo
KQorU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpT
b3VyY2VBbHBoYSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgiU291cmNlQWxwaGEiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBT
b3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorY29uc3QgQXRvbVN0cmlu
ZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKQogewotICAgIGlucHV0RWZmZWN0KDApLT5kZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0
RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5l
dmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgiU291cmNlQWxwaGEi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIHNfZWZmZWN0
TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zp
bHRlclJlc3VsdCogU291cmNlQWxwaGE6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlz
RW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
LSAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAotICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFnZVJlY3Qs
IENvbG9yOjpibGFjayk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7Cisg
ICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCi1U
ZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNlQWxwaGE6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0
aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUFscGhhXVxuIjsKICAg
ICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJFZmZlY3Qm
IHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3QuZmlsdGVyKCks
IFR5cGU6OlNvdXJjZUFscGhhKQotewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNl
RWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5k
KCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgK
aW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4uZWJhZDgyY2Q2
ZDQxN2Y5YjA4NTRhZGRkZjRiOWU1MDFkNzM2ZjQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTcsOCArMTgsNyBAQAogICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0jZGVmaW5l
IFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
CiAKQEAgLTI2LDIxICsyNiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJj
ZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0
aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CisgICAgc3RhdGljIFJl
ZjxTb3VyY2VBbHBoYT4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYg
ZWZmZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRl
ckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQorICAgIFNv
dXJjZUFscGhhKCk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIlNvdXJjZUFscGhhIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3Zl
cnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmls
dGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBh
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy9uYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gU291cmNlQWxwaGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5k
ZXggODhhMzZhNDEwMjZiZDNhNTg1NDQ3ODIwMjc0YzExMDdkNzgzOTJlOS4uNmVkMTc2YTEyNjcw
OWRkNTgwM2FiZGM0NWYzYjljY2MwZDAzZjM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwxOCArMjEsMjEgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJP
dXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8U291cmNlR3JhcGhpYz4gU291cmNlR3Jh
cGhpYzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdy
YXBoaWM6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3JhcGhp
YygpKTsKK30KKworU291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYygpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoVHlwZTo6U291cmNlR3JhcGhpYykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
b3VyY2VHcmFwaGljKGZpbHRlcikpOwogfQogCiBjb25zdCBBdG9tU3RyaW5nJiBTb3VyY2VHcmFw
aGljOjplZmZlY3ROYW1lKCkKQEAgLTQwLDI3ICs0NCwyMCBAQCBjb25zdCBBdG9tU3RyaW5nJiBT
b3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCkKICAgICByZXR1cm4gc19lZmZlY3ROYW1lOwogfQog
Ci12b2lkIFNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zsb2F0
UmVjdCBTb3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgRmlsdGVyJiBm
aWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVy
LnNvdXJjZUltYWdlUmVjdCgpOwotICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVz
b2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwot
ICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Cisg
ICAgcmV0dXJuIGdlb21ldHJ5LnNvdXJjZUltYWdlUmVjdCgpOwogfQogCi12b2lkIFNvdXJjZUdy
YXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIFNvdXJjZUdyYXBo
aWM6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0CiB7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNv
dXJjZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCi0gICAg
ICAgIHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7
ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBJbnRQb2ludCgpKTsKKyAgICBy
ZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgfSwgc291cmNlSW1hZ2UpOwogfQogCi1UZXh0
U3RyZWFtJiBTb3VyY2VHcmFwaGljOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CitUZXh0U3RyZWFtJiBTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltTb3VyY2VHcmFwaGljXVxuIjsK
ICAgICByZXR1cm4gdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCmluZGV4IDMwY2Q1NGYyNDUzYmJhOGEzNzc2
MzIxMzI4ZWYyMTA2YjdmY2E1YmYuLjVkOGYxY2JmOTFjN2FlOTgzMjYzZDQ1OGM3NmFjOTVmZGNi
OWVhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMTgsNDEgKzE5LDM0IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNvdXJjZUdyYXBoaWNfaAotI2RlZmluZSBTb3VyY2VH
cmFwaGljX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU291cmNlR3Jh
cGhpYyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOiAgICAgICAgCi0gICAgc3RhdGlj
IFJlZjxTb3VyY2VHcmFwaGljPiBjcmVhdGUoRmlsdGVyJik7CisgICAgc3RhdGljIFJlZjxTb3Vy
Y2VHcmFwaGljPiBjcmVhdGUoKTsKIAogICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZl
Y3ROYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgU291cmNlR3JhcGhpYyhGaWx0ZXImIGZpbHRlcikK
LSAgICAgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpTb3VyY2VHcmFwaGljKQotICAg
IHsKLSAgICAgICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSk7Ci0gICAgfQorICAgIFNvdXJjZUdyYXBoaWMoKTsKIAogICAgIGNvbnN0IGNoYXIq
IGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291cmNlR3JhcGhpYyI7IH0KIAot
ICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5
cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQotfTsKKyAgICBG
aWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLX0gLy9uYW1l
c3BhY2UgV2ViQ29yZQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBj
b25zdCBvdmVycmlkZTsKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpT
b3VyY2VHcmFwaGljKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0
ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgp
ID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzsgfQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQorI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGJvb2wgYXBw
bHlDb3JlSW1hZ2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKIAor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7Cit9OwogCi0jZW5kaWYg
Ly8gU291cmNlR3JhcGhpY19oCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZS5jcHAKaW5kZXggNzE2MDdhYjAwZmY5ZDZhNmQwMTY5MWQ5YmJiODU1M2QxZjM0OGQwMC4u
ZDFiZWMxMjAyMDZhNTM2ZTEwYjEwYmYyYzExMzBmNGYzNDJiYmExZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0
U291cmNlLmNwcApAQCAtNDEsMzYgKzQxLDM2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGFj
Y29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNzaW9uIHRlc3RzCiBzdGF0aWMg
Y29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7CiAKLXZvaWQgU3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0
LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0
UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpCiB7Ci0gICAg
bV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNl
VG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwg
bWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJl
Y3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9p
bnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNl
clNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1
ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7Ci0g
ICAgCi0gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRz
QXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0
b3Iubm9ybWFsaXplKCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKLSAgICAg
ICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7Ci0gICAgICAgIHBhaW50aW5n
RGF0YS5jb25lRnVsbExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xkOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKLSAg
ICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5n
Q29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICBpZiAobGltaXRpbmdDb25l
QW5nbGUgPiA5MC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7Ci0g
ICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBm
IC0gbGltaXRpbmdDb25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGln
aHQgPSBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7Ci0g
ICAgfQotCi0gICAgLy8gT3B0aW1pemF0aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBvbmVudCB2
YWx1ZXMKLSAgICBpZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgcGFpbnRpbmdEYXRh
LnNwZWN1bGFyRXhwb25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9
PSAxLjBmKQotICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDE7Ci0gICAg
ZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAgICAgICAgcGFpbnRpbmdEYXRh
LnNwZWN1bGFyRXhwb25lbnQgPSAyOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0
ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlv
bi54eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBt
X3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQ
b2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVy
KHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91
c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFw
cGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisvLworLy8gICAgcGFpbnRpbmdEYXRh
LmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0
aW9uOworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rvci5ub3JtYWxpemUoKTsKKy8v
CisvLyAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKKy8vICAgICAgICBwYWludGluZ0Rh
dGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1
bGxMaWdodCA9IC1hbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0gZWxzZSB7CisvLyAgICAgICAg
ZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAg
IGlmIChsaW1pdGluZ0NvbmVBbmdsZSA8IDAuMGYpCisvLyAgICAgICAgICAgIGxpbWl0aW5nQ29u
ZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGluZ0NvbmVB
bmdsZSA+IDkwLjBmKQorLy8gICAgICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSA9IDkwLjBmOwor
Ly8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgw
LjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1
bGxMaWdodCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9s
ZDsKKy8vICAgIH0KKy8vCisvLyAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxh
ckV4cG9uZW50IHZhbHVlcworLy8gICAgaWYgKCFtX3NwZWN1bGFyRXhwb25lbnQpCisvLyAgICAg
ICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOworLy8gICAgZWxzZSBpZiAobV9z
cGVjdWxhckV4cG9uZW50ID09IDEuMGYpCisvLyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFy
RXhwb25lbnQgPSAxOworLy8gICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYK
Ky8vICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDI7CiB9CiAKIExpZ2h0
U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBTcG90TGlnaHRTb3VyY2U6OmNvbXB1dGVQaXhl
bExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGlu
dCB5LCBmbG9hdCB6KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjM2NjNlZjFhNGU4YjkyNWQ3ZDEyY2NiZDkwOWJkYzAyOTM2MDZjNjYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWRvYmUgU3lzdGVt
cyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFQmxlbmQuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmQ6OmFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JiBy
ZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMik7CisgICAgYXV0
byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW4yID0gaW5wdXRzWzFdLmdldCgp
OworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgYXV0byBp
bWFnZUJ1ZmZlcjIgPSBpbjIuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyIHx8
ICFpbWFnZUJ1ZmZlcjIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0
SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKy8vICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4
dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisvLyAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOworLy8gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRl
T3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKworICAgIHJldHVybiB0cnVlOworfQor
I2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3
YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWI0OTkwMWU3YTMyZWM4
ODVhMDQ2YjRkM2VmMzBjNDgzNmQyMzU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdh
cmUuY3BwCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVy
YXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgdm9pZCBtYXRy
aXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBm
bG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisgICAgZmxvYXQgYSA9IGFscGhh
OworCisgICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2YWx1
ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKKyAgICBncmVl
biAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlc1sgN10gKiBiICsg
dmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OworICAgIGJsdWUgICAgPSB2YWx1ZXNb
MTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNdICog
YSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsgdmFs
dWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVzWzE5
XSAqIDI1NTsKK30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJl
ZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMpCit7
CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9
IGJsdWU7CisKKyAgICByZWQgICAgID0gciAqIGNvbXBvbmVudHNbMF0gKyBnICogY29tcG9uZW50
c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOworICAgIGdyZWVuICAgPSByICogY29tcG9uZW50c1sz
XSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVudHNbNV07CisgICAgYmx1ZSAgICA9
IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNbN10gKyBiICogY29tcG9uZW50c1s4
XTsKK30KKworLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVu
Y3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYg
cmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEpCit7CisgICAgYWxw
aGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAuMDcyMSAqIGJsdWU7CisgICAg
cmVkID0gMDsKKyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9IDA7Cit9CisKKyNpZiBVU0UoQUND
RUxFUkFURSkKK3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgorYm9vbCBlZmZl
Y3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNbOV0sIEludFNpemUgYnVmZmVy
U2l6ZSkKK3sKKyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFy
ZWEoKSAqIDQpOworICAgIAorICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQ
RV9NQVRSSVgpIHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFr
ZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBG
RUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFj
ayB0byBub24tdkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2YWx1ZXNbNF0gfHwgdmFsdWVzWzld
IHx8IHZhbHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7CisgICAgdWludDhfdCog
ZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAg
c3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBidWZmZXJT
aXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7
CisgICAgc3JjLmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAg
ICBkZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gYnVm
ZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgp
ICogNDsKKyAgICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7
CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAgIGNvbnN0IGlu
dDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAor
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRp
dmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
IDZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KHZhbHVlc1sxMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikp
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBk
aXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbIDNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAorICAgICAgICB9Owor
ICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4
LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAgICBjb25zdCBpbnQx
Nl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNvcikpLAorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCisg
ICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
Y29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCisgICAgICAg
ICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9u
ZW50c1syXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAw
LAorCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICBkaXZpc29yLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBs
eV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRy
LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7CisgICAgICAgIGNvbnN0IGludDE2X3Qg
bWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjIxMjUg
KiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAg
ICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjcxNTQgKiBk
aXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjA3MjEgKiBkaXZp
c29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5
X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIs
IGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmls
dGVyVHlwZT4KK3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1ZmZlclNpemUpCit7CisgICAg
ZmxvYXQgY29tcG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJh
dGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisgICAgZWxzZSBpZiAoZmlsdGVy
VHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQorICAgICAgICBGRUNvbG9yTWF0
cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7
CisKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsK
KworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZp
bHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCisg
ICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOworI2Vu
ZGlmCisKKyAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9NQVRSSVg6CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsg
cGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQp
IHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDIpOworICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5
Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgICAgICBtYXRyaXgocmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhl
bEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X0hVRVJPVEFURToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBw
aXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkg
eworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVP
ZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90
YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOworICAgICAgICAgICAgcGl4ZWxBcnJh
eS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgorICAgICAgICBm
b3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVs
QXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9hdCBy
ZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0
IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAg
ICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAg
ICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCAr
IDMpOworICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOworICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYm9vbCBGRUNvbG9yTWF0cml4OjphcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIEZp
bHRlclJlc3VsdCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09
IDEpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1
ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVm
ZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QgPSB7IHsgfSwgaW4uYWJzb2x1dGVEcmF3aW5nUmVj
dCgpLnNpemUoKSB9OworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlY3QpOworICAgIAorICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxG
b3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OworICAgIAorICAg
IEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgp
KTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwor
ICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOworCisg
ICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBtX3ZhbHVlczsKKworICAgIHN3aXRjaCAobV90eXBl
KSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAgICBlZmZlY3RUeXBl
PEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJB
VEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAgIGVm
ZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVz
LCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xP
Uk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxB
cnJheURpbWVuc2lvbnMpOworICAgICAgICByZXN1bHQuc2V0SXNBbHBoYUltYWdlKHRydWUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIo
KnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21w
b25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTNmMmRkZGJkNWZlNDkxMDE0
MGMwZWM4ODBjMTQ2NDFiYWQ1YWQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29m
dHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1
bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hZjg2ZmNjNTZmMzM0MThlY2I1MDMxN2NiYzBlYTM1MGRhNjY2ZGE1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9z
aXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRUNvbXBvc2l0ZTo6YXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJl
c3VsdCYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3
YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNzA5YjMzNGMyYmQ1OGI5YWU0ODg0OTA0NWZhZDc5YmFjZjBj
Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEs
MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJj
emVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
RUNvbnZvbHZlTWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRUNvbnZv
bHZlTWF0cml4OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdl
QnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjYjM0MWYwZTU3NmRmM2Jk
MTM2ZjZhMWM3N2UzZWEyOTAyMGJhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29m
dHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzE2ZmNmYjlmYjllNTZhNGMwZDRkYTg3OTZhNmQ0ZTNlYWRjYThlNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCisKKyNp
bmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFRHJvcFNoYWRvdzo6
YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZm
ZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNp
emUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8g
aW1hZ2VCdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1h
Z2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKy8vICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisvLworLy8gICAgRmxv
YXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7
IG1fc3RkWCwgbV9zdGRZIH0pOworLy8gICAgYmx1clJhZGl1cy5zY2FsZShmaWx0ZXIuZmlsdGVy
U2NhbGUoKSk7CisvLyAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVy
UmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7CisvLworLy8gICAgRmxvYXRSZWN0IGRyYXdpbmdS
ZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKKy8vICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9u
KTsKKy8vICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKKy8vCisvLyAg
ICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgp
OworLy8gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRvd09wYWNpdHkpOworLy8gICAg
cmVzdWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9u
V2l0aE9mZnNldCk7CisvLyAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOworLy8KKy8vICAg
IFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29s
b3IpOworLy8KKy8vICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JT
cGFjZSgpIH07CisvLyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1h
Z2UtPmxvZ2ljYWxTaXplKCkpOworLy8gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdl
LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOworLy8gICAgaWYgKCFwaXhlbEJ1
ZmZlcikKKy8vICAgICAgICByZXR1cm4gbnVsbHB0cjsKKy8vCisvLyAgICBhdXRvJiBzb3VyY2VQ
aXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKy8vICAgIGNvbnRleHRTaGFkb3cuYmx1
ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCks
IDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworLy8KKy8vICAgIHJlc3VsdEltYWdl
LT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOworLy8KKy8vICAgIHJl
c3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3Vy
Y2VJbik7CisvLyAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7CisvLyAgICBy
ZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVz
dGluYXRpb25PdmVyKTsKKy8vCisvLyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb24pOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9v
ZFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWVjYWJhMDExYTJmYmFlY2M5ZjIyZGJmZjIzZTkw
YmUzNDJhYWIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRmxvb2Qu
aCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZF
Rmxvb2Q6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZm
ZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBhdXRvIHJlc3VsdEltYWdl
ID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb2xvciA9IG1fY29sb3IuY29sb3JXaXRoQWxwaGFN
dWx0aXBsaWVkQnkobV9vcGFjaXR5KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7
IHsgfSwgcmVzdWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkgfTsKKyAgICAKKyAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KGltYWdlUmVjdCwgY29sb3IpOworICAgIHJl
dHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5C
bHVyU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2Q3MGE2
ODBkOGVjMWM1YzdjOTQ5MjdiNGJiNmQ5YjQzMmYyNjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFu
Qmx1clNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRp
bmdTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNjMTIwMTA5OWJk
OTU5ZGZhY2IxMmY5NzEwNmE1YmI1MmJmZWFlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3
YXJlLmNwcApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZ
IE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkg
T0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25z
dAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVNZXJnZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWY4MjVi
ZGE4ZWMyMzUwYmJjMTUzMDk0ZTQzMGZhNWMyOGM1N2JiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29m
dHdhcmUuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGRU1lcmdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgRkVNZXJnZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIWlucHV0cy5pc0VtcHR5KCkpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3Vs
dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdl
LT5jb250ZXh0KCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogaW5wdXRzKSB7CisgICAgICAg
IGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC0+aW1hZ2VCdWZmZXIoKTsKKyAgICAgICAgaWYgKCFp
bWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGlucHV0LT5hYnNvbHV0ZURyYXdp
bmdSZWN0KCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjNjMzhjYTQ0ZTVhYWIxYjcyMjJjZTZhNzc4YWFjNzkwNWY2NmM4YjgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5j
LiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZFTW9ycGhvbG9neS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVN
b3JwaG9sb2d5OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdl
QnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0
d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYxNWNiYjgzNGJiNGU4OTZkOGJkNzhmNjNmM2Q2MGRlOGIz
ZmIyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZFT2Zmc2V0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVPZmZzZXQ6
OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVm
ZmVyKiwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5z
aXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRv
IGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0Lmlt
YWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmVzdWx0LnNldElzQWxwaGFJbWFnZShpbi5pc0FscGhhSW1hZ2UoKSk7CisKKyAg
ICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVzdWx0LmFic29sdXRlRHJhd2lu
Z1JlY3QoKS5zaXplKCkgfTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOGFlNTBjZWJiODZlNjg5YzYwYWYzMGMzYTRjMWY4NjNlMTA2YTBmYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWls
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUaWxlLmgiCisKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUFz
VGV4dC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIEZFVGlsZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7CisvLyAgICBBU1NF
UlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKy8vICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgp
OworLy8KKy8vICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKy8v
ICAgIGF1dG8gaW5CdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOworLy8gICAgaWYgKCFyZXN1bHRJ
bWFnZSB8fCAhaW5CdWZmZXIpCisvLyAgICAgICAgcmV0dXJuIGZhbHNlOworLy8KKy8vICAgIHJl
c3VsdC5zZXRJc0FscGhhSW1hZ2UoaW4uaXNBbHBoYUltYWdlKCkpOworLy8KKy8vICAgIC8vIFNv
dXJjZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFzIHRoZSBzaXplIG9mIHRoZSBm
aWx0ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQorLy8gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNv
dXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0
aW1pemF0aW9uLgorLy8gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4ubWF4RWZmZWN0UmVjdCgp
OworLy8gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRp
b24oKTsKKy8vICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0
KCkubG9jYXRpb24oKTsKKy8vICAgIGlmIChpbi5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVy
RWZmZWN0VHlwZVNvdXJjZUlucHV0KSB7CisvLyAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKKy8vICAgICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsK
Ky8vICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRo
KCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOworLy8gICAgfQorLy8KKy8v
ICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZm
ZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmls
dGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKKy8vICAgIGlmICghdGlsZUltYWdlKQorLy8gICAgICAg
IHJldHVybiBudWxscHRyOworLy8KKy8vICAgIEdyYXBoaWNzQ29udGV4dCYgdGlsZUltYWdlQ29u
dGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOworLy8gICAgdGlsZUltYWdlQ29udGV4dC50cmFu
c2xhdGUoLWluTWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkp
OworLy8gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi5h
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOworLy8KKy8vICAgIGF1dG8gdGlsZUltYWdl
Q29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdl
KSk7CisvLyAgICBpZiAoIXRpbGVJbWFnZUNvcHkpCisvLyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisvLworLy8gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07CisvLyAgICBwYXR0
ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0aW9uIC0gbWF4RWZmZWN0TG9j
YXRpb24pOworLy8KKy8vICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1h
Z2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9
KTsKKy8vCisvLyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOworLy8gICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3Zl
KHBhdHRlcm4pKTsKKy8vICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiNGFkN2MxMDg4ZjJhNTBkZDYw
OWRmNjQ2ODA5MDUxNmM5ZGVmMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNw
cApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBBcHBs
ZSBJbmMuIDIwMTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9v
bCBGRVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwg
SW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmls
dGVyUmVzdWx0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMWQxNjAwM2M0NmZmODczYWRmNjc5
ZTYxZTc3ZTk3MDY1NTU4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDUxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6
CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitJbWFnZUJ1ZmZlciogRmlsdGVyUmVzdWx0U29mdHdhcmU6OmltYWdlQnVmZmVyKCkKK3sK
KyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0
KCk7CisKKyAgICBhdXRvIGxvZ2ljYWxTaXplID0gYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUo
KTsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fY29sb3JT
cGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8o
KSwgSW50U2l6ZShsb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3Rz
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdl
QnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZm
ZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAg
ICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCByZWN0KTsKKworICAgIHJl
dHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjM4YzQ1NjhmNTFjMzYyYjlmY2E5NmI0YWZiNDM1YjQzM2U5OTEyMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmls
dGVyUmVzdWx0U29mdHdhcmUuaApAQCAtMCwwICsxLDQ3IEBACisvKgorKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyUmVzdWx0U29mdHdhcmUgOiBwdWJsaWMgRmlsdGVy
UmVzdWx0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdDsK
KyAgICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXJJZkV4
aXN0cygpIG92ZXJyaWRlIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXI7IH0KKyAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9p
bWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJSZXN1bHRTb2Z0d2FyZSkKKyAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyUmVzdWx0JiByZXN1bHQpIHsgcmV0
dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkgPT0gV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VB
bHBoYVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzlhY2E3MGVh
NGY1MGNhM2I0NDhmZjE3ZTAzN2M3NDMzOTVjMWNmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFT
b2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU291cmNlQWxwaGEuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitib29sIFNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYgcmVzdWx0KSBjb25z
dAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGluID0gaW5w
dXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7
CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1h
Z2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRS
ZWN0IHsgeyB9LCByZXN1bHQuYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUoKSB9OworCisgICAg
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpibGFjayk7
CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
LCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFw
aGljU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3MTY0ZWI1
ZDVlOGE0NDY0OGMzZjMxNTI0MTMxMjY3YWVlMTgyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBo
aWNTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU291cmNlR3JhcGhpYy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNv
dXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoc291cmNlSW1hZ2UpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5p
bWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJ
bWFnZSwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggNjRlOTgz
ODRhZjAwNGVmNjk5YmM2MmU2YTZjOTc3NTZmNTljNjZmZi4uODUxZWY3YjYxNDQ0ODhjM2NkODQw
NzU5MzhkNjc2NjlmMjMxOTlkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5j
cHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNyw0MTEgKzI4LDMxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU0Zp
bHRlci5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJDYWNo
ZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKICNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVy
LmgiCiAjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIu
aCIKLSNpbmNsdWRlICJGRU1lcmdlLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5j
bHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNs
dWRlICJSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
LSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgot
I2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1
ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU291
cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRl
KCkKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKTsK
KyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKG5ldyBDU1NGaWx0ZXIob3BlcmF0aW9ucywgcmVu
ZGVyaW5nTW9kZSkpOworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRnVuY3Rpb25zKHJlbmRlcmVy
LCBvcGVyYXRpb25zKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJu
IGZpbHRlcjsKIH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQotICAgIDogRmlsdGVyKEZsb2F0
U2l6ZSB7IDEsIDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVh
dGUoKnRoaXMpKQorUmVmUHRyPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoVmVjdG9yPFJl
ZjxGaWx0ZXJGdW5jdGlvbj4+JiYgZnVuY3Rpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NGaWx0ZXIoV1RGTW92ZShmdW5jdGlv
bnMpLCByZW5kZXJpbmdNb2RlKSk7CiB9CiAKLUNTU0ZpbHRlcjo6fkNTU0ZpbHRlcigpID0gZGVm
YXVsdDsKK0NTU0ZpbHRlcjo6Q1NTRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJh
dGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKKyAgICA6IEZpbHRlcihyZW5kZXJp
bmdNb2RlLCBUeXBlOjpDU1NGaWx0ZXIpCit7CisgICAgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhl
bHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOworICAgIG1faGFzRmls
dGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhh
c0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7Cit9CiAKLUdy
YXBoaWNzQ29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQorQ1NTRmlsdGVyOjpDU1NG
aWx0ZXIoVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYgZnVuY3Rpb25zLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUpCisgICAgOiBGaWx0ZXIocmVuZGVyaW5nTW9kZSwgVHlwZTo6Q1NT
RmlsdGVyKQorICAgICwgbV9mdW5jdGlvbnMoV1RGTW92ZShmdW5jdGlvbnMpKQogewotICAgIHJl
dHVybiBzb3VyY2VJbWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7
CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0
ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3Qs
IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQorc3RhdGljIFJlZlB0
cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihGaWx0ZXImIGZpbHRlciwgUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCAmcHJldmlvdXNFZmZlY3QsIGNvbnN0IFJlZmVyZW5j
ZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQogewotICAgIGF1dG8qIGZpbHRlckVs
ZW1lbnQgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCkucmVmZXJlbmNl
ZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICBpZiAoIWZpbHRlckVsZW1lbnQpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVy
OiBmYWlsZWQgdG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNl
ICIgPDwgZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOwotICAgICAgICAvLyBBbHRob3VnaCB3
ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRl
ciBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91
cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMxMDg1PgotICAgICAgICAv
LyBGSVhNRTogVW5jbGVhciBpZiB0aGlzIGRvZXMgYW55dGhpbmcuCi0gICAgICAgIGlmIChhdXRv
KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAgcmVuZGVyZXIuZG9j
dW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGZpbHRlck9w
ZXJhdGlvbi5mcmFnbWVudCgpLCAqZWxlbWVudCk7CisgICAgYXV0byYgcmVmZXJlbmNlZFNWR1Jl
c291cmNlcyA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKTsKKyAgICBh
dXRvKiBmaWx0ZXJFbGVtZW50ID0gcmVmZXJlbmNlZFNWR1Jlc291cmNlcy5yZWZlcmVuY2VkRmls
dGVyRWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworCisgICAg
aWYgKCFmaWx0ZXJFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CiAKLSAg
ICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KCZwcmV2aW91c0Vm
ZmVjdCk7Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoU291cmNl
QWxwaGE6OmVmZmVjdE5hbWUoKSk7CisgICAgcmV0dXJuIFNWR0ZpbHRlcjo6Y3JlYXRlKCpmaWx0
ZXJFbGVtZW50LCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpLCAmcHJldmlvdXNFZmZlY3QpOworfQog
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBj
cmVhdGVHcmF5U2NhbGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
biYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0g
Y2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKwor
ICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRl
cnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9u
IG9uIHBhcmFtZXRlcnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Cisg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNB
bW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAq
IG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIg
LSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAt
IDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1v
dW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsg
MC45Mjc4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAg
ICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisg
ICAgfTsKKworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAgIGZvciAoYXV0
byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcz4oKmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVj
dEVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVj
dCkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NT
RmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVp
bGQgZWZmZWN0IGZyb20gIiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICB9CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2Vw
aWFFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRy
aXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0g
Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBo
dHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRt
bCNzZXBpYUVxdWl2YWxlbnQKKyAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4K
KworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBvbmVNaW51c0Ftb3VudCksCisg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1v
dW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91bnQpLAor
ICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAg
IDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAg
ICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6
OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVy
cykpOworfQogCi0gICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVm
ZmVjdC5nZXQoKSk7Ci0gICAgICAgIGlmIChlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNp
ZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAg
ICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigp
LT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9y
SW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJT
UkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAg
ICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RF
bGVtZW50LnJlc3VsdCgpLCBlZmZlY3QpOwotICAgICAgICByZWZlcmVuY2VFZmZlY3RzLmFwcGVu
ZCgqZWZmZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgbV9lZmZlY3RzLmFwcGVuZFZlY3RvcihXVEZN
b3ZlKHJlZmVyZW5jZUVmZmVjdHMpKTsKLSAgICByZXR1cm4gZWZmZWN0Oworc3RhdGljIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRy
aXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIFZlY3Rvcjxm
bG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJp
eE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRl
KEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsK
IH0KIAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikK
K3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoY29uc3Qg
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCiB7
Ci0gICAgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRo
YXRNb3Zlc1BpeGVscygpOwotICAgIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5
U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0
ZWRCeVNlY3VyaXR5T3JpZ2luKCk7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMg
eyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9
OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAgIG1fZWZmZWN0cy5j
bGVhcigpOwotICAgIG1fb3V0c2V0cyA9IHsgfTsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBjcmVhdGVJbnZlcnRFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlw
ZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0g
bmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQo
KSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50OworICAgIHRy
YW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OworCisgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0
aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3Jl
YXRlT3BhY2l0eUVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rp
b24uaW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1
bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUobnVsbEZ1bmN0
aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7Cit9CisK
K3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0
IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVy
T3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5j
dGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfTElORUFSOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2Zl
ckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRy
YW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxG
dW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVDb250cmFz
dEVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFu
c2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJj
ZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUo
dHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJF
ZmZlY3QoY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbikKK3sKKyAgICBm
bG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3Rk
RGV2aWF0aW9uKCksIDApOworICAgIHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERl
dmlhdGlvbiwgc3RkRGV2aWF0aW9uLCAvKmNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0
ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiovIEVER0VNT0RFX0RVUExJQ0FURSk7Cit9CisK
K3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGNvbnN0
IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRpb24pCit7CisgICAg
ZmxvYXQgc3RkID0gZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKTsKKyAgICByZXR1
cm4gRkVEcm9wU2hhZG93OjpjcmVhdGUoc3RkLCBzdGQsIGRyb3BTaGFkb3dPcGVyYXRpb24ueCgp
LCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xvcigpLCAx
KTsKK30KKworYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zKQoreworICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOworICAgIG1f
ZnVuY3Rpb25zLmFwcGVuZCh7ICplZmZlY3QgfSk7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBwcmV2aW91c0VmZmVjdCA9IG1fc291cmNlR3JhcGhpYy5wdHIoKTsKICAgICBmb3IgKGF1dG8m
IG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpKSB7Ci0gICAgICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICAgICAgYXV0byYgZmlsdGVyT3BlcmF0aW9uID0gKm9w
ZXJhdGlvbjsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpKSB7Ci0gICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6IHsKLSAgICAgICAgICAgIGF1dG8m
IHJlZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IGJ1aWxkUmVmZXJlbmNlRmls
dGVyKHJlbmRlcmVyLCAqcHJldmlvdXNFZmZlY3QsIHJlZmVyZW5jZU9wZXJhdGlvbik7CisgICAg
ICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKKworICAgICAgICBBU1NFUlQoZWZmZWN0KTsK
KyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6UkVGRVJFTkNFOgorICAgICAgICAgICAgZmlsdGVyID0gY3JlYXRlU1ZHRmls
dGVyKCp0aGlzLCByZW5kZXJlciwgKmVmZmVjdCwgZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAgICAgICAgICBlZmZlY3QgPSBudWxscHRyOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBk
b3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwotICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2Vl
IGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5o
dG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBv
biBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVy
cyB7Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgKyAwLjc4
NzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCks
Ci0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3Vu
dCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgKyAwLjI4
NDggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3Vu
dCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjky
NzggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAg
ICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAg
ICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0
aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykp
OworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVND
QUxFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJ
QTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVy
YXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8v
ZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlh
RXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMu
Ci0KLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAg
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ft
b3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAu
NzY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAw
LAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9u
ZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0K
LSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBv
bmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAg
ICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAot
ICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3Qg
PSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgs
IFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNl
cGlhRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhP
cGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMg
eyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9
OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKKyAg
ICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7
Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAg
ICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07Ci0gICAgICAgICAgICBlZmZlY3QgPSBG
RUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUs
IFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkhVRV9ST1RBVEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZl
Y3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OklOVkVSVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7Ci0KLSAg
ICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAg
ICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2Zl
ckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rp
b24pOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6
CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVJbnZlcnRFZmZlY3QoZG93bmNhc3Q8QmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQ
TEVfSU5WRVJUX0xJR0hUTkVTUzoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmls
dGVyLgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpP
UEFDSVRZOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVy
RnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0g
ICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAg
dHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24s
IG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246Ok9QQUNJVFk6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZm
ZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRU
cmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9u
LnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJh
bnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJh
bnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5p
bnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51
bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNy
ZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJG
dW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
QlJJR0hUTkVTUzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3Qo
ZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlv
bikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1v
dW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5h
bW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50Owot
ICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsg
MC41OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6Q09OVFJBU1Q6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVDb250cmFzdEVmZmVjdChk
b3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9u
KSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgYXV0byYgYmx1ck9wZXJhdGlvbiA9IGRvd25j
YXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBm
bG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3Rk
RGV2aWF0aW9uKCksIDApOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNy
ZWF0ZSgqdGhpcywgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRl
ckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBM
SUNBVEUpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICAg
ICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVmZmVjdChkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGF1dG8mIGRy
b3BTaGFkb3dPcGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVh
dGUoKnRoaXMsIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIGRyb3BTaGFkb3dP
cGVyYXRpb24uc3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAgICAgZHJvcFNoYWRvd09wZXJh
dGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNv
bG9yKCksIDEpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoK
KyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoZG93bmNhc3Q8RHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoZWZmZWN0KSB7Ci0gICAgICAgICAgICAvLyBVbmxpa2UgU1ZH
IEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdlcywgZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmls
dGVyCi0gICAgICAgICAgICAvLyBwcm9wZXJ0eSBhcHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlw
IHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdpb25zLgotICAgICAgICAgICAgZWZmZWN0LT5zZXRD
bGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7
Ci0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVy
T3BlcmF0aW9uLnR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewotICAgICAg
ICAgICAgICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZl
Y3QpIH07Ci0gICAgICAgICAgICAgICAgbV9lZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOwor
ICAgICAgICBpZiAoZmlsdGVyKSB7CisgICAgICAgICAgICBlZmZlY3QgPSBmaWx0ZXItPmxhc3RF
ZmZlY3QoKTsKKyAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChmaWx0ZXIucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIElmIHdlIGRpZG4ndCBtYWtlIGFueSBlZmZlY3RzLCB0ZWxsIG91ciBjYWxsZXIgd2UgYXJl
IG5vdCB2YWxpZC4KLSAgICBpZiAobV9lZmZlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgbV9lZmZlY3RzLnNocmlua1RvRml0KCk7CisgICAgICAgIGlmICghZWZm
ZWN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2V0TWF4RWZmZWN0UmVjdHMo
bV9zb3VyY2VEcmF3aW5nUmVnaW9uKTsKLSNpZiBVU0UoQ09SRV9JTUFHRSkKLSAgICBpZiAoIW1f
ZmlsdGVyUmVuZGVyZXIpCi0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RS
ZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVyLnNldHRpbmdzKCkuY29yZUltYWdlQWNjZWxlcmF0
ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksIG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCkpOwotI2VuZGlm
CisgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZCh7ICplZmZlY3QgfSk7CisgICAgfQorICAgIAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENTU0ZpbHRlcjo6dXBkYXRlQmFja2luZ1N0b3Jl
UmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpCitJbnRPdXRzZXRzIENTU0ZpbHRlcjo6
b3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgaWYgKGZpbHRlclJlY3QuaXNFbXB0eSgpIHx8IEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXJSZWN0LnNpemUoKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChmaWx0ZXJSZWN0ID09IHNvdXJjZUltYWdlUmVjdCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzZXRTb3VyY2VJbWFnZVJlY3QoZmlsdGVyUmVj
dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1Bp
eGVscyB8fCAhbV9vdXRzZXRzLmlzWmVybygpKQorICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwog
Ci12b2lkIENTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFw
aGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCi17Ci0gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUg
ZWZmZWN0IGNoYWluIGhhcyBiZWVuIGJ1aWx0LCBhbmQgdGhlCi0gICAgLy8gc291cmNlIGltYWdl
IHNpemVzIHNldC4gV2UganVzdCBuZWVkIHRvIGF0dGFjaCB0aGUgZ3JhcGhpYwotICAgIC8vIGJ1
ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQgZG9uZSBzby4KLQotICAgIGlmIChtX2dyYXBoaWNzQnVm
ZmVyQXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgbG9naWNhbFNpemUg
eyBtX3NvdXJjZURyYXdpbmdSZWdpb24uc2l6ZSgpIH07Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSgp
IHx8IHNvdXJjZUltYWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpIHsKLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUo
bG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRlclNjYWxl
KCksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsK
LSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKLSAgICAgICAgUmVu
ZGVyaW5nTW9kZSBtb2RlID0gbV9maWx0ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkIDogcmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0jZW5kaWYKLSAgICB9
Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKLX0KKyAgICBmb3IgKGF1dG8m
IGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIG1fb3V0c2V0cyArPSBmdW5jdGlvbi0+
b3V0c2V0cygpOwogCi12b2lkIENTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCkKLXsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQo
KTsKLSAgICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwot
ICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0Lm1heEVmZmVjdFJlY3QoKTsKLSAg
ICAvLyBBdCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwg
cmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAg
IEZsb2F0U2l6ZSBzY2FsZTsKLSAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5n
KHN1YlJlZ2lvbi5zaXplKCksIHNjYWxlKSkgewotICAgICAgICBzZXRGaWx0ZXJSZXNvbHV0aW9u
KHNjYWxlKTsKLSAgICAgICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKTsKLSAgICB9CisgICAgcmV0dXJuIG1fb3V0c2V0czsKIH0KIAotdm9pZCBDU1NGaWx0
ZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpCitGaWx0ZXJSZXN1bHQqIENTU0ZpbHRlcjo6
YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QKIHsKLSAgICBtX3NvdXJjZUdyYXBoaWMtPmNs
ZWFyUmVzdWx0KCk7Ci0gICAgaWYgKG1fc291cmNlQWxwaGEpCi0gICAgICAgIG1fc291cmNlQWxw
aGEtPmNsZWFyUmVzdWx0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0g
ICAgICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKLX0KKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9u
IDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBmdW5jdGlvbi0+YXBwbHko
b3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2UpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi12b2lkIENTU0ZpbHRlcjo6YXBwbHkoKQotewotICAg
IGF1dG8mIGVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgaWYgKG1fZmlsdGVy
UmVuZGVyZXIpIHsKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKGVmZmVj
dCk7Ci0gICAgICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkgewotICAgICAg
ICAgICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIHN0
YWNrLmFwcGVuZCh7ICpyZXN1bHQgfSk7CisgICAgICAgIG91dHB1dC5yZXN1bHRzKCkuYWRkKGZ1
bmN0aW9uLCBSZWY8RmlsdGVyUmVzdWx0PigqcmVzdWx0KSk7CiAgICAgfQotICAgIGVmZmVjdC5h
cHBseSgpOwotICAgIGVmZmVjdC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLX0KLQotTGF5b3V0UmVjdCBDU1NGaWx0ZXI6OmNvbXB1dGVT
b3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVj
dCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KQotewotICAgIC8vIFRoZSByZXN1bHQgb2Yg
dGhpcyBmdW5jdGlvbiBpcyB0aGUgYXJlYSBpbiB0aGUgImZpbHRlckJveFJlY3QiIHRoYXQgbmVl
ZHMgdG8gYmUgcmVwYWludGVkLCBzbyB0aGF0IHdlIGZ1bGx5IGNvdmVyIHRoZSAiZGlydHlSZWN0
Ii4KLSAgICBhdXRvIHJlY3RGb3JSZXBhaW50ID0gZGlydHlSZWN0OwotICAgIGlmIChoYXNGaWx0
ZXJUaGF0TW92ZXNQaXhlbHMoKSkKLSAgICAgICAgcmVjdEZvclJlcGFpbnQgKz0gb3V0c2V0cygp
OwotICAgIHJlY3RGb3JSZXBhaW50LmludGVyc2VjdChmaWx0ZXJCb3hSZWN0KTsKLSAgICByZXR1
cm4gcmVjdEZvclJlcGFpbnQ7Ci19CiAKLUltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgp
IGNvbnN0Ci17Ci0gICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+
aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiBtX2ZpbHRlclJlbmRlcmVyLT5vdXRwdXQoKTsK
LSAgICAKLSAgICByZXR1cm4gbV9lZmZlY3RzLmxhc3QoKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
LX0KLQotdm9pZCBDU1NGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCkKLXsKLSAgICBtX3NvdXJjZURyYXdpbmdSZWdpb24gPSBzb3VyY2VJ
bWFnZVJlY3Q7Ci0gICAgc2V0TWF4RWZmZWN0UmVjdHMoc291cmNlSW1hZ2VSZWN0KTsKLSAgICBz
ZXRGaWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKLSAgICBtX2dyYXBoaWNzQnVmZmVyQXR0
YWNoZWQgPSBmYWxzZTsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID09IDEpOworICAgIGF1dG8g
cmVzdWx0ID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICByZXN1bHQtPnRyYW5zZm9ybVRvQ29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgcmV0dXJuICZyZXN1bHQu
bGVha1JlZigpOwogfQogCi12b2lkIENTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMoY29uc3Qg
RmxvYXRSZWN0JiBlZmZlY3RSZWN0KQorVGV4dFN0cmVhbSYgQ1NTRmlsdGVyOjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNl
bnRhdGlvbikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAg
ICAgICAgZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVjdFJlY3QpOwotfQotCi1JbnRSZWN0
IENTU0ZpbHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0Ci17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9
IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgCi0gICAgaWYgKGxhc3RFZmZlY3QuaGFzUmVz
dWx0KCkgfHwgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0
KCkpKQotICAgICAgICByZXR1cm4gbGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoSW50UmVjdCB7IG1fZmlsdGVyUmVnaW9uIH0pOwotICAgIAotICAgIHJldHVybiB7
IH07Ci19Ci0KLUludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKQotICAgICAgICByZXR1cm4geyB9OwotCi0g
ICAgaWYgKCFtX291dHNldHMuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiBtX291dHNldHM7Ci0K
LSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgbV9vdXRzZXRzICs9
IGVmZmVjdC0+b3V0c2V0cygpOwotICAgIHJldHVybiBtX291dHNldHM7CisgICAgZm9yIChhdXRv
JiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQorICAgICAgICBmdW5jdGlvbi0+ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHJldHVybiB0czsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCmluZGV4
IDAwYjkxOTE3YjgwNGM5MmQ5NDA4Yjc1OGUzNzVjMjUyZjI5ZGIwYzUuLjVmNzJmZTdkNDI5Zjk0
ODU3MjE4ZmUxMzRlNjRjZWJjYjI0YTM1ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmls
dGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw4NiArMjYsNDUgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgIkxheW91dFJlY3Qu
aCIKLSNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEZpbHRl
ckVmZmVjdFJlbmRlcmVyOwogY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKLWNsYXNzIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIFJlbmRlckVs
ZW1lbnQ7Ci1jbGFzcyBTb3VyY2VBbHBoYTsKLWNsYXNzIFNvdXJjZUdyYXBoaWM7Ci0KLWVudW0g
Y2xhc3MgRmlsdGVyQ29uc3VtZXIgeyBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsK
IAogY2xhc3MgQ1NTRmlsdGVyIGZpbmFsIDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0ZpbHRlcj4gY3JlYXRlKCk7Ci0KLSAgICB2b2lkIHNl
dFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRlclJl
Z2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZp
bHRlclJlZ2lvbjsgfQogCi0gICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwotCi0gICAg
Ym9vbCBidWlsZChSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRl
ckNvbnN1bWVyKTsKLSAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIHZv
aWQgYXBwbHkoKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPENTU0ZpbHRlcj4gY3JlYXRl
KFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSA9
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWZQdHI8Q1NTRmlsdGVyPiBjcmVhdGUoVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYs
IFJlbmRlcmluZ01vZGUpOwogCiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSBj
b25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVsczsgfQogICAgIGJvb2wgaGFz
RmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJl
dHVybiBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luOyB9
CiAKLSAgICB2b2lkIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIElu
dE91dHNldHMgb3V0c2V0cygpIGNvbnN0OworICAgIGNvbnN0IFZlY3RvcjxSZWY8RmlsdGVyRnVu
Y3Rpb24+PiYgZnVuY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbnM7IH0KKyAgICBJ
bnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBDU1NGaWx0
ZXIoKTsKLSAgICB2aXJ0dWFsIH5DU1NGaWx0ZXIoKTsKLQotICAgIGJvb2wgaXNDU1NGaWx0ZXIo
KSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlSW1h
Z2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2VEcmF3aW5nUmVnaW9uOyB9Ci0K
LSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0
ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotCi0gICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdCYg
cHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYpOworICAgIENTU0ZpbHRl
cihjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSk7CisgICAgQ1NTRmlsdGVy
KFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmLCBSZW5kZXJpbmdNb2RlKTsKIAotICAgIHZv
aWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBidWlsZEZ1
bmN0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5
KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSkgY29uc3QgZmluYWw7CiAKLSAgICBib29sIHVwZGF0ZUJhY2tpbmdTdG9yZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KTsKLSAgICB2b2lkIGFsbG9jYXRlQmFja2lu
Z1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgVGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IGZpbmFsOwogCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7Ci0KLSAgICBM
YXlvdXRSZWN0IGNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0
UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KTsKLQotICAg
IEZsb2F0UmVjdCBtX3NvdXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVy
UmVnaW9uOwotCi0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVjdHM7Ci0gICAg
UmVmPFNvdXJjZUdyYXBoaWM+IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBtX3NvdXJjZUFscGhhOwotCi0gICAgbXV0YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0czsK
LQotICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkIHsgZmFsc2UgfTsKICAgICBib29s
IG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzRmls
dGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4geyBmYWxzZSB9OwotICAg
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gbV9maWx0ZXJSZW5k
ZXJlcjsKKworICAgIFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiBtX2Z1bmN0aW9uczsKKyAg
ICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRzZXRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNTU0ZpbHRlcikK
LSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsg
cmV0dXJuIGZpbHRlci5pc0NTU0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIudHlwZSgpID09IFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXI7IH0KIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXgg
MWJmMjJlNDJjMzUxODYxODc5ZWY1YWYwY2YxZWMwYjQ3MTQ5YjVlYS4uMDBmNjZlOGFiMjE4YmU0
ZjAxZmE3MmJjY2NhZTkxZTdlODYzYTM1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgKQEAgLTYyLDcgKzYyLDYgQEAgY2xhc3MgVGV4dFN0cmVhbTsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBDU1NGaWx0ZXI7CiBjbGFzcyBDbGlwUmVjdHM7CiBjbGFzcyBD
bGlwUmVjdHNDYWNoZTsKIGNsYXNzIEV2ZW50UmVnaW9uQ29udGV4dDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKaW5kZXggMjUwYTdkNWMwYmFh
MGFjNzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4uODcyYTY2NmUzNzRlMTk1NDZhMGQ1YzcxMDFm
NGJkOTA5MjY4NDQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyRmlsdGVycy5jcHAKQEAgLTMxLDkgKzMxLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJGaWx0ZXJzLmgiCiAKLSNpbmNsdWRlICJDU1NGaWx0ZXIuaCIK
ICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3Vt
ZW50UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2Vv
bWV0cnkuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTExNiwzOSAr
MTE3LDUxIEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJD
bGllbnRzKCkKICAgICBtX2ludGVybmFsU1ZHUmVmZXJlbmNlcy5jbGVhcigpOwogfQogCi12b2lk
IFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCit2b2lkIFJl
bmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZs
b2F0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgaWYgKCFtX2ZpbHRlcikg
ewotICAgICAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fZmls
dGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRS
ZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwotICAgIH0gZWxzZSBpZiAobV9maWx0ZXItPmZp
bHRlclNjYWxlKCkgIT0gc2NhbGVGYWN0b3IpIHsKLSAgICAgICAgbV9maWx0ZXItPnNldEZpbHRl
clNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV9maWx0ZXItPmNsZWFySW50ZXJtZWRpYXRl
UmVzdWx0cygpOwotICAgIH0KKyAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRl
cmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCByZW5kZXJpbmdNb2RlKTsKK30KKworR3Jh
cGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCgpCit7CisgICAg
cmV0dXJuIG1fc291cmNlSW1hZ2UgPyAmbV9zb3VyY2VJbWFnZS0+Y29udGV4dCgpIDogbnVsbHB0
cjsKK30KKwordm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZO
ZWVkZWQoKQoreworICAgIGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplIHsgbV9zb3VyY2VJbWFnZVJlY3Qu
c2l6ZSgpIH07CisgICAgbV9zb3VyY2VJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNh
bFNpemUsIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCksIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwogCi0gICAgLy8gSWYgdGhlIGZpbHRlciBm
YWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3aWxsIHN0aWxsIGF0
dGVtcHQgdG8KLSAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBjb21w
b3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KLSAgICAvLyBGSVhNRTogdGhpcyBy
ZWJ1aWxkcyB0aGUgZW50aXJlIGVmZmVjdHMgY2hhaW4gZXZlbiBpZiB0aGUgZmlsdGVyIHN0eWxl
IGRpZG4ndCBjaGFuZ2UuCi0gICAgaWYgKCFtX2ZpbHRlci0+YnVpbGQocmVuZGVyZXIsIHJlbmRl
cmVyLnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSkpCi0g
ICAgICAgIG1fZmlsdGVyID0gbnVsbHB0cjsKKyAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQg
PSB0cnVlOwogfQogCi1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5G
aWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29u
c3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKK0dyYXBoaWNzQ29udGV4dCogUmVuZGVy
TGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBM
YXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNv
bnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgaWYgKCFtX2ZpbHRlcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvJiBmaWx0ZXIgPSAqbV9maWx0ZXI7
Ci0gICAgYXV0byBmaWx0ZXJTb3VyY2VSZWN0ID0gZmlsdGVyLmNvbXB1dGVTb3VyY2VJbWFnZVJl
Y3RGb3JEaXJ0eVJlY3QoZmlsdGVyQm94UmVjdCwgZGlydHlSZWN0KTsKKyAgICAKKyAgICBhdXRv
IGZpbHRlclNvdXJjZVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgaWYgKGZpbHRlci5oYXNGaWx0ZXJU
aGF0TW92ZXNQaXhlbHMoKSkKKyAgICAgICAgZmlsdGVyU291cmNlUmVjdCArPSBmaWx0ZXIub3V0
c2V0cygpOworICAgIGZpbHRlclNvdXJjZVJlY3QuaW50ZXJzZWN0KGZpbHRlckJveFJlY3QpOwor
CiAgICAgaWYgKGZpbHRlclNvdXJjZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGJvb2wgaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSA9IGZpbHRlci51cGRhdGVC
YWNraW5nU3RvcmVSZWN0KGZpbHRlclNvdXJjZVJlY3QpOworICAgIAorICAgIGlmIChmaWx0ZXJT
b3VyY2VSZWN0ICE9IG1fc291cmNlSW1hZ2VSZWN0KSB7CisgICAgICAgIG1fc291cmNlSW1hZ2VS
ZWN0ID0gZmlsdGVyU291cmNlUmVjdDsKKyAgICAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVk
ID0gZmFsc2U7CisgICAgfQorICAgIAogICAgIGlmICghZmlsdGVyLmhhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscygpKQogICAgICAgICBtX3JlcGFpbnRSZWN0ID0gZGlydHlSZWN0OwogICAgIGVsc2Ug
ewotICAgICAgICBpZiAoaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSkKKyAgICAgICAgaWYgKCFtX2dy
YXBoaWNzQnVmZmVyQXR0YWNoZWQpCiAgICAgICAgICAgICBtX3JlcGFpbnRSZWN0ID0gZmlsdGVy
U291cmNlUmVjdDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtX3JlcGFpbnRSZWN0ID0g
ZGlydHlSZWN0OwpAQCAtMTU5LDExICsxNzIsOSBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxh
eWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdAog
ICAgIG1fcGFpbnRPZmZzZXQgPSBmaWx0ZXJTb3VyY2VSZWN0LmxvY2F0aW9uKCk7CiAgICAgcmVz
ZXREaXJ0eVNvdXJjZVJlY3QoKTsKIAotICAgIGZpbHRlci5kZXRlcm1pbmVGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKTsKLQotICAgIGZpbHRlci5hbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVk
KGRlc3RpbmF0aW9uQ29udGV4dCk7Ci0gICAgYXV0byogc291cmNlR3JhcGhpY3NDb250ZXh0ID0g
ZmlsdGVyLmlucHV0Q29udGV4dCgpOwotICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0IHx8
IGZpbHRlci5maWx0ZXJSZWdpb24oKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVk
c0NsYW1waW5nKGZpbHRlci5maWx0ZXJSZWdpb24oKS5zaXplKCkpKQorICAgIGFsbG9jYXRlQmFj
a2luZ1N0b3JlSWZOZWVkZWQoKTsKKyAgICBhdXRvKiBzb3VyY2VHcmFwaGljc0NvbnRleHQgPSBp
bnB1dENvbnRleHQoKTsKKyAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4dCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBUcmFuc2xhdGUgdGhlIGNvbnRleHQgc28gdGhhdCB0
aGUgY29udGVudHMgb2YgdGhlIGxheWVyIGlzIGNhcHR1cmVkIGluIHRoZSBvZmZzY3JlZW4gbWVt
b3J5IGJ1ZmZlci4KQEAgLTE3NywyMyArMTg4LDE1IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVy
TGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0
CiAKIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0Nv
bnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKIHsKLSAgICBBU1NFUlQobV9maWx0ZXItPmlucHV0
Q29udGV4dCgpKTsKKyAgICBBU1NFUlQoaW5wdXRDb250ZXh0KCkpOwogCiAgICAgTE9HX1dJVEhf
U1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiXG5SZW5kZXJMYXllckZpbHRlcnMgIiA8PCB0aGlz
IDw8ICIgYXBwbHlGaWx0ZXJFZmZlY3QiKTsKIAogICAgIGF1dG8mIGZpbHRlciA9ICptX2ZpbHRl
cjsKLSAgICBmaWx0ZXIuaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsKLQotICAgIGZpbHRlci5h
cHBseSgpOwotCi0gICAgLy8gR2V0IHRoZSBmaWx0ZXJlZCBvdXRwdXQgYW5kIGRyYXcgaXQgaW4g
cGxhY2UuCi0gICAgTGF5b3V0UmVjdCBkZXN0UmVjdCA9IGZpbHRlci5vdXRwdXRSZWN0KCk7Ci0g
ICAgZGVzdFJlY3QubW92ZShtX3BhaW50T2Zmc2V0LngoKSwgbV9wYWludE9mZnNldC55KCkpOwot
Ci0gICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9IGZpbHRlci5vdXRwdXQoKSkKLSAgICAgICAg
ZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqb3V0cHV0QnVmZmVyLCBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsKIAot
ICAgIGZpbHRlci5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKKyAgICBhdXRvIGdlb21ldHJ5
ID0gbWFrZVVuaXF1ZTxGaWx0ZXJHZW9tZXRyeT4obV9zb3VyY2VJbWFnZVJlY3QsIG1fc291cmNl
SW1hZ2VSZWN0KTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVy
KGZpbHRlciwgbV9zb3VyY2VJbWFnZS5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOwogCiAgICAg
TE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJGaWx0ZXJzICIg
PDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4ZjE1
NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLjJhZjZmYjQ3ZTE4NGY2OTQwNDdjMGU3MTUyNzNh
YzE0MmFhNWJmYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJG
aWx0ZXJzLmgKQEAgLTM3LDggKzM3LDEwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IENhY2hlZFNWR0RvY3VtZW50OworY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgRWxlbWVudDsKIGNs
YXNzIEZpbHRlck9wZXJhdGlvbnM7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKIAogY2xhc3MgUmVuZGVy
TGF5ZXJGaWx0ZXJzIGZpbmFsIDogcHJpdmF0ZSBDYWNoZWRTVkdEb2N1bWVudENsaWVudCB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02OSwxNCArNzEsMTkgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3Qg
TmV0d29ya0xvYWRNZXRyaWNzJikgZmluYWw7CiAgICAgdm9pZCByZXNldERpcnR5U291cmNlUmVj
dCgpIHsgbV9kaXJ0eVNvdXJjZVJlY3QgPSBMYXlvdXRSZWN0KCk7IH0KKyAgICBHcmFwaGljc0Nv
bnRleHQqIGlucHV0Q29udGV4dCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5l
ZWRlZCgpOwogCiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKICAgICBWZWN0b3I8UmVmUHRy
PEVsZW1lbnQ+PiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlczsKICAgICBWZWN0b3I8Q2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJlbmNlczsK
IAorICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKKyAgICBGbG9hdFJlY3Qg
bV9zb3VyY2VJbWFnZVJlY3Q7CiAgICAgUmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7CiAgICAg
TGF5b3V0UmVjdCBtX2RpcnR5U291cmNlUmVjdDsKKyAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJB
dHRhY2hlZCB7IGZhbHNlIH07CiAgICAgCiAgICAgLy8gRGF0YSB1c2VkIHBlciBwYWludAogICAg
IExheW91dFBvaW50IG1fcGFpbnRPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDQxNjJiODFm
ZjNiYWM4Y2MxYzJkOGY0ODkxODE0OTkxZWM3NTU3YTEuLjNkM2M2Y2ExODM5MTE1MDZjZjI0ZGI4
MTQwYjlmOGFmNzAxMWM3ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNSw2ICszNiw4IEBACiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJp
bmdDb250ZXh0LmgiCkBAIC04MCw2MiArODMsMjcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmIGNsaWVudCwgYm9vbAog
ICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9u
ID8gQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwogfQog
Ci1zdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OmJ1aWxkUHJpbWl0aXZlcyhTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKLXsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOwotICAgIGlmIChmaWx0
ZXJFbGVtZW50KCkuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0g
ZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7Ci0KLSAgICAvLyBBZGQgZWZmZWN0cyB0byB0aGUg
YnVpbGRlcgotICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4o
U291cmNlR3JhcGhpYzo6Y3JlYXRlKGZpbHRlcikpOwotICAgIGJ1aWxkZXItPnNldFByaW1pdGl2
ZVVuaXRzKGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpKTsKLSAgICBidWlsZGVyLT5z
ZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgCi0gICAgZm9yIChh
dXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KCkpKSB7Ci0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWxl
bWVudC5idWlsZChidWlsZGVyLmdldCgpLCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVmZmVjdCkg
ewotICAgICAgICAgICAgYnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0Vm
ZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwgZWxlbWVudC5yZW5kZXJlcigpKTsKLSAg
ICAgICAgZWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAg
ICAgZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVS
ZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWxlbWVudCwg
ZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KSk7Ci0g
ICAgICAgIGlmIChlbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05f
Q09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGlu
Z0NvbG9yU3BhY2UoZWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJ
bnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8g
RGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9
Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlbGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkp
OwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlcjsKLX0KLQogYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVu
ZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZH
UmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAg
IEFTU0VSVF9VTlVTRUQocmVzb3VyY2VNb2RlLCAhcmVzb3VyY2VNb2RlKTsKIAotICAgIExPRyhG
aWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgJXAgYXBwbHlSZXNvdXJjZSByZW5kZXJl
ciAlcCIsIHRoaXMsICZyZW5kZXJlcik7Ci0KLSAgICBpZiAobV9yZW5kZXJlckZpbHRlckRhdGFN
YXAuY29udGFpbnMoJnJlbmRlcmVyKSkgewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRh
ID0gbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuZ2V0KCZyZW5kZXJlcik7Ci0gICAgICAgIGlmIChm
aWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpQYWludGluZ1NvdXJjZSB8fCBmaWx0ZXJE
YXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpBcHBseWluZykKLSAgICAgICAgICAgIGZpbHRlckRh
dGEtPnN0YXRlID0gRmlsdGVyRGF0YTo6Q3ljbGVEZXRlY3RlZDsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBBbHJlYWR5IGJ1aWx0LCBvciB3ZSdyZSBpbiBhIGN5Y2xlLCBvciB3ZSdyZSBtYXJr
ZWQgZm9yIHJlbW92YWwuIFJlZ2FyZGxlc3MsIGp1c3QgZG8gbm90aGluZyBtb3JlIG5vdy4KLSAg
ICB9Ci0KKyAgICAvLyBCdWlsZCB0aGUgU1ZHRmlsdGVyCiAgICAgYXV0byBmaWx0ZXJEYXRhID0g
bWFrZVVuaXF1ZTxGaWx0ZXJEYXRhPigpOwotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0Jv
eCA9IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgYXV0byByZW5kZXJpbmdNb2Rl
ID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAK
LSAgICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJl
Y3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50
KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIGlmIChmaWx0ZXJEYXRh
LT5ib3VuZGFyaWVzLmlzRW1wdHkoKSkKKyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0
ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50KCksIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmls
dGVyRGF0YS0+ZmlsdGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgRmxvYXRS
ZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKKyAg
ICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3Rh
bmdsZTxTVkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCku
ZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpOwogCi0gICAgLy8gRGV0ZXJtaW5lIGFi
c29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBmb3IgZmlsdGVyLiAKKyAgICAvLyBDYWxjdWxh
dGUgdGhlIHNvdXJjZUltYWdlUmVjdAorICAgIGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24gPSBy
ZW5kZXJlci5zdHJva2VCb3VuZGluZ0JveCgpOworICAgIGZpbHRlckRhdGEtPmRyYXdpbmdSZWdp
b24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOworCisgICAgLy8gQ2FsY3VsYXRl
IHRoZSBhYnNvbHV0ZVRyYW5zZm9ybQogICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5z
Zm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRl
cm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKICAgICBpZiAoIWFic29sdXRlVHJhbnNm
b3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDMsNjUgKzEx
MSwyMiBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBv
ZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1
Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCiAgICAgZmlsdGVyRGF0YS0+c2hl
YXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zv
cm0ueFNjYWxlKCksIDAsIDAsIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKIAot
ICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRo
ZSBkcmF3aW5nIHJlZ2lvbi4KLSAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVy
ZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsKLSAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmlu
dGVyc2VjdChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzKTsKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZp
bHRlciByZXNvbHV0aW9uCiAgICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZp
bHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+
ZHJhd2luZ1JlZ2lvbik7CisgICAgZmlsdGVyRGF0YS0+c2NhbGUgPSB7IDEsIDEgfTsKKyAgICBJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUo
KSwgZmlsdGVyRGF0YS0+c2NhbGUpOwogCi0gICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2Jq
ZWN0LgotICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudCgp
LnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJP
VU5ESU5HQk9YOwotICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZp
bHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdpbmdSZWdp
b24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmltaXRpdmVC
b3VuZGluZ0JveE1vZGUpOwotCi0gICAgLy8gQ3JlYXRlIGFsbCByZWxldmFudCBmaWx0ZXIgcHJp
bWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gYnVpbGRQcmltaXRpdmVzKCpmaWx0
ZXJEYXRhLT5maWx0ZXIpOwotICAgIGlmICghZmlsdGVyRGF0YS0+YnVpbGRlcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVy
LiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlhdGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdn
ZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4KLSAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBh
YnNvbHV0ZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRTaXplIHNjYWxlKDEsIDEpOwotICAgIElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxl
KTsKLSAgICB0ZW1wU291cmNlUmVjdC5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQo
KSk7Ci0KLSAgICAvLyBTZXQgdGhlIHNjYWxlIGxldmVsIGluIFNWR0ZpbHRlci4KLSAgICBmaWx0
ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgRmlsdGVy
RWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwot
ICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZmZWN0SW5w
dXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZVxuIiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVm
ZmVjdCgpKTsKLQotICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpOwotICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RS
ZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGlt
YWdlIHNpemUsCi0gICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBz
Y2FsZSBmYWN0b3JzLgotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3Vi
UmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0
RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBkcmF3aW5n
UmVnaW9uIGlzIGVtcHR5LCB3ZSBoYXZlIHNvbWV0aGluZyBsaWtlIDxnIGZpbHRlcj0iLi4iLz4u
Ci0gICAgLy8gRXZlbiBpZiB0aGUgdGFyZ2V0IG9iamVjdEJvdW5kaW5nQm94KCkgaXMgZW1wdHks
IHdlIHN0aWxsIGhhdmUgdG8gZHJhdyB0aGUgbGFzdCBlZmZlY3QgcmVzdWx0IGltYWdlIGluIHBv
c3RBcHBseVJlc291cmNlLgotICAgIGlmIChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmlzRW1w
dHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5z
KCZyZW5kZXJlcikpOwotICAgICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0
OwotICAgICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3Zl
KGZpbHRlckRhdGEpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENo
YW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBmaWx0ZXJl
ZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhlIHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4KKyAgICAv
LyBDYWxjdWxhdGUgZWZmZWN0aXZlVHJhbnNmb3JtCiAgICAgQWZmaW5lVHJhbnNmb3JtIGVmZmVj
dGl2ZVRyYW5zZm9ybTsKLSAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgo
KSwgc2NhbGUuaGVpZ2h0KCkpOworICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShmaWx0ZXJE
YXRhLT5zY2FsZSk7CiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEt
PnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9
IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lm
IEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKICAgICBhdXRvIGNv
bG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKTsKICNlbHNlCiAg
ICAgYXV0byBjb2xvclNwYWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAjZW5k
aWYKKwogICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9y
bSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFzb3VyY2VH
cmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFp
bnMoJnJlbmRlcmVyKSk7CkBAIC0yMTAsMTkgKzEzNSwxNSBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIC8vIFNldCB0aGUg
cmVuZGVyaW5nIG1vZGUgZnJvbSB0aGUgcGFnZSdzIHNldHRpbmdzLgotICAgIGZpbHRlckRhdGEt
PmZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLQorICAgIC8vIFNldCB0
aGUgd29ya2luZyBHcmFwaGljQ29udGV4dCB0byB0aGUgZmlsdGVyIHNvdXJjZUdyYXBoaWMKICAg
ICBHcmFwaGljc0NvbnRleHQmIHNvdXJjZUdyYXBoaWNDb250ZXh0ID0gc291cmNlR3JhcGhpYy0+
Y29udGV4dCgpOwotICAKKyAgICAKICAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVy
ID0gV1RGTW92ZShzb3VyY2VHcmFwaGljKTsKICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQg
PSBjb250ZXh0OwotCisgICAgCiAgICAgY29udGV4dCA9ICZzb3VyY2VHcmFwaGljQ29udGV4dDsK
IAotICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVy
KSk7CiAgICAgbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShm
aWx0ZXJEYXRhKSk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjY3LDM4ICsxODgsMTgg
QEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
RmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0RWZmZWN0
KCk7Ci0KLSAgICBpZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1w
dHkoKSAmJiAhbGFzdEVmZmVjdC0+ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3Qu
IEl0IGp1c3QgbmVlZHMgdG8gYmUgY2FsbGVkIG9uIHRoZQotICAgICAgICAvLyBpbml0aWFsIGZp
bHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9u
IGEKLSAgICAgICAgLy8gc2Vjb25kIGRyYXdpbmcuCi0gICAgICAgIGlmIChmaWx0ZXJEYXRhLnN0
YXRlICE9IEZpbHRlckRhdGE6OkJ1aWx0KQotICAgICAgICAgICAgZmlsdGVyRGF0YS5maWx0ZXIt
PnNldFNvdXJjZUltYWdlKFdURk1vdmUoZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyKSk7
Ci0KLSAgICAgICAgLy8gQWx3YXlzIHRydWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0IChm
aWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlmICghbGFz
dEVmZmVjdC0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBG
aWx0ZXJEYXRhOjpBcHBseWluZzsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7Ci0g
ICAgICAgICAgICBsYXN0RWZmZWN0LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAg
ICAgICAgICAgIGxhc3RFZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAgICB9CisgICAgaWYgKCFmaWx0ZXJEYXRhLmJv
dW5kYXJpZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJE
YXRhOjpCdWlsdDsKIAotICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZm
ZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRl
VHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotCi0gICAg
ICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5m
aWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJS
ZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1
ZmZlcigqcmVzdWx0SW1hZ2UsIGxhc3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
ICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRp
b24oKSk7CisgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFi
c29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwor
ICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuc2NhbGUud2lk
dGgoKSwgMSAvIGZpbHRlckRhdGEuc2NhbGUuaGVpZ2h0KCkpKTsKIAotICAgICAgICAgICAgY29u
dGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwot
ICAgICAgICB9CisgICAgICAgIGF1dG8gZ2VvbWV0cnkgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckdl
b21ldHJ5PihmaWx0ZXJEYXRhLmJvdW5kYXJpZXMsIGZpbHRlckRhdGEuZHJhd2luZ1JlZ2lvbiwg
ZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgZmlsdGVyRGF0YS5zY2FsZSk7
CisgICAgICAgIGNvbnRleHQtPmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcigqZmlsdGVyRGF0YS5maWx0
ZXIsIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlci5nZXQoKSwgV1RGTW92ZShnZW9tZXRy
eSkpOworICAgIAorICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLnNjYWxlKTsKKyAg
ICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFu
c2Zvcm0pOwogICAgIH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxs
cHRyOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9uZVxuIik7
CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGlu
Z0JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKQEAgLTMwNiwyNyArMjA3LDEzIEBAIEZs
b2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChjb25z
dCBSZW5kZXJPYmplY3QmIG9iamVjCiAgICAgcmV0dXJuIFNWR0xlbmd0aENvbnRleHQ6OnJlc29s
dmVSZWN0YW5nbGU8U1ZHRmlsdGVyRWxlbWVudD4oJmZpbHRlckVsZW1lbnQoKSwgZmlsdGVyRWxl
bWVudCgpLmZpbHRlclVuaXRzKCksIG9iamVjdC5vYmplY3RCb3VuZGluZ0JveCgpKTsKIH0KIAot
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChS
ZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQordm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5k
ZXJPYmplY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwotCi0gICAgTE9HKEZp
bHRlcnMsICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAlcCBwcmltaXRpdmVBdHRyaWJ1dGVDaGFu
Z2VkIHJlbmRlcmVyICVwIiwgdGhpcywgb2JqZWN0KTsKLQogICAgIGZvciAoY29uc3QgYXV0byYg
b2JqZWN0RmlsdGVyRGF0YVBhaXIgOiBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcCkgewogICAgICAg
ICBjb25zdCBhdXRvJiBmaWx0ZXJEYXRhID0gb2JqZWN0RmlsdGVyRGF0YVBhaXIudmFsdWU7CiAg
ICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSAhPSBGaWx0ZXJEYXRhOjpCdWlsdCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIqIGJ1aWxkZXIgPSBm
aWx0ZXJEYXRhLT5idWlsZGVyLmdldCgpOwotICAgICAgICBGaWx0ZXJFZmZlY3QqIGVmZmVjdCA9
IGJ1aWxkZXItPmVmZmVjdEJ5UmVuZGVyZXIob2JqZWN0KTsKLSAgICAgICAgaWYgKCFlZmZlY3Qp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gU2luY2UgYWxsIGVmZmVjdHMgc2hh
cmVzIHRoZSBzYW1lIGF0dHJpYnV0ZSB2YWx1ZSwgYWxsCi0gICAgICAgIC8vIG9yIG5vbmUgb2Yg
dGhlbSB3aWxsIGJlIGNoYW5nZWQuCi0gICAgICAgIGlmICghcHJpbWl0dmUtPnNldEZpbHRlckVm
ZmVjdEF0dHJpYnV0ZShlZmZlY3QsIGF0dHJpYnV0ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGJ1aWxkZXItPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShlZmZlY3QpOwotCiAgICAgICAg
IC8vIFJlcGFpbnQgdGhlIGltYWdlIG9uIHRoZSBzY3JlZW4uCiAgICAgICAgIG1hcmtDbGllbnRG
b3JJbnZhbGlkYXRpb24oKm9iamVjdEZpbHRlckRhdGFQYWlyLmtleSwgUmVwYWludEludmFsaWRh
dGlvbik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDU2NGFhYWQ0OGEyMmUzYzQ1MDdlZWY1MGFk
YzY0NDAxZDg3MDNmODMuLjE0OGFjMDhiMzllODFjZjI5NmM2NGZjYmRlZDgzMTk2ZTFhODlkNzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmgKQEAgLTIzLDEwICsyMyw5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgotI2luY2x1
ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgpAQCAt
NDIsOCArNDEsNyBAQCBwdWJsaWM6CiAKICAgICBGaWx0ZXJEYXRhKCkgPSBkZWZhdWx0OwogCi0g
ICAgUmVmUHRyPFNWR0ZpbHRlcj4gZmlsdGVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0
ZXJCdWlsZGVyPiBidWlsZGVyOworICAgIFJlZlB0cjxGaWx0ZXI+IGZpbHRlcjsKICAgICBSZWZQ
dHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWNCdWZmZXI7CiAgICAgR3JhcGhpY3NDb250ZXh0
KiBzYXZlZENvbnRleHQgeyBudWxscHRyIH07CiAgICAgQWZmaW5lVHJhbnNmb3JtIHNoZWFyRnJl
ZUFic29sdXRlVHJhbnNmb3JtOwpAQCAtNzEsOCArNjksNiBAQCBwdWJsaWM6CiAKICAgICBGbG9h
dFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsK
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZFByaW1pdGl2ZXMo
U1ZHRmlsdGVyJikgY29uc3Q7Ci0KICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIGZpbHRl
clVuaXRzKCkgY29uc3QgeyByZXR1cm4gZmlsdGVyRWxlbWVudCgpLmZpbHRlclVuaXRzKCk7IH0K
ICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3QgeyBy
ZXR1cm4gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCk7IH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXgg
YjQ3Mzk0MzhjNWYzZTJjNjkxZWYzYjAyYmJiZWM5ZDI5MjA3MDNiNy4uZDJlNTlkMTM5ZDhjOWY0
MmM1N2IwNGNjOWFjNzMxZjc0YWVhOGUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAj
aW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxp
emF0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NU
eXBlcy5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlcklt
YWdlLmgiCkBAIC00OSw2ICs1MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2lu
Y2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdFbGxpcHNlRWxlbWVudC5o
IgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIK
ICNpbmNsdWRlICJTVkdMaW5lRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50Lmgi
CkBAIC00MjgsMTMgKzQzMCw5IEBAIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0
U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImCiAgICAgICAgIHdy
aXRlTmFtZVZhbHVlUGFpcih0cywgInByaW1pdGl2ZVVuaXRzIiwgZmlsdGVyLnByaW1pdGl2ZVVu
aXRzKCkpOwogICAgICAgICB0cyA8PCAiXG4iOwogICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNl
aG9sZGVyIGZpbHRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIuCi0gICAgICAgIEZs
b2F0UmVjdCBkdW1teVJlY3Q7Ci0gICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6
OmNyZWF0ZShBZmZpbmVUcmFuc2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15UmVj
dCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChhdXRvIGJ1aWxkZXIgPSBmaWx0ZXIuYnVpbGRQcmltaXRp
dmVzKGR1bW15RmlsdGVyLmdldCgpKSkgeworICAgICAgICBpZiAoUmVmUHRyPEZpbHRlcj4gZHVt
bXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXIuZmlsdGVyRWxlbWVudCgpKSkgewog
ICAgICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotCi0g
ICAgICAgICAgICBpZiAoRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+bGFzdEVm
ZmVjdCgpKQotICAgICAgICAgICAgICAgIGxhc3RFZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMpOworICAgICAgICAgICAgZHVtbXlGaWx0ZXItPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChyZXNvdXJjZS5yZXNvdXJjZVR5cGUoKSA9
PSBDbGlwcGVyUmVzb3VyY2VUeXBlKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIGNsaXBwZXIgPSBz
dGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXImPihyZXNvdXJjZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAppbmRleCA3YmNmMDQxODAwZjc5
OWYxMTc0Y2ZlMDRiODIyZDZkMDY0MzFmNjg2Li4xNjBlMDBkY2JlZDY5NWZiNDA3MWU2MTcxZWNm
MTJmMmUxOTY0ZmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAK
QEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZFQmxlbmQuaCIKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZH
RmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgogCkBAIC0xMDAsMjAgKzEwMCwxNSBAQCB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQmxlbmRFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikg
Y29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29u
c3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4x
KCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIo
KSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAgIGF1
dG8gaW5wdXQyID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMigpKTsKIAogICAgIGlmICghaW5wdXQx
IHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3Qg
PSBGRUJsZW5kOjpjcmVhdGUoZmlsdGVyLCBtb2RlKCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3Rv
ciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVj
dHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsK
LSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZlY3Q7
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBGRUJsZW5kOjpjcmVhdGUobW9k
ZSgpKSwgeyB7ICppbnB1dDEgfSwgeyAqaW5wdXQyIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCmluZGV4IDkwMzdjYjEyMWY5MzY3Yjc4OGQ5MjE2ZTBi
OTQxZmM4YjA2ZGVjNjYuLjI3YTgyZjVjY2I0NzBlNjMwNmM1NWI0OWVhZTgyNjQzM2RlOGQyZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCkBAIC02OSw3ICs2OSw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZl
Y3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0
cnkgeyAqdGhpcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JN
YXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5jcHAKaW5kZXggMDUyNDg1NzhjMjc0YzhmYTJiM2UxZjI0NGU0MzY3ODY4ZjQyYmE5Yy4u
OGFiODBhMjY4ZTlmYzNkMDIxZWQ0MjMzODliYzRiODA5MmM4YTEyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCkBAIC0yMyw3ICsyMyw3IEBA
CiAjaW5jbHVkZSAiU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdG
aWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJ
bmxpbmVzLmg+CiAKQEAgLTEwMCwxMiArMTAwLDExIEBAIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVm
ZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgVmVjdG9yPGZsb2F0PiBmaWx0ZXJWYWx1ZXM7CiAg
ICAgQ29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGUgPSB0eXBlKCk7CkBAIC0xMzUsMTUgKzEzNCwx
MyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbAogICAgICAgICBpZiAoKGZpbHRlclR5cGUgPT0g
RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCAmJiBzaXplICE9IDIwKQogICAgICAgICAgICAgfHwg
KGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSAmJiBzaXplICE9IDEp
CiAgICAgICAgICAgICB8fCAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJB
VEUgJiYgc2l6ZSAhPSAxKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgCiAgICAgICAgIGZpbHRlclZhbHVlcyA9IHZhbHVlcygp
OwogICAgICAgICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICB9CiAKLSAgICBhdXRv
IGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIGZpbHRlclR5cGUsIFdURk1v
dmUoZmlsdGVyVmFsdWVzKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQx
IH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRUNvbG9yTWF0cml4OjpjcmVh
dGUoZmlsdGVyVHlwZSwgV1RGTW92ZShmaWx0ZXJWYWx1ZXMpKSwgeyBpbnB1dDEucmVsZWFzZU5v
bk51bGwoKSB9IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKaW5kZXggN2FiNGFhNDE4MWU3YWIxOThi
MTJlNzdiZTIwNmI5YzVjNDEwMjNmZC4uY2E3YTdkNWY1N2Q2NWE4Y2I3ZWI5MWYzYmRkNTQ2MjI5
ZDM5NGY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
LmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJp
bmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKaW5kZXggZTg5MjY3Y2U3ZDM0MTQ2ZDJhNjVkNmYw
MWRjZTVkZWY0OWM4MmY3OC4uNmIxNTFjYWIyMGE0ODk4MjM1MDkwN2YzNjVhNzNjZjQ4YzYzZDkz
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiU1ZHRkVGdW5jQkVsZW1l
bnQuaCIKICNpbmNsdWRlICJTVkdGRUZ1bmNHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZFRnVu
Y1JFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KIApAQCAtNjIsMTIgKzYyLDExIEBAIHZvaWQgU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNv
CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0
ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50
VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBG
aWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIAorICAgIGF1dG8gaW5wdXQxID0g
ZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIHJlZDsKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVuOwpAQCAt
ODUsOSArODQsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdAogICAgICAgICAgICAgYWxwaGEg
PSBkb3duY2FzdDxTVkdGRUZ1bmNBRWxlbWVudD4oY2hpbGQpLnRyYW5zZmVyRnVuY3Rpb24oKTsK
ICAgICB9CiAgICAgCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUoZmlsdGVyLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpLCB7IHsg
KmlucHV0MSB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAppbmRleCBiYjU4OTM0N2Q4ODI2ZGZiMzYwOWVkYWM2
ZThiOTkzYTRkZDU0ODYzLi5mMjJkNTFhMmJkOGMyMzc2NWRhOThiZmMyNWU2YTI5OGE4ZWYyZWE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQuaApAQCAtNDMsNyArNDMsNyBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBzdmdBdHRy
aWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJv
cGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdB
bmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCmluZGV4IDNj
YTk5Yjg3NTcwOGJiZDhhNmJhZjY1M2RjMDZmZTIwNWFjOTgyMzUuLjYzMDY5NjdjODNjYTY0NWYw
ZDhmNjVhOGEzMTk5OGQyNzU4M2QzMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiU1ZHRkVDb21w
b3NpdGVFbGVtZW50LmgiCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJT
VkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC00MCw3ICs0
MCw3IEBAIGlubGluZSBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lCiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUZs
YWcsIFtdIHsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdO
YW1lczo6aW5BdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2luMT4oKTsKICAgICAgICAg
UHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6aW4yQXR0ciwgJlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9pbjI+KCk7Ci0gICAgICAgIFByb3BlcnR5UmVnaXN0cnk6
OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgQ29tcG9zaXRlT3BlcmF0
aW9uVHlwZSwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9zdmdPcGVyYXRvcj4oKTsKKyAgICAg
ICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6b3BlcmF0b3JB
dHRyLCBGRUNvbXBvc2l0ZU9wZXJhdG9yLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2NvbXBv
c2l0ZU9wZXJhdG9yPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3Bl
cnR5PFNWR05hbWVzOjprMUF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fazE+KCk7CiAg
ICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmsyQXR0
ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMj4oKTsKICAgICAgICAgUHJvcGVydHlSZWdp
c3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6azNBdHRyLCAmU1ZHRkVDb21wb3NpdGVF
bGVtZW50OjptX2szPigpOwpAQCAtNTYsOSArNTYsOSBAQCBSZWY8U1ZHRkVDb21wb3NpdGVFbGVt
ZW50PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0
YQogdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1l
ID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKLSAgICAgICAgQ29tcG9zaXRlT3BlcmF0aW9u
VHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9u
VHlwZT46OmZyb21TdHJpbmcodmFsdWUpOworICAgICAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIHBy
b3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJv
bVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKLSAgICAgICAg
ICAgIG1fc3ZnT3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxDb21wb3NpdGVPcGVyYXRpb25U
eXBlPihwcm9wZXJ0eVZhbHVlKTsKKyAgICAgICAgICAgIG1fY29tcG9zaXRlT3BlcmF0b3ItPnNl
dEJhc2VWYWxJbnRlcm5hbDxGRUNvbXBvc2l0ZU9wZXJhdG9yPihwcm9wZXJ0eVZhbHVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTksNyArOTksNyBAQCBib29sIFNWR0ZFQ29tcG9z
aXRlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0
LCBjb25zdAogewogICAgIEZFQ29tcG9zaXRlKiBjb21wb3NpdGUgPSBzdGF0aWNfY2FzdDxGRUNv
bXBvc2l0ZSo+KGVmZmVjdCk7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRv
ckF0dHIpCi0gICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldE9wZXJhdGlvbihzdmdPcGVyYXRv
cigpKTsKKyAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0Q29tcG9zaXRlT3BlcmF0b3IoY29t
cG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprMUF0dHIp
CiAgICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldEsxKGsxKCkpOwogICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6azJBdHRyKQpAQCAtMTMxLDIwICsxMzEsMTUgQEAgdm9pZCBTVkdGRUNv
bXBvc2l0ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVy
LCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWls
ZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOwotICAgIAorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
Lm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGZpbHRlci5uYW1lZEVmZmVj
dChpbjIoKSk7CisKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb3NpdGU6OmNyZWF0ZShmaWx0ZXIs
IHN2Z09wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0KCkpOwotICAgIEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1
dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5w
dXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBl
ZmZlY3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBGRUNvbXBvc2l0ZTo6
Y3JlYXRlKGNvbXBvc2l0ZU9wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0KCkpLCB7IHsg
KmlucHV0MSB9LCB7ICppbnB1dDIgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAppbmRleCA4MWE3OGM4NjU3YTBmYTMwNDRkZjViN2M1YTA4
MGQ2ZTc3OTcyMmY2Li5kYzk1NDc5YjU2YWQ5NThlMzZjZWNlYWEzYmY0YmE1NjE0YjY2YmNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCkBAIC0yNywxNSAr
MjcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8PgotaW5saW5lIHVuc2ln
bmVkIFNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmhpZ2hlc3RFeHBv
c2VkRW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsg
fQoraW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0b3I+Ojpo
aWdoZXN0RXhwb3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FS
SVRITUVUSUM7IH0KIAogdGVtcGxhdGU8Pgotc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBv
c2l0ZU9wZXJhdGlvblR5cGU+IHsKK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0
ZU9wZXJhdG9yPiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RFbnVtVmFsdWUoKSB7IHJl
dHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOyB9CiAKLSAgICBzdGF0aWMgU3RyaW5n
IHRvU3RyaW5nKENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICBzdGF0aWMgU3RyaW5n
IHRvU3RyaW5nKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IpCiAgICAgewot
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRv
cikgewogICAgICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CiAgICAgICAg
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9PVkVSOgpAQCAtNTgsNyArNTgsNyBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8Q29t
cG9zaXRlT3BlcmF0aW9uVHlwZT4gewogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBmcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIEZFQ29tcG9zaXRlT3BlcmF0b3IgZnJvbVN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJvdmVy
IikKICAgICAgICAgICAgIHJldHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOwpAQCAtODUs
NyArODUsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgaW4xKCkgY29uc3QgeyByZXR1cm4gbV9p
bjEtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgU3RyaW5nIGluMigpIGNvbnN0IHsgcmV0dXJuIG1f
aW4yLT5jdXJyZW50VmFsdWUoKTsgfQotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgc3ZnT3Bl
cmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3N2Z09wZXJhdG9yLT5jdXJyZW50VmFsdWU8Q29tcG9z
aXRlT3BlcmF0aW9uVHlwZT4oKTsgfQorICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU9wZXJhdG9yLT5jdXJyZW50VmFs
dWU8RkVDb21wb3NpdGVPcGVyYXRvcj4oKTsgfQogICAgIGZsb2F0IGsxKCkgY29uc3QgeyByZXR1
cm4gbV9rMS0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCBrMigpIGNvbnN0IHsgcmV0dXJu
IG1fazItPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxvYXQgazMoKSBjb25zdCB7IHJldHVybiBt
X2szLT5jdXJyZW50VmFsdWUoKTsgfQpAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAKICAgICBT
VkdBbmltYXRlZFN0cmluZyYgaW4xQW5pbWF0ZWQoKSB7IHJldHVybiBtX2luMTsgfQogICAgIFNW
R0FuaW1hdGVkU3RyaW5nJiBpbjJBbmltYXRlZCgpIHsgcmV0dXJuIG1faW4yOyB9Ci0gICAgU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fc3Zn
T3BlcmF0b3I7IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBjb21wb3NpdGVPcGVyYXRv
ckFuaW1hdGVkKCkgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvcjsgfQogICAgIFNWR0FuaW1h
dGVkTnVtYmVyJiBrMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9rMTsgfQogICAgIFNWR0FuaW1hdGVk
TnVtYmVyJiBrMkFuaW1hdGVkKCkgeyByZXR1cm4gbV9rMjsgfQogICAgIFNWR0FuaW1hdGVkTnVt
YmVyJiBrM0FuaW1hdGVkKCkgeyByZXR1cm4gbV9rMzsgfQpAQCAtMTA5LDEyICsxMDksMTIgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVy
RWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRl
ckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjIgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3Jl
YXRlKHRoaXMpIH07Ci0gICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fc3ZnT3BlcmF0
b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRkVDT01QT1NJVEVfT1BF
UkFUT1JfT1ZFUikgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9jb21wb3Np
dGVPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBGRUNPTVBP
U0lURV9PUEVSQVRPUl9PVkVSKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMSB7
IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRO
dW1iZXI+IG1fazIgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVm
PFNWR0FuaW1hdGVkTnVtYmVyPiBtX2szIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlz
KSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVu
dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbAppbmRl
eCA3OGU0MDIwN2Y1YjAyZjY3MGYwNDBiMjkzNzVlYWQ3YzJiNDUyZGUwLi5mYzY3MGM5ZWM1NmM0
MWMxMDkyODU0ODQyN2M1ZjZhOGUxODViMWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb3NpdGVFbGVtZW50LmlkbApAQCAtMzgsNyArMzgsNyBAQAogCiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAgICAgaW4xOwogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMjsKLSAgICBbSW1wbGVtZW50ZWRBcz1zdmdP
cGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gb3BlcmF0
b3I7CisgICAgW0ltcGxlbWVudGVkQXM9Y29tcG9zaXRlT3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJp
YnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOwogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsxOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBT
VkdBbmltYXRlZE51bWJlciAgICAgIGsyOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmlt
YXRlZE51bWJlciAgICAgIGszOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggZjc1MDU4MTVkZWNhYmI0ZWEzNGI0MzViNDdlYTVh
ODBjNmEyNmRmMS4uMDhhOTE0NjA0NTdhZjUxYmI0ZDBjZTk3MThmM2I5MDkxMjA4ZjcwNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3Bw
CkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIklu
dFBvaW50LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxk
ZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2lu
Y2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxp
bmVzLmg+CkBAIC0xOTEsMTIgKzE5MSwxMSBAQCB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYQogICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIm
IGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRF
ZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGludCBvcmRlclhWYWx1ZSA9IG9yZGVyWCgpOwog
ICAgIGludCBvcmRlcllWYWx1ZSA9IG9yZGVyWSgpOwpAQCAtMjA2LDIyICsyMDUsMjIgQEAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICB9CiAgICAgLy8gU3BlYyBzYXlzIG9yZGVyIG11c3Qg
YmUgPiAwLiBCYWlsIGlmIGl0IGlzIG5vdC4KICAgICBpZiAob3JkZXJYVmFsdWUgPCAxIHx8IG9y
ZGVyWVZhbHVlIDwgMSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgYXV0byYga2VybmVsTWF0cml4ID0gdGhpcy0+a2VybmVsTWF0cml4KCk7CiAgICAg
aW50IGtlcm5lbE1hdHJpeFNpemUgPSBrZXJuZWxNYXRyaXguaXRlbXMoKS5zaXplKCk7CiAgICAg
Ly8gVGhlIHNwZWMgc2F5cyB0aGlzIGlzIGEgcmVxdWlyZW1lbnQsIGFuZCBzaG91bGQgYmFpbCBv
dXQgaWYgZmFpbHMKICAgICBpZiAob3JkZXJYVmFsdWUgKiBvcmRlcllWYWx1ZSAhPSBrZXJuZWxN
YXRyaXhTaXplKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIGludCB0YXJnZXRYVmFsdWUgPSB0YXJnZXRYKCk7CiAgICAgaW50IHRhcmdldFlWYWx1
ZSA9IHRhcmdldFkoKTsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJnZXRYQXR0
cikgJiYgKHRhcmdldFhWYWx1ZSA8IDAgfHwgdGFyZ2V0WFZhbHVlID49IG9yZGVyWFZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgLy8gVGhl
IHNwZWMgc2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpczogdGFyZ2V0WCA9IGZsb29yICggb3JkZXJY
IC8gMiApKQogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJnZXRYQXR0cikpCiAg
ICAgICAgIHRhcmdldFhWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9yZGVyWFZhbHVl
IC8gMikpOwogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFlBdHRyKSAmJiAo
dGFyZ2V0WVZhbHVlIDwgMCB8fCB0YXJnZXRZVmFsdWUgPj0gb3JkZXJZVmFsdWUpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAvLyBUaGUgc3BlYyBz
YXlzIHRoZSBkZWZhdWx0IHZhbHVlIGlzOiB0YXJnZXRZID0gZmxvb3IgKCBvcmRlclkgLyAyICkp
CiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFlBdHRyKSkKICAgICAgICAg
dGFyZ2V0WVZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob3JkZXJZVmFsdWUgLyAyKSk7
CkBAIC0yMzQsMTEgKzIzMywxMSBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQgogICAgICAgICBr
ZXJuZWxVbml0TGVuZ3RoWVZhbHVlID0gMTsKICAgICB9CiAgICAgaWYgKGtlcm5lbFVuaXRMZW5n
dGhYVmFsdWUgPD0gMCB8fCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlIDw9IDApCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgZmxvYXQgZGl2aXNvclZh
bHVlID0gZGl2aXNvcigpOwogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmRpdmlzb3JB
dHRyKSAmJiAhZGl2aXNvclZhbHVlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ZGl2aXNvckF0dHIp
KSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2VybmVsTWF0cml4U2l6ZTsgKytpKQog
ICAgICAgICAgICAgZGl2aXNvclZhbHVlICs9IGtlcm5lbE1hdHJpeC5pdGVtcygpW2ldLT52YWx1
ZSgpOwpAQCAtMjQ2LDkgKzI0NSwxOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQgogICAgICAg
ICAgICAgZGl2aXNvclZhbHVlID0gMTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29u
dm9sdmVNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZh
bHVlKSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0
WVZhbHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlLCBr
ZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOwot
ICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZl
Y3Q7CisgICAgcmV0dXJuIHsKKyAgICAgICAgRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKAorICAg
ICAgICAgICAgSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZVmFsdWUpLAorICAgICAgICAgICAg
ZGl2aXNvclZhbHVlLAorICAgICAgICAgICAgYmlhcygpLAorICAgICAgICAgICAgSW50UG9pbnQo
dGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpLAorICAgICAgICAgICAgZWRnZU1vZGUoKSwKKyAg
ICAgICAgICAgIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSwga2VybmVsVW5pdExl
bmd0aFlWYWx1ZSksCisgICAgICAgICAgICBwcmVzZXJ2ZUFscGhhKCksCisgICAgICAgICAgICBr
ZXJuZWxNYXRyaXgpLAorICAgICAgICB7IHsgKmlucHV0MSB9IH0KKyAgICB9OwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudC5oCmluZGV4IDg1YzAwMjY5OGM2Mjc3ZTA0MzcwZDM1OTgyYTk1YjhkOTA0
OWIzMzkuLjg0MjU5MDIwYTg2OTk2ODkwOTBkMjM1YTY5MDJlNGEzMzFjOTdmZmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCkBAIC0xMDMs
NyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAg
ICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0
ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmNwcAppbmRleCAxNTJjOTg1ZmQ4ZTk1YWU5OTU3ZTZlMjFkNmJmMmExMGM0NTRi
ZGQ1Li43MWQ4YzdmMzkwZGJiZjUxOTIzZWYwNDEzOGM5NDViNzY2NWY5OTVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcApAQCAt
MjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdG
aWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgpAQCAtODksMTQgKzg5LDE0IEBAIGJvb2wgU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZl
Y3QsCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwog
ICAgICAgICBBU1NFUlQocmVuZGVyZXIpOwogICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVy
LT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2
Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKLSAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGlu
Zy0+c2V0TGlnaHRpbmdDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRp
bmctPnNldENvbG9yKGNvbG9yKTsKICAgICB9CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpzdXJmYWNlU2NhbGVBdHRyKQogICAgICAgICByZXR1cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXRT
dXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6ZGlmZnVzZUNvbnN0YW50QXR0cikKICAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+
c2V0RGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCgpKTsKIAotICAgIGF1dG8mIGxpZ2h0
U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KGRpZmZ1c2VMaWdodGluZy0+bGlnaHRT
b3VyY2UoKSk7CisgICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25zdF9jYXN0PExpZ2h0U291cmNl
Jj4oZGlmZnVzZUxpZ2h0aW5nLT5zb3VyY2UoKSk7CiAgICAgY29uc3QgU1ZHRkVMaWdodEVsZW1l
bnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRo
aXMpOwogICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwogCkBAIC0xNTEsMjggKzE1MSwyNSBAQCB2
b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hh
bmdlZChjb25zdCBTVkdGRUxpZ2h0RQogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmls
dGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxG
aWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZl
Y3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0
RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgCi0gICAg
YXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxk
ZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKGZp
bHRlcik7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsK
ICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFw
cGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0Nv
bG9yKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGZp
bHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwga2VybmVsVW5p
dExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwot
ICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZl
Y3Q7CisgICAgcmV0dXJuIHsgRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb2xvciwgc3VyZmFj
ZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxV
bml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSksIHsgeyAqaW5wdXQxIH0gfSB9Owog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50LmgKaW5kZXggNjg5OTk2MDlmNGI2YjU2YTc2Yzg4ZWE1Njk1ZjFlMGU5ZTIwNTU4MC4uN2Q5
OTQzMWUxNWVjYjZiM2JmNDBiZTJhZTIyMWY2OGQ1NjA2ZjY4NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJv
cGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdB
bmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQu
Y3BwCmluZGV4IDBjNWU4MjViYzgyNTYwZjM2YTI2OWVhNmQ3MjJkZmQwNTE3M2Q4YzIuLjkyN2Iz
NGYzN2FkNTYyNDFlOTA3NzYyNzI5ODExYTg1YWNiNTFhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCkBAIC0yMiw3ICsyMiw3
IEBACiAjaW5jbHVkZSAiU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgiCiAKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVk
ZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgogCkBAIC0xMTUsMjAgKzExNSwxNSBAQCB2b2lkIFNWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0g
ZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZp
bHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBmaWx0ZXIubmFtZWRF
ZmZlY3QoaW4yKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3QgPSBGRURpc3BsYWNlbWVudE1hcDo6
Y3JlYXRlKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvcigpLCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNj
YWxlKCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAg
IGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlu
cHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICByZXR1cm4geyBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKHhDaGFubmVsU2VsZWN0b3IoKSwg
eUNoYW5uZWxTZWxlY3RvcigpLCBzY2FsZSgpKSwgeyB7ICppbnB1dDEgfSwgeyAqaW5wdXQyIH0g
fSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50LmgKaW5kZXggYWE5MWRmMzhiMzYyOThmMTIxYTE0MTFjNGQwYWU1ZWNkNTg2NjVk
My4uMTIzNzgwOTA4NWFlZDIyNzViNWIwMTBmNDk4Y2ZmNmNiNWJlNmRkNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaApAQCAtOTEsNyAr
OTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9
OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6
Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0
YW50TGlnaHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuY3BwCmluZGV4IGE2ODZiYjhmYTM4ZDlkZGZhMjhlMDJhZWQ5NWU0MWIwOGEzNmYy
ZjcuLjRjMTUzYmVhMThkNzdlY2I2YzBmMjJkN2ExYjFlMDEwNDFiYjk1NWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCkBAIC0zNiw3ICsz
Niw3IEBAIFJlZjxTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ+IFNWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVJlZjxM
aWdodFNvdXJjZT4gU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShTVkdGaWx0
ZXJCdWlsZGVyJikgY29uc3QKK1JlZjxMaWdodFNvdXJjZT4gU1ZHRkVEaXN0YW50TGlnaHRFbGVt
ZW50OjpsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBjb25zdAogewogICAgIHJldHVybiBE
aXN0YW50TGlnaHRTb3VyY2U6OmNyZWF0ZShhemltdXRoKCksIGVsZXZhdGlvbigpKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaAppbmRleCBmYmRm
NzFjMGVjYmQ5Zjk5N2Q2OWVhNjU0YjlmNWJhMDMxN2Q3MWNjLi40MTZmZTYwYmU3YjE2ZDkxODE1
Y2IzOWVmNTIzYTlmNGU0ZWExZWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEaXN0YW50TGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlz
dGFudExpZ2h0RWxlbWVudC5oCkBAIC0zMCw3ICszMCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVy
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShjb25z
dCBTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihT
VkdGRURpc3RhbnRMaWdodEVsZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0RWxlbWVudCkpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKaW5kZXgg
MjJiY2UxZDMzMzE3Yzk1NzFmZTVkNzlmNGIzMjZhODliZmM1YjY4MS4uNzk1NGVjMjcwMWIzYTg2
OGQ4ZDYwZGU5YzVlNDM0MzhjOTViZjQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RURyb3BTaGFkb3dFbGVtZW50LmNwcApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgIlNWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQuaCIKIAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVk
ZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
U1ZHUmVuZGVyU3R5bGUuaCIKQEAgLTk3LDI3ICs5NywyNSBAQCB2b2lkIFNWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9w
U2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXImIGZpbHRlcikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChzdGREZXZpYXRpb25YKCkgPCAwIHx8
IHN0ZERldmlhdGlvblkoKSA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4geyB9OwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gcmVuZGVy
ZXItPnN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVy
LT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29kQ29sb3Io
KSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgpOwogCi0gICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBh
dXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0
byBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwg
c3RkRGV2aWF0aW9uWSgpLCBkeCgpLCBkeSgpLCBjb2xvciwgb3BhY2l0eSk7Ci0gICAgZWZmZWN0
LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICBy
ZXR1cm4geyBGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlv
blkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpLCB7ICppbnB1dDEgfSB9OwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAppbmRleCA5YjYy
ZDI0YjQ1NGJiN2QyNzU4ZTcxMmI2MjFiOGNiZTQyZjc0NTFkLi41Mjc1YjFmY2EwMGViZjU1MWVh
MGRkYWJiNDBiNTVkYmQyMDIxMGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BT
aGFkb3dFbGVtZW50LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBv
dmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5
IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0
ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxl
bWVudC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVkMGUxNjNmZjg3ZDBiNGJjYWJkMjI0NDc1OGZjMi4u
ZTZiOGEyMzE4ZWNmNTQyZGRjNDhhZDBmMjljY2QzNDdmNzcyNmE4MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCkBAIC01MCwyNiArNTAsMjYgQEAgYm9vbCBTVkdG
RUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZm
ZWN0LCBjb25zdCBRdWEKICAgICBGRUZsb29kKiBmbG9vZCA9IHN0YXRpY19jYXN0PEZFRmxvb2Qq
PihlZmZlY3QpOwogCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpmbG9vZF9jb2xvckF0
dHIpCi0gICAgICAgIHJldHVybiBmbG9vZC0+c2V0Rmxvb2RDb2xvcihzdHlsZS5zdmdTdHlsZSgp
LmZsb29kQ29sb3IoKSk7CisgICAgICAgIHJldHVybiBmbG9vZC0+c2V0Q29sb3Ioc3R5bGUuc3Zn
U3R5bGUoKS5mbG9vZENvbG9yKCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Zmxv
b2Rfb3BhY2l0eUF0dHIpCi0gICAgICAgIHJldHVybiBmbG9vZC0+c2V0Rmxvb2RPcGFjaXR5KHN0
eWxlLnN2Z1N0eWxlKCkuZmxvb2RPcGFjaXR5KCkpOworICAgICAgICByZXR1cm4gZmxvb2QtPnNl
dE9wYWNpdHkoc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZE9wYWNpdHkoKSk7CiAKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBm
aWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJikgY29u
c3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAg
ICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKKyAgICAgICAg
cmV0dXJuIHsgfTsKKwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHJlbmRl
cmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5z
dHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29kQ29sb3IoKSk7
CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgpOwogCi0gICAgcmV0
dXJuIEZFRmxvb2Q6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBvcGFjaXR5KTsKKyAgICByZXR1cm4g
eyBGRUZsb29kOjpjcmVhdGUoY29sb3IsIG9wYWNpdHkpLCB7IH0gfTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAppbmRleCBiOTZhNDNhYTMxM2U3NWU0YTMxNjcy
NDhhMWI2ZjVjZjUxZmVlOTExLi40ODA1ZTIzYTFjNzMwYTJjYjFhY2Y3Y2MzN2VkOTNmYThhNWNi
MTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaApAQCAtMzYsNyArMzYs
NyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVn
aXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KIAogICAg
IGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
YnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAppbmRleCA3YTk5ODIyNGM5MjE5NTU1MjQ0
YTg2OWNhNzhhODMwZDU2M2M1OTlkLi45YjZlZTA1MjkyMzk4YzU1MWRiNzY2ODk0NzNhNGViMmQ4
ZDJlMzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcApAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgIlNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVy
QnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KQEAgLTk1LDE4ICs5NSwxNiBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZQog
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZl
Y3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChzdGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERl
dmlhdGlvblkoKSA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZpbHRlciwg
c3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpOwotICAgIGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAg
cmV0dXJuIHsgRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlh
dGlvblkoKSwgZWRnZU1vZGUoKSksIHsgKmlucHV0MSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAppbmRleCBkODllMWE3NDhmYjJj
NTA5ZTIxNGZlOTRhZTQxMDAxY2U0OGVlMGIyLi5lZmRiZjAwOTUwNWIzMGY4MTllZDBhMmI0MjJi
ODNjMmE1ZDUwNTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudC5oCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3Ry
aW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQu
Y3BwCmluZGV4IGUxNDY4OGE1ZWIxNzZmMDJhMTZjMDU1MGYwODExOTVkM2MyN2VjNGYuLjYzODM2
MTIwMWE1YzQ3NzQyMDYwOWQ0YzVhMDcyNWQ0ZDAyODRmNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAtMTc0LDE2ICsxNzQsMTcgQEAgdm9pZCBTVkdGRUlt
YWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UmLCBjb25zdCBOZXR3b3Jr
TG9hZE1ldHJpY3MKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVu
dFJlc291cmNlSW52YWxpZGF0aW9uKCpwYXJlbnRSZW5kZXJlcik7CiB9CiAKLVJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
JikgY29uc3QKIHsKICAgICBpZiAobV9jYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIEZFSW1h
Z2U6OmNyZWF0ZVdpdGhJbWFnZShmaWx0ZXIsIG1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVy
ZXIocmVuZGVyZXIoKSksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSk7CisgICAgICAgIHJldHVybiB7
IEZFSW1hZ2U6OmNyZWF0ZSh7ICptX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRl
cmVyKCkpIH0sIHByZXNlcnZlQXNwZWN0UmF0aW8oKSksIHsgfSB9OwogCiAgICAgYXV0byB0YXJn
ZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwg
dHJlZVNjb3BlKCkpOwogICAgIGlmIChpc0Rlc2NlbmRhbnRPclNoYWRvd0Rlc2NlbmRhbnRPZih0
YXJnZXQuZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0
dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoZmlsdGVyLCB0cmVlU2NvcGUoKSwg
aHJlZigpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgICAgICByZXR1cm4geyB9OworICAg
IAorICAgIHJldHVybiB7IH07CisvLyAgICByZXR1cm4geyBGRUltYWdlOjpjcmVhdGVXaXRoSVJJ
UmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRp
bygpKSwgeyB9IH07CiB9CiAKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNl
QXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+JiB1cmxzKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAppbmRleCBkOTNlMGQwZGI4Yjg4NjY1NDgwZjIxMDE1YTI1
NmJhZGExNTRjNWM3Li5lZTEzOTlhNjA3YzM1MWY1ZWFlOTFhYjU3MDhlOTg2NGRhZGNlMDkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaApAQCAtNTUsNyArNTUsNyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkgb3ZlcnJpZGU7CiAK
LSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVy
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0Piwg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZXF1
ZXN0SW1hZ2VSZXNvdXJjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaApp
bmRleCBjZDBiZmI5ZWRjZmQ3YjRlMWFmMzliNTVlZGJiYmQ3ODRhYWVhODlkLi4zZmZlNDhmNDQw
OTc0ZWU3YTkxZGZkZmVhMTI0NGZhNzQ2ZmQ1MzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVM
aWdodEVsZW1lbnQuaApAQCAtMjcsMTIgKzI3LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKK2NsYXNzIFNWR0ZpbHRlcjsKIAogY2xhc3MgU1ZH
RkVMaWdodEVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRChTVkdGRUxpZ2h0RWxlbWVudCk7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBSZWY8TGln
aHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlciYpIGNv
bnN0ID0gMDsKICAgICBzdGF0aWMgU1ZHRkVMaWdodEVsZW1lbnQqIGZpbmRMaWdodEVsZW1lbnQo
Y29uc3QgU1ZHRWxlbWVudCopOwogCiAgICAgZmxvYXQgYXppbXV0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXppbXV0aC0+Y3VycmVudFZhbHVlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJn
ZUVsZW1lbnQuY3BwCmluZGV4IGE1NzJhZDUzZDlmMWQ2NWRhM2RlZjRkNTExM2Q1MGE0MjUyMTg4
OGEuLmQ0YTI5NjQ2OGMyMDYyZjRmZGRjZTJiNzBhN2JiYjIxYzc4YjViYWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcApAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1
ZGUgIkZFTWVyZ2UuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJTVkdG
RU1lcmdlTm9kZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBA
IC00NCwyNCArNDMsMjIgQEAgUmVmPFNWR0ZFTWVyZ2VFbGVtZW50PiBTVkdGRU1lcmdlRWxlbWVu
dDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEQKICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTVkdGRU1lcmdlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1S
ZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRU1lcmdl
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBlZmZl
Y3QgPSBGRU1lcmdlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBhdXRvJiBtZXJnZUlucHV0cyA9IGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCk7CisgICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtZXJn
ZUlucHV0czsKIAogICAgIGZvciAoYXV0byYgbWVyZ2VOb2RlIDogY2hpbGRyZW5PZlR5cGU8U1ZH
RkVNZXJnZU5vZGVFbGVtZW50PigqdGhpcykpIHsKLSAgICAgICAgYXV0byBtZXJnZUVmZmVjdCA9
IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLmluMSgpKTsKKyAgICAgICAg
YXV0byBtZXJnZUVmZmVjdCA9IGZpbHRlci5uYW1lZEVmZmVjdChtZXJnZU5vZGUuaW4xKCkpOwog
ICAgICAgICBpZiAoIW1lcmdlRWZmZWN0KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgIG1lcmdlSW5wdXRzLmFwcGVuZChXVEZNb3ZlKG1lcmdlRWZmZWN0KSk7CisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQobWVyZ2VFZmZlY3Qu
cmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQogCiAgICAgbWVyZ2VJbnB1dHMuc2hyaW5rVG9GaXQo
KTsKLQogICAgIGlmIChtZXJnZUlucHV0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1
cm4geyBGRU1lcmdlOjpjcmVhdGUobWVyZ2VJbnB1dHMuc2l6ZSgpKSwgV1RGTW92ZShtZXJnZUlu
cHV0cykgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVy
Z2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAppbmRl
eCA3NDUwODY4MTZmNjk3NmM2Njk3ZGM1MTA3NTgwMmQyODNjZjRlM2MyLi5mNGQ1MDg4YTMyMmFm
ZGM5M2U0NTZjMTBjMzVhNmI5NDRiNzQwMGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJn
ZUVsZW1lbnQuaApAQCAtMzUsNyArMzUsNyBAQCBwcml2YXRlOgogICAgIHVzaW5nIFByb3BlcnR5
UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8U1ZHRkVNZXJnZUVsZW1lbnQsIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz47CiAgICAgY29uc3QgU1ZHUHJvcGVy
dHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJv
cGVydHlSZWdpc3RyeTsgfQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVm
UHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0Zp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5
UmVnaXN0cnkgeyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmNwcAppbmRleCBkNmZiOTVjOGUzNzc2ZTZkMjA5M2JlYWNlMzVlMmVkMTc5
NWQzMjFiLi42YTk0YTVkZTE2NGQ0N2VlNjEyZTVmYjllNzcyMTcyODg4MWIxNGY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCkBAIC0yMiw3ICsy
Miw3IEBACiAjaW5jbHVkZSAiU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIgogCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUg
IlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2Vy
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTM5LDcg
KzM5LDcgQEAgaW5saW5lIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmEKICAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUZsYWc7CiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKICAgICAgICAg
UHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6aW5BdHRyLCAmU1ZH
RkVNb3JwaG9sb2d5RWxlbWVudDo6bV9pbjE+KCk7Ci0gICAgICAgIFByb3BlcnR5UmVnaXN0cnk6
OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9y
QXR0ciwgTW9ycGhvbG9neU9wZXJhdG9yLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9tb3Jw
aG9sb2d5T3BlcmF0b3I+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJv
cGVydHk8U1ZHTmFtZXM6OnJhZGl1c0F0dHIsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3Jh
ZGl1c1gsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3JhZGl1c1k+KCk7CiAgICAgfSk7CiB9
CkBAIC01OSw5ICs1OSw5IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0UmFkaXVz
KGZsb2F0IHgsIGZsb2F0IHkpCiB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVl
KQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKLSAgICAgICAg
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8
TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOworICAgICAgICBNb3Jw
aG9sb2d5T3BlcmF0b3IgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xv
Z3lPcGVyYXRvcj46OmZyb21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1
ZSA+IDApCi0gICAgICAgICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8TW9y
cGhvbG9neU9wZXJhdG9yVHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAgICAgICBtX21vcnBo
b2xvZ3lPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1vcnBob2xvZ3lPcGVyYXRvcj4ocHJv
cGVydHlWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg1LDcgKzg1LDcgQEAg
Ym9vbCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiBlZmZlY3QsIGNvbnMKIHsKICAgICBGRU1vcnBob2xvZ3kqIG1vcnBob2xvZ3kg
PSBzdGF0aWNfY2FzdDxGRU1vcnBob2xvZ3kqPihlZmZlY3QpOwogICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAgICAgICByZXR1cm4gbW9ycGhvbG9neS0+c2V0
TW9ycGhvbG9neU9wZXJhdG9yKHN2Z09wZXJhdG9yKCkpOworICAgICAgICByZXR1cm4gbW9ycGhv
bG9neS0+c2V0TW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVyYXRvcigpKTsKICAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKICAgICAgICAgLy8gQm90aCBz
ZXRSYWRpdXMgZnVuY3Rpb25zIHNob3VsZCBiZSBldmFsdWF0ZWQgc2VwYXJhdGVseS4KICAgICAg
ICAgYm9vbCBpc1JhZGl1c1hDaGFuZ2VkID0gbW9ycGhvbG9neS0+c2V0UmFkaXVzWChyYWRpdXNY
KCkpOwpAQCAtMTE0LDIxICsxMTQsMTggQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVy
KSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0
ZXJFZmZlY3Q+Pj4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0
ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RC
eUlkKGluMSgpKTsKICAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOwogICAgIGZsb2F0IHlS
YWRpdXMgPSByYWRpdXNZKCk7CisgICAgaWYgKHhSYWRpdXMgPCAwIHx8IHlSYWRpdXMgPCAwKQor
ICAgICAgICByZXR1cm4geyB9OwogCisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZl
Y3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGlmICh4UmFkaXVzIDwgMCB8fCB5UmFkaXVzIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFTW9ycGhvbG9n
eTo6Y3JlYXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyk7Ci0gICAg
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsK
KyAgICByZXR1cm4geyBGRU1vcnBob2xvZ3k6OmNyZWF0ZShtb3JwaG9sb2d5T3BlcmF0b3IoKSwg
eFJhZGl1cywgeVJhZGl1cyksIHsgeyAqaW5wdXQxIH0gfSB9OwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaApp
bmRleCAxYTkwODhiNzVjZjhkODVhZTM4ZjI5M2UxMTE5OGE2NmY2NmFhNjY5Li5jYmY5NWI5M2Ri
M2JhOGVhNWNjYzE1ZGVmZDM1NWFkNjI0MTQ4OGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKQEAgLTI2LDEyICsyNiwxMiBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9n
eU9wZXJhdG9yVHlwZT4geworc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVy
YXRvcj4gewogICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4g
RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURTsgfQogCi0gICAgc3RhdGljIFN0cmluZyB0b1N0
cmluZyhNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmluZyB0b1N0
cmluZyhNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKQogICAgIHsKLSAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIHN3aXRjaCAobW9ycGhvbG9neU9wZXJhdG9yKSB7
CiAgICAgICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfRVJPREU6CkBAIC00NCw3ICs0NCw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlPiB7CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAg
IH0KIAotICAgIHN0YXRpYyBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIGZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICBzdGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yIGZyb21TdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAiZXJvZGUi
KQogICAgICAgICAgICAgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERTsKQEAgLTYy
LDEyICs2MiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSYWRpdXMoZmxvYXQgcmFkaXVzWCwg
ZmxvYXQgcmFkaXVzWSk7CiAKICAgICBTdHJpbmcgaW4xKCkgY29uc3QgeyByZXR1cm4gbV9pbjEt
PmN1cnJlbnRWYWx1ZSgpOyB9Ci0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBzdmdPcGVyYXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3ItPmN1cnJlbnRWYWx1ZTxNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlPigpOyB9CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVy
YXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yLT5jdXJyZW50VmFsdWU8
TW9ycGhvbG9neU9wZXJhdG9yPigpOyB9CiAgICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmFkaXVzWC0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCByYWRpdXNZKCkgY29u
c3QgeyByZXR1cm4gbV9yYWRpdXNZLT5jdXJyZW50VmFsdWUoKTsgfQogCiAgICAgU1ZHQW5pbWF0
ZWRTdHJpbmcmIGluMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9pbjE7IH0KLSAgICBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uJiBzdmdPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9zdmdPcGVyYXRv
cjsgfQorICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIG1vcnBob2xvZ3lPcGVyYXRvckFuaW1h
dGVkKCkgeyByZXR1cm4gbV9tb3JwaG9sb2d5T3BlcmF0b3I7IH0KICAgICBTVkdBbmltYXRlZE51
bWJlciYgcmFkaXVzWEFuaW1hdGVkKCkgeyByZXR1cm4gbV9yYWRpdXNYOyB9CiAgICAgU1ZHQW5p
bWF0ZWROdW1iZXImIHJhZGl1c1lBbmltYXRlZCgpIHsgcmV0dXJuIG1fcmFkaXVzWTsgfQogCkBA
IC04MSwxMSArODEsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6
OmNyZWF0ZSh0aGlzKSB9OwotICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3N2Z09w
ZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9FUk9ERSkgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9t
b3JwaG9sb2d5T3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywg
RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJl
cj4gbV9yYWRpdXNYIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJl
ZjxTVkdBbmltYXRlZE51bWJlcj4gbV9yYWRpdXNZIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0
ZSh0aGlzKSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmlkbAppbmRleCBhMmMxODFmMmU2MzdjZDM5MDk4ZWJlNjllNjA5OGFiZTNjMzg1Y2QxLi4y
ZDIxZjJhMWQ4ODhkMDJlYzE3OWRmMTBlMmRlNDNmYzY1Mjk3ZDU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsCkBAIC0zMyw3ICszMyw3IEBACiAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU1ZHX01PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFICAg
PSAyOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAgICAgaW4x
OwotICAgIFtJbXBsZW1lbnRlZEFzPXN2Z09wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKKyAgICBbSW1wbGVtZW50ZWRBcz1tb3JwaG9s
b2d5T3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9w
ZXJhdG9yOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIHJh
ZGl1c1g7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAgcmFk
aXVzWTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAppbmRleCAw
MzgyNjhiODliMmYxOWY5YmU1Njg3MzlkMTIzMDM1NDEwMGE1ZWU3Li5kYzY5MmRhYmJhZmM0ZDZi
NmFmM2U0NDJlY2M4NWMxNThjZDAxMjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmNwcApAQCAtMjQsNyArMjQsNyBAQAogCiAjaW5jbHVkZSAiRkVPZmZzZXQuaCIK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgi
CisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC04MSwxNiArODEsMTMgQEAgdm9pZCBTVkdG
RU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBG
aWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZm
ZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFT2Zmc2V0OjpjcmVhdGUo
ZmlsdGVyLCBkeCgpLCBkeSgpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1
dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFT2Zmc2V0OjpjcmVhdGUo
ZHgoKSwgZHkoKSksIHsgeyAqaW5wdXQxIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVPZmZzZXRFbGVtZW50LmgKaW5kZXggNTc0NzNkY2M3MmRiNjdiMTI1ZWEyZWQ0NjVlMzVi
NTczNzA0OWJlZS4uM2VlODhjZWZkZDI1MmU3MjBiY2M0MDZjYTY1MTE3NDFkMDZlZDE2MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaApAQCAtNDcsNyArNDcsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNv
bnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0
cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKaW5kZXggOWZmODQ3MzM4
YTFiNmE1NWZjZGI4MjFhMDlmMGFjYzNjMjA3ZWE4MS4uZGI5MzdjYTE1MGI4NDQxYjk0NWI0YjA1
ZTcyMGFmYmQ3N2FhNTkzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9p
bnRMaWdodEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGln
aHRFbGVtZW50LmNwcApAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGls
aXRpZXMuaCIKICNpbmNsdWRlICJQb2ludExpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSAiU1ZHRmls
dGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KIApAQCAtMzksMTkgKzM4LDE5IEBAIFJlZjxTVkdGRVBvaW50TGlnaHRFbGVtZW50
PiBTVkdGRVBvaW50TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRVBvaW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRv
Y3VtZW50KSk7CiB9CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6
bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK1JlZjxMaWdodFNv
dXJjZT4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVy
JikgY29uc3QKIHsKICAgICBGbG9hdFBvaW50M0QgcG9zaXRpb247Ci0gICAgaWYgKGJ1aWxkZXIu
cHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9V
TkRJTkdCT1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGJ1aWxkZXIudGFy
Z2V0Qm91bmRpbmdCb3goKTsKLSAgICAgICAgCi0gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJl
bmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKLSAgICAgICAgcG9zaXRp
b24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsK
LQotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBv
aW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5o
dG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9zaXRpb24uc2V0Wih6KCkg
KiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJl
bmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOwotICAgIH0gZWxzZQot
ICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKKy8vICAgIGlm
IChmaWx0ZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVf
T0JKRUNUQk9VTkRJTkdCT1gpIHsKKy8vICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0g
ZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7CisvLworLy8gICAgICAgIHBvc2l0aW9uLnNldFgo
cmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKKy8vICAgICAg
ICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVp
Z2h0KCkpOworLy8KKy8vICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRl
cnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIv
U1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb3Np
dGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNv
cm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7
CisvLyAgICB9IGVsc2UKKy8vICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHko
KSwgeigpKTsKICAgICAKICAgICByZXR1cm4gUG9pbnRMaWdodFNvdXJjZTo6Y3JlYXRlKHBvc2l0
aW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oCmlu
ZGV4IDMzYTViZDc0OTIwODI4Yzk5ODY0NWI3MjJmNzJhNzQ1ZTQ4ZGE3OWUuLmNkZWJlNDc2MTg0
NzMxNWIyYjliODY2YzIwMTRjMGQzODI5ZWMxZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFUG9pbnRMaWdodEVsZW1lbnQuaApAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKGNv
bnN0IFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0RWxlbWVudCkpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5jcHAKaW5kZXggOWI3Y2U0MGFiOTcxNmFlNGYzMzVmNTRiMjRjZGE0NTlhODQyOWE1OS4uYzEx
NjQxYjBlMjBiNmI2NTBjOWJkNjdiOWRkNDY4MjhiOWQ2ZGQ1NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcApAQCAtMjYsNyAr
MjYsNyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJC
dWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgpAQCAtOTYsNyArOTYsNyBAQCBib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdAogICAg
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICAgICAg
QVNTRVJUKHJlbmRlcmVyKTsKICAgICAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUo
KS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgp
LmxpZ2h0aW5nQ29sb3IoKSk7Ci0gICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRM
aWdodGluZ0NvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNl
dENvbG9yKGNvbG9yKTsKICAgICB9CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJm
YWNlU2NhbGVBdHRyKQogICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0U3VyZmFj
ZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKQEAgLTEwNSw3ICsxMDUsNyBAQCBib29sIFNWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZl
Y3QqIGVmZmVjdAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVu
dEF0dHIpCiAgICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRTcGVjdWxhckV4cG9u
ZW50KHNwZWN1bGFyRXhwb25lbnQoKSk7CiAKLSAgICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0
X2Nhc3Q8TGlnaHRTb3VyY2UmPihzcGVjdWxhckxpZ2h0aW5nLT5saWdodFNvdXJjZSgpKTsKKyAg
ICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihzcGVjdWxhckxp
Z2h0aW5nLT5zb3VyY2UoKSk7CiAgICAgY29uc3QgU1ZHRkVMaWdodEVsZW1lbnQqIGxpZ2h0RWxl
bWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwogICAgIEFT
U0VSVChsaWdodEVsZW1lbnQpOwogCkBAIC0xNjAsMjggKzE2MCwzMSBAQCB2b2lkIFNWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
U1ZHRkVMaWdodAogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQog
Ci1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QK
K3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVy
KSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7
CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVmUHRy
IGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMp
OwotICAgIGlmICghbGlnaHRFbGVtZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAK
LSAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgqZmlsdGVy
QnVpbGRlcik7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAKLSAgICBDb2xvciBjb2xvciA9
IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5z
dHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKLQotICAgIGF1dG8gZWZmZWN0ID0g
RkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCks
IHNwZWN1bGFyQ29uc3RhbnQoKSwgc3BlY3VsYXJFeHBvbmVudCgpLCBrZXJuZWxVbml0TGVuZ3Ro
WCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSk7Ci0gICAgZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAg
ICBSZWZQdHIgbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1l
bnQodGhpcyk7CisgICAgaWYgKCFsaWdodEVsZW1lbnQpCisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgCisgICAgcmV0dXJuIHsKKyAgICAgICAgRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoCisg
ICAgICAgICAgICByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihy
ZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSksCisgICAgICAgICAg
ICBzdXJmYWNlU2NhbGUoKSwKKyAgICAgICAgICAgIHNwZWN1bGFyQ29uc3RhbnQoKSwKKyAgICAg
ICAgICAgIHNwZWN1bGFyRXhwb25lbnQoKSwKKyAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhY
KCksCisgICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWSgpLAorICAgICAgICAgICAgbGlnaHRF
bGVtZW50LT5saWdodFNvdXJjZShmaWx0ZXIpKSwKKyAgICAgICAgeyB7ICppbnB1dDEgfSB9Cisg
ICAgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmgKaW5kZXggODk3YjhkZTE1NmQxYzc5YTFkM2ZkOGIzMTE4ZTJhYjYzYjQ3
YjE0Ni4uNTJkMDEzMjU3MjE4YTJkMDU5ZDM1ODk1NTRiMmE3MmZhNTNlNWU5NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCkBAIC01
OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAg
ICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVh
dGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdo
dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5j
cHAKaW5kZXggZDZkYTMxMDY0Y2IxYjM3ZThjYzkzODc0ZWE0YWE5Y2YyZGZiZmZlZS4uOTA0Yzhh
YmExNDRkZDRhZTNhODZjMDBhN2Q5NDhkZDE5NGJhNTlhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRl
ICJTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KQEAgLTM5LDI3ICszOCwyNyBAQCBSZWY8U1ZHRkVTcG90TGlnaHRFbGVtZW50PiBTVkdGRVNw
b3RMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YQogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNWR0ZFU3BvdExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkp
OwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3Vy
Y2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK1JlZjxMaWdodFNvdXJjZT4gU1ZH
RkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBjb25zdAog
ewogICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbjsKICAgICBGbG9hdFBvaW50M0QgcG9pbnRzQXQ7
Ci0KLSAgICBpZiAoYnVpbGRlci5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZH
X1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAgICAgICBGbG9hdFJlY3QgcmVmZXJl
bmNlQm94ID0gYnVpbGRlci50YXJnZXRCb3VuZGluZ0JveCgpOwotICAgICAgICAKLSAgICAgICAg
cG9zaXRpb24uc2V0WChyZWZlcmVuY2VCb3gueCgpICsgeCgpICogcmVmZXJlbmNlQm94LndpZHRo
KCkpOwotICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZl
cmVuY2VCb3guaGVpZ2h0KCkpOwotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZH
L2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5v
cmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAg
cG9zaXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1p
bllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxv
YXQpOwotCi0gICAgICAgIHBvaW50c0F0LnNldFgocmVmZXJlbmNlQm94LngoKSArIHBvaW50c0F0
WCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb2ludHNBdC5zZXRZKHJlZmVy
ZW5jZUJveC55KCkgKyBwb2ludHNBdFkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0gICAg
ICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdo
dFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5p
dHNfdmlld3BvcnRfcGVyY2VudGFnZQotICAgICAgICBwb2ludHNBdC5zZXRaKHBvaW50c0F0Wigp
ICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVy
ZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKLSAgICAg
ICAgcG9pbnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRYKCksIHBvaW50c0F0WSgpLCBwb2lu
dHNBdFooKSk7Ci0gICAgfQorLy8KKy8vICAgIGlmIChmaWx0ZXIucHJpbWl0aXZlVW5pdHMoKSA9
PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKy8vICAg
ICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7
CisvLworLy8gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJl
ZmVyZW5jZUJveC53aWR0aCgpKTsKKy8vICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJv
eC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOworLy8gICAgICAgIC8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUg
YW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRf
cGVyY2VudGFnZQorLy8gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFuRGlzdGFu
Y2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNv
cm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vCisvLyAgICAgICAgcG9pbnRzQXQuc2V0WChy
ZWZlcmVuY2VCb3gueCgpICsgcG9pbnRzQXRYKCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7Cisv
LyAgICAgICAgcG9pbnRzQXQuc2V0WShyZWZlcmVuY2VCb3gueSgpICsgcG9pbnRzQXRZKCkgKiBy
ZWZlcmVuY2VCb3guaGVpZ2h0KCkpOworLy8gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQorLy8g
ICAgICAgIHBvaW50c0F0LnNldFoocG9pbnRzQXRaKCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZl
cmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkp
IC8gc3FydE9mVHdvRmxvYXQpOworLy8gICAgfSBlbHNlIHsKKy8vICAgICAgICBwb3NpdGlvbiA9
IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKKy8vICAgICAgICBwb2ludHNBdCA9IEZsb2F0
UG9pbnQzRChwb2ludHNBdFgoKSwgcG9pbnRzQXRZKCksIHBvaW50c0F0WigpKTsKKy8vICAgIH0K
IAogICAgIHJldHVybiBTcG90TGlnaHRTb3VyY2U6OmNyZWF0ZShwb3NpdGlvbiwgcG9pbnRzQXQs
IHNwZWN1bGFyRXhwb25lbnQoKSwgbGltaXRpbmdDb25lQW5nbGUoKSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKaW5kZXggM2Y3NzE3YzEyNjVjNGYzMWY1
MzA4ODY4ZDQ3Yzk3ODc5N2E3MzIxMS4uYmU5OGZiZWQ4NjZjNWJjZTJmOTk3NTczZjc1OWJhNDIz
MzI1Yzc3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuaApA
QCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFU3BvdExpZ2h0RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIFJlZjxMaWdodFNv
dXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyJikgY29uc3Qgb3Zl
cnJpZGU7CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoU1ZHRkVTcG90TGlnaHRFbGVtZW50KSA9
PSBzaXplb2YoU1ZHRkVMaWdodEVsZW1lbnQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGls
ZUVsZW1lbnQuY3BwCmluZGV4IDM5YmRjYzc3MzU5NjY1MDM2ZTFhZTc0NzYxMmVhZDZmOWFjMzcz
NzAuLjdkZjI1MmRhYTY2M2QwYjBhZWMxNWI4MTRhZTIzMGUzNjE3NDFhZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2luY2x1
ZGUgIkZFVGlsZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KQEAgLTcwLDE2ICs3MCwxMyBAQCB2b2lkIFNWR0ZFVGlsZUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0
dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUaWxlRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVj
dD4+PiBTVkdGRVRpbGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsK
LSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwot
CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICgh
aW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGF1dG8gZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVy
biB7IEZFVGlsZTo6Y3JlYXRlKCksIHsgKmlucHV0MSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVUaWxlRWxlbWVudC5oCmluZGV4IDQ1YjMyNzE4NTFkN2ZjMGRjMmQzYmNjODc5YTIy
ZGM0MmEzM2E5MWYuLjcxYTk3NDY4Mzc2MGFkYzAxNmNjNmRlYmVlMzVhMTkxMzUyZWRjN2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaApAQCAtNDIsNyArNDIsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0
IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0
ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmlu
Zz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKaW5kZXggMTE1NjExMTlkODNl
M2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0ZC4uNjI3MDdlY2JhZjliMWQ1ODU3MmZiZjc3OGM0
Y2NlMzAwZGJlMjQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VF
bGVtZW50LmNwcApAQCAtOTIsNyArOTIsNyBAQCBib29sIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6
OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29ucwogewog
ICAgIEZFVHVyYnVsZW5jZSogdHVyYnVsZW5jZSA9IHN0YXRpY19jYXN0PEZFVHVyYnVsZW5jZSo+
KGVmZmVjdCk7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKLSAgICAg
ICAgcmV0dXJuIHR1cmJ1bGVuY2UtPnNldFR5cGUodHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHR1
cmJ1bGVuY2UtPnNldFR1cmJ1bGVuY2VUeXBlKHR5cGUoKSk7CiAgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpCiAgICAgICAgIHJldHVybiB0dXJidWxlbmNlLT5z
ZXRTdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlcygpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmJhc2VGcmVxdWVuY3lBdHRyKQpAQCAtMTE3LDExICsxMTcsMTEgQEAgdm9pZCBTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZp
bHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8
RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYp
IGNvbnN0CiB7CiAgICAgaWYgKGJhc2VGcmVxdWVuY3lYKCkgPCAwIHx8IGJhc2VGcmVxdWVuY3lZ
KCkgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gRkVUdXJidWxlbmNl
OjpjcmVhdGUoZmlsdGVyLCB0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZ
KCksIG51bU9jdGF2ZXMoKSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hUWVBF
X1NUSVRDSCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgRkVUdXJidWxlbmNl
OjpjcmVhdGUodHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1P
Y3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gp
LCB7IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50LmgKaW5kZXggYmY5ZGEyMmFkNDJlNDEwYTEwNDM1ZTBhNDBlMzQyNjc3NjllMTk4YS4uYjkx
NGRmMzhjYmEwMGZkNzhiMzhmNDJjM2IwZmIwMDJlODIyYTU5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCkBAIC0xMTksNyArMTE5LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92
ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0
KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFBy
b3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZH
QW5pbWF0ZWROdW1iZXI+IG1fYmFzZUZyZXF1ZW5jeVggeyBTVkdBbmltYXRlZE51bWJlcjo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKaW5kZXgg
ODEzYmNiZDA4MjBjYWM2NzdhNzk3ZjI3YmNjZThjZTEwOTEyYmM0Ny4uZGY2MDRiYTJhNmNkNzY4
NjJjOTMzMjJkNmM3ZGM4OTNkYjdlOWVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZpbHRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJF
bGVtZW50LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQu
aCIKIAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCi0jaW5jbHVkZSAiU1ZH
RmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRp
bGl0aWVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCmluZGV4IGZmNTIyMzA5NDY2YjA0MGJlZjA4
OWQxNTdiMzg2ZGZmYmIwNWM2MTkuLjc3MWE0MTZlZjBlZjA1NTgyZDcyOTgxYTMwY2M5ZDYyZTY1
MjlmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCkBAIC0yNSw5ICsyNSw3IEBACiAKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkzLDIyICs5MSw2IEBAIHZvaWQgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFu
Z2UmIGNoCiAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRlckVmZmVjdCogZmls
dGVyRWZmZWN0KSBjb25zdAotewotICAgIEFTU0VSVChmaWx0ZXJFZmZlY3QpOwotICAgIGlmICgh
ZmlsdGVyRWZmZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzQXR0cmlidXRlKFNW
R05hbWVzOjp4QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWCh0cnVlKTsKLSAg
ICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp5QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVj
dC0+c2V0SGFzWSh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0
dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1dpZHRoKHRydWUpOwotICAgIGlmICho
YXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3Qt
PnNldEhhc0hlaWdodCh0cnVlKTsKLX0KLQogUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJl
bmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpCiB7CiAgICAgcmV0
dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlPigqdGhp
cywgV1RGTW92ZShzdHlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCmluZGV4IGM5OGIxM2VkOTYyNzZh
ZjllMTRmNjQyODExYTZmZDc0Njc3MmFjYTcuLmVjMjY5ZjAzYzQzNjE3Mjg1YzJjZTA2Nzg1MjE0
YWQ3YWFmMDVmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKQEAgLTMxLDE3ICszMSwxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVmZmVjdDsKLWNs
YXNzIFNWR0ZpbHRlckJ1aWxkZXI7CitjbGFzcyBTVkdGaWx0ZXI7CiAKIGNsYXNzIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1YmxpYyBTVkdFbGVtZW50IHsKICAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cyk7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmlsdGVyRWZmZWN0
KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCA9IDA7Ci0gICAgLy8gUmV0dXJucyB0cnVlLCBp
ZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLgotICAgIHZpcnR1
YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwotCiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5
T3duZXJSZWdpc3RyeTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMsIFNWR0Vs
ZW1lbnQ+OwogCiAgICAgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHgoKSBjb25zdCB7IHJldHVybiBt
X3gtPmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC01Niw2ICs1MCwxMCBAQCBwdWJsaWM6CiAgICAgU1ZH
QW5pbWF0ZWRMZW5ndGgmIGhlaWdodEFuaW1hdGVkKCkgeyByZXR1cm4gbV9oZWlnaHQ7IH0KICAg
ICBTVkdBbmltYXRlZFN0cmluZyYgcmVzdWx0QW5pbWF0ZWQoKSB7IHJldHVybiBtX3Jlc3VsdDsg
fQogCisgICAgdmlydHVhbCBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCA9IDA7CisgICAgLy8g
UmV0dXJucyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQg
b25lLgorICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZm
ZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOworCiBwcm90ZWN0ZWQ6CiAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwCmluZGV4IDM4NWFmMjkwODQ4YTNkMGI4M2YxMmFjOTYxOWU2YmY5NmM5ZjIzOTYu
LjMzYTZlZjg4NDAzY2E5NTc2ODg0ODVmM2I1MTIzNTliY2I5MGQ3YzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC0zLDYg
KzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMywxMzAgKzI0LDcyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
CiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1
ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQdHI8SW1hZ2U+IGltYWdlLCBj
b25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCi0g
ICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1h
Z2UpCi0gICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKK1Jl
ZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGUoUmVmPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogeworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoV1RGTW92ZShpbWFnZSksIHByZXNlcnZlQXNwZWN0UmF0
aW8pKTsKIH0KIAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0
cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwg
VHlwZTo6SW1hZ2UpCi0gICAgLCBtX3RyZWVTY29wZSgmdHJlZVNjb3BlKQotICAgICwgbV9ocmVm
KGhyZWYpCitGRUltYWdlOjpGRUltYWdlKFJlZjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKKyAgICA6IEZpbHRlckVm
ZmVjdChUeXBlOjpGRUltYWdlKQorICAgICwgbV9pbWFnZShXVEZNb3ZlKGltYWdlKSkKICAgICAs
IG1fcHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewogfQogCi1SZWY8
RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQdHI8
SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZl
QXNwZWN0UmF0aW8pCitGbG9hdFJlY3QgRkVJbWFnZTo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAogewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCBpbWFnZSwgcHJlc2VydmVBc3BlY3RSYXRp
bykpOworICAgIHJldHVybiB7IH07CisvLyAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVy
KCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
KTsKKy8vCisvLyAgICBGbG9hdFJlY3Qgc3JjUmVjdCA9IHsgeyB9LCBtX2ltYWdlLT5zaXplKCkg
fTsKKy8vICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwg
c3JjUmVjdCk7CisvLworLy8gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKKy8vICAgICAgICBwYWlu
dFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CisvLyAgICBlbHNlCisvLyAgICAgICAg
cGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7CisvLworLy8gICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QocGFpbnRSZWN0KTsKIH0KIAotUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0
ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiBmaWx0ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBj
b25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJl
c2VydmVBc3BlY3RSYXRpbykKK2Jvb2wgRkVJbWFnZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIHRyZWVTY29wZSwgaHJlZiwg
cHJlc2VydmVBc3BlY3RSYXRpbykpOwotfQotCi12b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVyKCkuYWJz
b2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKLSAg
ICBGbG9hdFJlY3Qgc3JjUmVjdDsKLSAgICBpZiAobV9pbWFnZSkgewotICAgICAgICBzcmNSZWN0
LnNldFNpemUobV9pbWFnZS0+c2l6ZSgpKTsKLSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlv
LnRyYW5zZm9ybVJlY3QocGFpbnRSZWN0LCBzcmNSZWN0KTsKLSAgICB9IGVsc2UgaWYgKFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkpCi0gICAgICAgIHNyY1Jl
Y3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVuZGVyZXItPnJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotCi0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkK
LSAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UK
LSAgICAgICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKy8vICAgIEFTU0VSVChz
b3VyY2VJbWFnZSk7CisvLworLy8gICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1
ZmZlcigpOworLy8gICAgaWYgKCFyZXN1bHRJbWFnZSkKKy8vICAgICAgICByZXR1cm4gZmFsc2U7
CisvLworLy8gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zv
cm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKy8vICAgIEZsb2F0UmVj
dCBzcmNSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKKy8v
ICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0
KTsKKy8vCisvLyAgICBJbnRQb2ludCBwYWludExvY2F0aW9uID0gYWJzb2x1dGVQYWludFJlY3Qo
KS5sb2NhdGlvbigpOworLy8gICAgZGVzdFJlY3QubW92ZSgtcGFpbnRMb2NhdGlvbi54KCksIC1w
YWludExvY2F0aW9uLnkoKSk7CisvLworLy8gICAgcmVzdWx0SW1hZ2UuY29udGV4dCgpLmRyYXdJ
bWFnZSgqbV9pbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgIHJldHVybiB0cnVlOwogfQog
Ci1SZW5kZXJFbGVtZW50KiBGRUltYWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdAorRmls
dGVyUmVzdWx0KiBGRUltYWdlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVz
dWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIGlmICghbV90cmVlU2NvcGUp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJl
bmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhtX2hyZWYsICptX3RyZWVTY29wZSk7Ci0g
ICAgaWYgKCFpczxTVkdFbGVtZW50Pih0YXJnZXQuZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIHJldHVybiB0YXJnZXQuZWxlbWVudC0+cmVuZGVyZXIoKTsKLX0KLQotdm9p
ZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIFJlbmRlckVsZW1lbnQq
IHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCk7Ci0gICAgaWYgKCFtX2ltYWdlICYmICFy
ZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBh
bHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKLSAgICBzZXRSZXN1bHRDb2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLQotICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1
bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmls
dGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpKTsKLQotICAgIEZsb2F0UmVjdCBzcmNSZWN0OwotICAgIGlmIChyZW5kZXJlcikKLSAgICAg
ICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJl
ci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOwotICAg
ICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVj
dCk7Ci0gICAgfQotCi0gICAgSW50UG9pbnQgcGFpbnRMb2NhdGlvbiA9IGFic29sdXRlUGFpbnRS
ZWN0KCkubG9jYXRpb24oKTsKLSAgICBkZXN0UmVjdC5tb3ZlKC1wYWludExvY2F0aW9uLngoKSwg
LXBhaW50TG9jYXRpb24ueSgpKTsKLQotICAgIGF1dG8mIGNvbnRleHQgPSByZXN1bHRJbWFnZS0+
Y29udGV4dCgpOwotCi0gICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgp
OwotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0KLSAgICAg
ICAgUmVmUHRyIGNvbnRleHROb2RlID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXItPmVs
ZW1lbnQoKSk7Ci0gICAgICAgIGlmIChjb250ZXh0Tm9kZS0+aGFzUmVsYXRpdmVMZW5ndGhzKCkp
IHsKLSAgICAgICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChjb250ZXh0Tm9k
ZS5nZXQoKSk7Ci0gICAgICAgICAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplOwotCi0gICAgICAg
ICAgICAvLyBJZiB3ZSdyZSByZWZlcmVuY2luZyBhbiBlbGVtZW50IHdpdGggcGVyY2VudGFnZSB1
bml0cywgZWcuIDxyZWN0IHdpdGg9IjMwJSI+IHRob3NlIHZhbHVlcyB3ZXJlIHJlc29sdmVkIGFn
YWluc3QgdGhlIHZpZXdwb3J0LgotICAgICAgICAgICAgLy8gQnVpbGQgdXAgYSB0cmFuc2Zvcm1h
dGlvbiB0aGF0IG1hcHMgZnJvbSB0aGUgdmlld3BvcnQgc3BhY2UgdG8gdGhlIGZpbHRlciBwcmlt
aXRpdmUgc3VicmVnaW9uLgotICAgICAgICAgICAgaWYgKGxlbmd0aENvbnRleHQuZGV0ZXJtaW5l
Vmlld3BvcnQodmlld3BvcnRTaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNvbmNhdENU
TShtYWtlTWFwQmV0d2VlblJlY3RzKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHZpZXdwb3J0U2l6
ZSksIGRlc3RSZWN0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY29u
dGVudFRyYW5zZm9ybWF0aW9uOwotICAgICAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJT
dWJ0cmVlVG9Db250ZXh0KGNvbnRleHQsICpyZW5kZXJlciwgY29udGVudFRyYW5zZm9ybWF0aW9u
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQu
cmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAg
Y29udGV4dC5kcmF3SW1hZ2UoKm1faW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0KTsKKyAgICByZXR1
cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgfSwgbnVsbHB0cik7CiB9CiAKLVRleHRTdHJlYW0m
IEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2Vu
dGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFSW1hZ2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdAogewotICAgIEZsb2F0U2l6ZSBpbWFnZVNpemU7Ci0gICAgaWYgKG1faW1hZ2UpCi0g
ICAgICAgIGltYWdlU2l6ZSA9IG1faW1hZ2UtPnNpemUoKTsKLSAgICBlbHNlIGlmIChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkpCi0gICAgICAgIGltYWdlU2l6
ZSA9IGVuY2xvc2luZ0ludFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkpLnNpemUoKTsKKyAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZS0+c2l6ZSgp
OwogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlSW1hZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgaW1h
Z2Utc2l6ZT1cIiIgPDwgaW1hZ2VTaXplLndpZHRoKCkgPDwgIngiIDw8IGltYWdlU2l6ZS5oZWln
aHQoKSA8PCAiXCJdXG4iOwogICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBkdW1wIGFsc28gb2Jq
ZWN0IHJldHVybmVkIGJ5IFNWR0ZFSW1hZ2U6OmltYWdlKCkgPwogICAgIHJldHVybiB0czsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAppbmRl
eCBhYzE2MGVkY2U3YzBlMGEwNjdiZGVmYmQ3MDdmMmFiZTU1OTA4MWI2Li5hODE0NGY3NjdjYmQ4
NzRjZWY0NTA2OTVhYzBiYWY1MGQyY2QxYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNywzNiArMjgsMjYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVu
dDsKIGNsYXNzIEltYWdlOwotY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFRyZWVTY29wZTsK
IAogY2xhc3MgRkVJbWFnZSBmaW5hbCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlV2l0aEltYWdlKEZpbHRlciYsIFJlZlB0cjxJ
bWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwotICAgIHN0YXRpYyBS
ZWY8RkVJbWFnZT4gY3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImLCBUcmVlU2NvcGUmLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICBz
dGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZShSZWY8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUmKTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIH5GRUltYWdlKCkgPSBk
ZWZhdWx0OwotICAgIEZFSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBUcmVlU2NvcGUm
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAg
ICBGRUltYWdlKFJlZjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYp
OwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RUltYWdlIjsgfQogCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZUltYWdlOyB9CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUmVuZGVyRWxlbWVudCogcmVmZXJl
bmNlZFJlbmRlcmVyKCkgY29uc3Q7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRw
dXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Up
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBmaW5h
bDsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgZmluYWw7Ci0gICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEltYWdlPiBtX2lt
YWdlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CiAKLSAgICAvLyBt
X3RyZWVTY29wZSB3aWxsIG5ldmVyIGJlIGEgZGFuZ2xpbmcgcmVmZXJlbmNlLiBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjQzCi0gICAgVHJlZVNjb3BlKiBt
X3RyZWVTY29wZSB7IG51bGxwdHIgfTsKLSAgICBTdHJpbmcgbV9ocmVmOworICAgIFJlZjxJbWFn
ZT4gbV9pbWFnZTsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgbV9wcmVzZXJ2ZUFz
cGVjdFJhdGlvOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlci5jcHAKaW5kZXggOWE5NGE0NjAzNTg3OTA4YTM4NGQxNzQyN2IzNzE5MzU5
MmI3YmNlNy4uNjBmODk0OGQwYTY4NDQwNzNjMDM0OGEyY2M4NjA2NThjNWM0ZDJiMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBA
IC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjkgKzIz
LDE2OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogCisj
aW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKyNpbmNs
dWRlICJTb3VyY2VHcmFwaGljLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVy
OjpTVkdGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29u
c3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29s
IGVmZmVjdEJCb3hNb2RlKQotICAgIDogRmlsdGVyKGFic29sdXRlVHJhbnNmb3JtKQotICAgICwg
bV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24oYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9u
KQotICAgICwgbV90YXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCkKLSAgICAsIG1f
ZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKLSAgICAsIG1fZWZmZWN0QkJveE1vZGUoZWZmZWN0
QkJveE1vZGUpCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJF
bGVtZW50JiBmaWx0ZXJFbGVtZW50LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIEZpbHRl
ckVmZmVjdCogcHJldmlvdXNFZmZlY3QpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1h
eENvdW50Q2hpbGROb2RlcyA9IDIwMDsKKyAgICBpZiAoZmlsdGVyRWxlbWVudC5jb3VudENoaWxk
Tm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKG5ldyBTVkdGaWx0ZXIocmVuZGVyaW5nTW9kZSkp
OworICAgIAorICAgIGZpbHRlci0+c2V0dXBCdWlsdGluRWZmZWN0cyhwcmV2aW91c0VmZmVjdCk7
CisgICAgCisgICAgRmlsdGVyRWZmZWN0c0lucHV0cyBlZmZlY3RzSW5wdXRzOworICAgIGlmICgh
ZmlsdGVyLT5idWlsZEVmZmVjdHMoZmlsdGVyRWxlbWVudCwgZWZmZWN0c0lucHV0cykpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRXhwcmVzc2lvbihl
ZmZlY3RzSW5wdXRzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZmls
dGVyOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShIYXNoTWFwPEF0
b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiYmIG5hbWVkRWZmZWN0cywgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRmlsdGVyKFdU
Rk1vdmUobmFtZWRFZmZlY3RzKSwgcmVuZGVyaW5nTW9kZSkpOworfQorCitTVkdGaWx0ZXI6OlNW
R0ZpbHRlcihSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCisgICAgOiBGaWx0ZXIocmVuZGVy
aW5nTW9kZSwgVHlwZTo6U1ZHRmlsdGVyKQoreworfQorCitTVkdGaWx0ZXI6OlNWR0ZpbHRlcihI
YXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiYmIG5hbWVkRWZmZWN0cywgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQorICAgIDogRmlsdGVyKHJlbmRlcmluZ01vZGUsIFR5
cGU6OlNWR0ZpbHRlcikKKyAgICAsIG1fbmFtZWRFZmZlY3RzKFdURk1vdmUobmFtZWRFZmZlY3Rz
KSkKK3sKK30KKwordm9pZCBTVkdGaWx0ZXI6OmFkZE5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJp
bmcmIG5hbWUsIFJlZjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkKK3sKKyAgICBpZiAobmFtZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgbV9sYXN0RWZmZWN0ID0gZWZmZWN0LnB0cigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMobmFtZSkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVjdC5wdHIoKTsKKyAg
ICBtX25hbWVkRWZmZWN0cy5zZXQobmFtZSwgV1RGTW92ZShlZmZlY3QpKTsKK30KKworUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyOjpuYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBu
YW1lKSBjb25zdAoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9s
YXN0RWZmZWN0KQorICAgICAgICAgICAgcmV0dXJuIG1fbGFzdEVmZmVjdDsKKworICAgICAgICBy
ZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpKTsK
KyAgICB9CisKKyAgICBpZiAobV9idWlsdGluRWZmZWN0cy5jb250YWlucyhuYW1lKSkKKyAgICAg
ICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KG5hbWUpOworCisgICAgcmV0dXJuIG1fbmFt
ZWRFZmZlY3RzLmdldChuYW1lKTsKK30KKwordm9pZCBTVkdGaWx0ZXI6OnNldHVwQnVpbHRpbkVm
ZmVjdHMoRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICBpZiAocHJldmlvdXNF
ZmZlY3QpIHsKKyAgICAgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZm
ZWN0TmFtZSgpLCBSZWY8RmlsdGVyRWZmZWN0PiB7ICpwcmV2aW91c0VmZmVjdCB9KTsKKyAgICAg
ICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNl
QWxwaGE6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gc291
cmNlR3JhcGhpYyA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOworICAgIG1fYnVpbHRpbkVmZmVj
dHMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwgc291cmNlR3JhcGhpYyk7CisgICAg
bV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxw
aGE6OmNyZWF0ZSgpKTsKK30KKworYm9vbCBTVkdGaWx0ZXI6OmJ1aWxkRWZmZWN0cyhTVkdGaWx0
ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5w
dXRzKQoreworICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IG5hbWVkRWZmZWN0KFNvdXJjZUdyYXBo
aWM6OmVmZmVjdE5hbWUoKSk7CisgICAgYXV0byBzb3VyY2VBbHBoYSA9IG5hbWVkRWZmZWN0KFNv
dXJjZUFscGhhOjplZmZlY3ROYW1lKCkpOworICAgIGVmZmVjdHNJbnB1dHMuc2V0KHNvdXJjZUFs
cGhhLnJlbGVhc2VOb25OdWxsKCksIEZpbHRlckVmZmVjdFZlY3RvciB7IHNvdXJjZUdyYXBoaWMu
cmVsZWFzZU5vbk51bGwoKSB9KTsKKworICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNo
aWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVy
RWxlbWVudCkpIHsKKyAgICAgICAgYXV0byBbZWZmZWN0LCBpbnB1dHNdID0gZWZmZWN0RWxlbWVu
dC5idWlsZCgqdGhpcyk7CisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGVmZmVjdHNJbnB1dHMuc2V0KHsgKmVmZmVjdCB9LCBXVEZNb3Zl
KGlucHV0cykpOworICAgICAgICBhZGROYW1lZEVmZmVjdChlZmZlY3RFbGVtZW50LnJlc3VsdCgp
LCBlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU1ZHRmlsdGVyOjpidWlsZEV4cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVj
dD4mIGVmZmVjdCwgY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0c0lucHV0cywgRmls
dGVyRWZmZWN0VmVjdG9yJiBzdGFjaykKK3sKKyAgICBpZiAoc3RhY2suY29udGFpbnMoZWZmZWN0
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fZXhwcmVzc2lvbi5pbnNlcnQo
MCwgeyBlZmZlY3QgfSk7CisKKyAgICBzdGFjay5hcHBlbmQoZWZmZWN0KTsKKworICAgIGZvciAo
YXV0byYgaW5wdXRFZmZlY3QgOiBlZmZlY3RzSW5wdXRzLmdldChlZmZlY3QpKSB7CisgICAgICAg
IGlmICghYnVpbGRFeHByZXNzaW9uKGlucHV0RWZmZWN0LCBlZmZlY3RzSW5wdXRzLCBzdGFjaykp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKCFzdGFjay5p
c0VtcHR5KCkpOworICAgIEFTU0VSVChzdGFjay5sYXN0KCkucHRyKCkgPT0gZWZmZWN0LnB0cigp
KTsKKworICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbihjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBl
ZmZlY3RzSW5wdXRzKQogewotICAgIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVRy
YW5zZm9ybS5tYXBSZWN0KGZpbHRlclJlZ2lvbik7CisgICAgaWYgKCFtX2xhc3RFZmZlY3QpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3Igc3RhY2s7
CisgICAgcmV0dXJuIGJ1aWxkRXhwcmVzc2lvbih7ICptX2xhc3RFZmZlY3QgfSwgZWZmZWN0c0lu
cHV0cywgc3RhY2spOwogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclJl
c29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0CitGaWx0ZXJSZXN1bHQqIFNWR0ZpbHRlcjo6
YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QKIHsKLSAgICBpZiAobV9lZmZlY3RCQm94TW9k
ZSkKLSAgICAgICAgc2l6ZSA9IHNpemUgKiBtX3RhcmdldEJvdW5kaW5nQm94LnNpemUoKTsKKyAg
ICBpZiAoIW1fbGFzdEVmZmVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAo
IXN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgc291cmNlSW1hZ2UgPSBzdGFjay50YWtlTGFzdCgp
LT5pbWFnZUJ1ZmZlcigpOworCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMo
KS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGZvciAoYXV0
byYgZWZmZWN0IDogbV9leHByZXNzaW9uKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZWZmZWN0
LT5hcHBseShvdXRwdXQsIHN0YWNrLCBzb3VyY2VJbWFnZSk7CisgICAgICAgIGlmICghcmVzdWx0
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgc3RhY2suYXBwZW5kKHsg
KnJlc3VsdCB9KTsKKyAgICAgICAgb3V0cHV0LnJlc3VsdHMoKS5hZGQoZWZmZWN0LCBSZWY8Rmls
dGVyUmVzdWx0PigqcmVzdWx0KSk7CisgICAgfQogCi0gICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVk
QnlGaWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbi5zaXplKCkg
LyBtX2ZpbHRlclJlZ2lvbi5zaXplKCk7CisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA9PSAxKTsK
KyAgICBhdXRvIHJlc3VsdCA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgcmVzdWx0LT50cmFuc2Zv
cm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgIHJldHVy
biAmcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAotUmVmPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVh
dGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRS
ZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJC
b3hNb2RlKQorVGV4dFN0cmVhbSYgU1ZHRmlsdGVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0s
IGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlclJl
Z2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZXhwcmVz
c2lvbikKKyAgICAgICAgZWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CisgICAgcmV0dXJuIHRzOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCmluZGV4
IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEwZmIxNzAwY2YuLjYwYWYwM2Y4YjVhZmFi
N2RlYzE3YTBhZjI4ZDQ0NTI1ZDgwZTA4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTIwLDQxICsyMSw0OCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNp
bmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
U1ZHRmlsdGVyRWxlbWVudDsKKwogY2xhc3MgU1ZHRmlsdGVyIGZpbmFsIDogcHVibGljIEZpbHRl
ciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFNWR0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wpOworICAgIHN0
YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFJlbmRlcmlu
Z01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBGaWx0ZXJFZmZlY3QqIHByZXZp
b3VzRWZmZWN0ID0gbnVsbHB0cik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxT
VkdGaWx0ZXI+IGNyZWF0ZShIYXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiYm
IG5hbWVkRWZmZWN0cywgUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpOworCisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0
cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVmZmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IGZpbHRlclJl
Z2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0K
LSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNv
bHV0ZUZpbHRlclJlZ2lvbjsgfQorICAgIGNvbnN0IEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPEZp
bHRlckVmZmVjdD4+JiBuYW1lZEVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBtX25hbWVkRWZmZWN0
czsgfQogCi0gICAgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUp
IGNvbnN0IGZpbmFsOworcHJpdmF0ZToKKyAgICBTVkdGaWx0ZXIoUmVuZGVyaW5nTW9kZSk7Cisg
ICAgU1ZHRmlsdGVyKEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVjdD4+JiYgbmFt
ZWRFZmZlY3RzLCBSZW5kZXJpbmdNb2RlKTsKIAotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJl
Y3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsg
fQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFy
Z2V0Qm91bmRpbmdCb3g7IH0KKyAgICB2b2lkIGFkZE5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJp
bmcmIG5hbWUsIFJlZjxGaWx0ZXJFZmZlY3Q+KTsKIAotICAgIGJvb2wgaXNTVkdGaWx0ZXIoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBzZXR1cEJ1aWx0aW5FZmZlY3Rz
KEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpOworICAgIGJvb2wgYnVpbGRFZmZlY3RzKFNW
R0ZpbHRlckVsZW1lbnQmLCBGaWx0ZXJFZmZlY3RzSW5wdXRzJik7CisgICAgYm9vbCBidWlsZEV4
cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVjdD4mLCBjb25zdCBGaWx0ZXJFZmZlY3RzSW5w
dXRzJiwgRmlsdGVyRWZmZWN0VmVjdG9yJiBzdGFjayk7CisgICAgYm9vbCBidWlsZEV4cHJlc3Np
b24oY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYpOwogCi1wcml2YXRlOgotICAgIFNWR0ZpbHRl
cihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJl
Y3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRC
b3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJv
eE1vZGUpOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBmaW5hbDsK
KworICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBmaW5hbDsKIAotICAgIEZsb2F0UmVjdCBtX2Fic29s
dXRlU291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0Jv
eDsKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsKLSAgICBGbG9hdFJlY3Qg
bV9maWx0ZXJSZWdpb247Ci0gICAgYm9vbCBtX2VmZmVjdEJCb3hNb2RlOworICAgIEhhc2hNYXA8
QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7CisgICAgSGFz
aE1hcDxBdG9tU3RyaW5nLCBSZWY8RmlsdGVyRWZmZWN0Pj4gbV9uYW1lZEVmZmVjdHM7CisgICAg
VmVjdG9yPFJlZjxjb25zdCBGaWx0ZXJFZmZlY3Q+PiBtX2V4cHJlc3Npb247CisgICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gbV9sYXN0RWZmZWN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikKLSAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0
dXJuIGZpbHRlci5pc1NWR0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIudHlwZSgpID09IFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBm
dW5jdGlvbi50eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0ZpbHRl
cjsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZmM2E4MDUwNDI5NTU1ODEwMzRkOThhNGZkYWM0ZWFm
MzA4N2I5NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgotCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0j
aW5jbHVkZSAiU291cmNlQWxwaGEuaCIKLSNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotU1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8Rmls
dGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQotewotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNv
dXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwgc291cmNlR3JhcGhpYyk7Ci0gICAgbV9idWlsdGlu
RWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0
ZSgqc291cmNlR3JhcGhpYykpOwotICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7Ci19Ci0KLXZvaWQg
U1ZHRmlsdGVyQnVpbGRlcjo6YWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBlZmZlY3QpCi17Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSkgewotICAgICAgICBtX2xh
c3RFZmZlY3QgPSBlZmZlY3Q7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9i
dWlsdGluRWZmZWN0cy5jb250YWlucyhpZCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGFz
dEVmZmVjdCA9IGVmZmVjdDsKLSAgICBtX25hbWVkRWZmZWN0cy5zZXQoaWQsIG1fbGFzdEVmZmVj
dCk7Ci19Ci0KLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6OmdldEVmZmVj
dEJ5SWQoY29uc3QgQXRvbVN0cmluZyYgaWQpIGNvbnN0Ci17Ci0gICAgaWYgKGlkLmlzRW1wdHko
KSkgewotICAgICAgICBpZiAobV9sYXN0RWZmZWN0KQotICAgICAgICAgICAgcmV0dXJuIG1fbGFz
dEVmZmVjdDsKLQotICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9idWlsdGluRWZmZWN0cy5j
b250YWlucyhpZCkpCi0gICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChpZCk7Ci0K
LSAgICByZXR1cm4gbV9uYW1lZEVmZmVjdHMuZ2V0KGlkKTsKLX0KLQotdm9pZCBTVkdGaWx0ZXJC
dWlsZGVyOjphcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVj
dD4mJiBlZmZlY3QsIFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIC8vIFRoZSBlZmZlY3Qg
bXVzdCBiZSBhIG5ld2x5IGNyZWF0ZWQgZmlsdGVyIGVmZmVjdC4KLSAgICBBU1NFUlQoIW1fZWZm
ZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCAh
bV9lZmZlY3RSZW5kZXJlci5jb250YWlucyhvYmplY3QpKTsKLSAgICBtX2VmZmVjdFJlZmVyZW5j
ZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZmZWN0U2V0KCkpOwotCi0gICAgdW5zaWduZWQgbnVtYmVy
T2ZJbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpLnNpemUoKTsKLQotICAgIC8v
IEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhZGQgdGhlIHNhbWUgdmFsdWUgdG8gYSBzZXQgdHdpY2Uu
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kp
Ci0gICAgICAgIGVmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LT5pbnB1dEVmZmVjdChpKSkuYWRkKGVm
ZmVjdC5nZXQoKSk7Ci0KLSAgICAvLyBJZiBvYmplY3QgaXMgbnVsbCwgdGhhdCBtZWFucyB0aGUg
ZWxlbWVudCBpc24ndCBhdHRhY2hlZCBmb3Igc29tZQotICAgIC8vIHJlYXNvbiwgd2hpY2ggaW4g
dHVybiBtZWFuIHRoYXQgY2VydGFpbiB0eXBlcyBvZiBpbnZhbGlkYXRpb24gd2lsbCBub3QKLSAg
ICAvLyB3b3JrICh0aGUgTGF5b3V0T2JqZWN0IC0+IEZpbHRlckVmZmVjdCBtYXBwaW5nIHdpbGwg
bm90IGJlIGRlZmluZWQpLgotICAgIGlmIChvYmplY3QpCi0gICAgICAgIG1fZWZmZWN0UmVuZGVy
ZXIuYWRkKG9iamVjdCwgZWZmZWN0LmdldCgpKTsKLX0KLQotdm9pZCBTVkdGaWx0ZXJCdWlsZGVy
OjpjbGVhckVmZmVjdHMoKQotewotICAgIG1fbGFzdEVmZmVjdCA9IG51bGxwdHI7Ci0gICAgbV9u
YW1lZEVmZmVjdHMuY2xlYXIoKTsKLSAgICBtX2VmZmVjdFJlZmVyZW5jZXMuY2xlYXIoKTsKLSAg
ICBtX2VmZmVjdFJlbmRlcmVyLmNsZWFyKCk7Ci0gICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKLX0K
LQotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZm
ZWN0KiBlZmZlY3QpCi17Ci0gICAgaWYgKCFlZmZlY3QtPmhhc1Jlc3VsdCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7Ci0KLSAgICBmb3IgKGF1dG8mIHJl
ZmVyZW5jZSA6IGVmZmVjdFJlZmVyZW5jZXMoZWZmZWN0KSkKLSAgICAgICAgY2xlYXJSZXN1bHRz
UmVjdXJzaXZlKHJlZmVyZW5jZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc3YWUwOGJhYzY1YzNjMmNmYzg5
NzRmYTMzZTc2NDYwY2U5N2ZhNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5
cGVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyT2Jq
ZWN0OwotY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKLQotY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNo
U2V0PEZpbHRlckVmZmVjdCo+IEZpbHRlckVmZmVjdFNldDsKLQotICAgIFNWR0ZpbHRlckJ1aWxk
ZXIoUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7Ci0KLSAgICB2b2lkIHNldFRh
cmdldEJvdW5kaW5nQm94KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94
ID0gcjsgfQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KLSAgICAKLSAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRU
eXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wcmltaXRpdmVVbml0czsgfQot
ICAgIHZvaWQgc2V0UHJpbWl0aXZlVW5pdHMoU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSB1bml0
cykgeyBtX3ByaW1pdGl2ZVVuaXRzID0gdW5pdHM7IH0KLQotICAgIHZvaWQgYWRkKGNvbnN0IEF0
b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pik7Ci0KLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBnZXRFZmZlY3RCeUlkKGNvbnN0IEF0b21TdHJpbmcmKSBjb25zdDsKLSAgICBGaWx0
ZXJFZmZlY3QqIGxhc3RFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2xhc3RFZmZlY3QuZ2V0KCk7
IH0KLQotICAgIHZvaWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+JiYsIFJlbmRlck9iamVjdCopOwotCi0gICAgaW5saW5lIEZpbHRlckVmZmVjdFNl
dCYgZWZmZWN0UmVmZXJlbmNlcyhGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKLSAgICB7Ci0gICAgICAg
IC8vIE9ubHkgYWxsb3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KLSAg
ICAgICAgQVNTRVJUKG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAg
ICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwotICAgIH0K
LQotICAgIC8vIFJlcXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBk
dXJpbmcgYW4gc3ZnQXR0cmlidXRlQ2hhbmdlZC4KLSAgICBpbmxpbmUgRmlsdGVyRWZmZWN0KiBl
ZmZlY3RCeVJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0KSB7IHJldHVybiBtX2VmZmVjdFJl
bmRlcmVyLmdldChvYmplY3QpOyB9Ci0KLSAgICB2b2lkIGNsZWFyRWZmZWN0cygpOwotICAgIHZv
aWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCopOwotCi1wcml2YXRlOgotICAg
IGlubGluZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0
byYgZWZmZWN0IDogbV9idWlsdGluRWZmZWN0cy52YWx1ZXMoKSkKLSAgICAgICAgICAgIG1fZWZm
ZWN0UmVmZXJlbmNlcy5hZGQoZWZmZWN0LCBGaWx0ZXJFZmZlY3RTZXQoKSk7Ci0gICAgfQotCi0g
ICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9idWlsdGluRWZm
ZWN0czsKLSAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBtX25h
bWVkRWZmZWN0czsKLSAgICAvLyBUaGUgdmFsdWUgaXMgYSBsaXN0LCB3aGljaCBjb250YWlucyB0
aG9zZSBmaWx0ZXIgZWZmZWN0cywKLSAgICAvLyB3aGljaCBkZXBlbmRzIG9uIHRoZSBrZXkgZmls
dGVyIGVmZmVjdC4KLSAgICBIYXNoTWFwPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZl
Y3RTZXQ+IG1fZWZmZWN0UmVmZXJlbmNlczsKLSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEZp
bHRlckVmZmVjdCo+IG1fZWZmZWN0UmVuZGVyZXI7Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBtX2xhc3RFZmZlY3Q7Ci0gICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7Ci0gICAg
U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3ByaW1pdGl2ZVVuaXRzIHsgU1ZHVW5pdFR5cGVz
OjpTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFIH07Ci19OwotICAgIAotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU3ZWIzNjkxYzdkMzE3MzUyZTc5
ZDgyNjUxOTc4NzJkMmFmNTNkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmgKQEAgLTAsMCArMSw2NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU1ZHRmlsdGVyR2VvbWV0cnkgOiBwdWJsaWMgRmlsdGVyR2VvbWV0cnkgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFNWR0ZpbHRlckdlb21ldHJ5
KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFNp
emUmIHJlc29sdXRpb24pCisgICAgICAgIDogRmlsdGVyR2VvbWV0cnkoZmlsdGVyUmVnaW9uLCBz
b3VyY2VJbWFnZVJlY3QpCisgICAgICAgICwgbV9hYnNvbHV0ZVRyYW5zZm9ybShhYnNvbHV0ZVRy
YW5zZm9ybSkKKyAgICAgICAgLCBtX3Jlc29sdXRpb24ocmVzb2x1dGlvbikKKyAgICB7CisgICAg
fQorCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCB0cmFuc2Zvcm1Ub0Fic29sdXRlUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIHJl
Y3RJblVzZXJTcGFjZSA9IG1fYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsKKyAgICAg
ICAgcmVjdEluVXNlclNwYWNlLnNjYWxlKG1fcmVzb2x1dGlvbik7CisgICAgICAgIHJldHVybiBy
ZWN0SW5Vc2VyU3BhY2U7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lv
bihjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiBGaWx0ZXJHZW9tZXRyeTo6cHJpbWl0aXZlU3VicmVnaW9uKGlucHV0
cyk7CisgICAgICAgIAorLy8gICAgICAgIHJldHVybiBGbG9hdFJlY3QgeworLy8gICAgICAgICAg
ICBwcmltaXRpdmVCb3VuZHJpZXMueC52YWx1ZV9vcihzdWJyZWdpb24ueCgpKSwKKy8vICAgICAg
ICAgICAgcHJpbWl0aXZlQm91bmRyaWVzLnkudmFsdWVfb3Ioc3VicmVnaW9uLnkoKSksCisvLyAg
ICAgICAgICAgIHByaW1pdGl2ZUJvdW5kcmllcy53aWR0aC52YWx1ZV9vcihzdWJyZWdpb24ud2lk
dGgoKSksCisvLyAgICAgICAgICAgIHByaW1pdGl2ZUJvdW5kcmllcy5oZWlnaHQudmFsdWVfb3Io
c3VicmVnaW9uLmhlaWdodCgpKQorLy8gICAgICAgIH07CisgICAgfQorICAgIAorICAgIEFmZmlu
ZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOworICAgIEZsb2F0U2l6ZSBtX3Jlc29sdXRp
b247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1t
YXIuY3BwCmluZGV4IDA4NzVhNWVjZmZhOWM2N2U2MGMxYWY2NmM5MGM3MDk1ZmU3YmQxMDQuLjhm
YjBmNDAyNmNiZTM5OTA0MDMyMWYzZTJhODI5YzY4NTJkNDhiODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9Y
UGF0aEdyYW1tYXIuY3BwCkBAIC0xOTg2LDcgKzE5ODYsNyBAQCB5eXJlZHVjZToKICNsaW5lIDQx
OSAiV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkiCiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4+IHByZWRpY2F0ZUxpc3Qo
KHl5dnNwWygyKSAtICgyKV0uZXhwcmVzc2lvblZlY3RvcikpOwotICAgICAgICAoeXl2YWwuZXhw
cmVzc2lvbikgPSBuZXcgRmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigoeXl2c3Bb
KDEpIC0gKDIpXS5leHByZXNzaW9uKSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKKyAgICAg
ICAgKHl5dmFsLmV4cHJlc3Npb24pID0gbmV3IFhQYXRoOjpGaWx0ZXIoc3RkOjp1bmlxdWVfcHRy
PEV4cHJlc3Npb24+KCh5eXZzcFsoMSkgLSAoMildLmV4cHJlc3Npb24pKSwgV1RGTW92ZSgqcHJl
ZGljYXRlTGlzdCkpOwogICAgIDt9CiAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueSBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1t
YXIueQppbmRleCBiNzUxYTYxYmEzZjQyMjI0MGU3YzBiZTBlNGY1ZDYxM2UyZjdhNTViLi4zNTMw
OTgwYWIyYTk0ZTc2NmJkY2NiOTIwYmQ3YTllNGNkYTJjNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
R3JhbW1hci55CkBAIC00MTgsNyArNDE4LDcgQEAgRmlsdGVyRXhwcjoKICAgICBQcmltYXJ5RXhw
ciBQcmVkaWNhdGVMaXN0CiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4+IHByZWRpY2F0ZUxpc3QoJDIpOwotICAgICAgICAk
JCA9IG5ldyBGaWx0ZXIoc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+KCQxKSwgV1RGTW92ZSgq
cHJlZGljYXRlTGlzdCkpOworICAgICAgICAkJCA9IG5ldyBYUGF0aDo6RmlsdGVyKHN0ZDo6dW5p
cXVlX3B0cjxFeHByZXNzaW9uPigkMSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKICAgICB9
CiAgICAgOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggYWE5NDU2NDE0OWQwOGU0ODk2
MzQ3ZDk0ZjAzOTQ2MTU0NzI5YmY3My4uMTFlZmFjOTFkNDRjNDZlYzg1M2M3OGM2OGVjNTQwY2Fk
YTVlY2MyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMjksNiArMjksOCBAQAogI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVhZGVySGFuZGxl
LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJGaWx0
ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXIu
aCIKQEAgLTQ3OCw2ICs0ODAsMzUgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRT
aGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmcKICAgICBjb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZSkpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgaWRlbnRpZmllciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UmJiBmaWx0ZXJSZWZl
cmVuY2UsIElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UmJiBnZW9tZXRyeVJlZmVyZW5jZSwK
KyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgYXV0byBmaWx0ZXIgPSBmaWx0ZXJSZWZlcmVuY2UudGFrZUZpbHRlcigpOworICAgIGF1
dG8gZ2VvbWV0cnkgPSBnZW9tZXRyeVJlZmVyZW5jZS50YWtlR2VvbWV0cnkoKTsKKyAgICAKKyAg
ICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgWyZdKCkgeworICAgICAgICBh
dXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVy
KGlkZW50aWZpZXIpOworICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBhdXRvIGltYWdlID0gaW1hZ2VCdWZmZXItPmZpbHRlcmVkSW1hZ2UoZmls
dGVyLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgICAgIGlmICghaW1hZ2UpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2UtPnNpemUoKTsKKyAgICAg
ICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXpl
KGltYWdlU2l6ZSksIHsgaW1hZ2VCdWZmZXItPmNvbG9yU3BhY2UoKSB9KTsKKyAgICAgICAgaWYg
KCFiaXRtYXApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gY29udGV4dCA9IGJp
dG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKCppbWFnZSwgRmxv
YXRQb2ludCgpKTsKKyAgICAgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICB9
KCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUpKTsKK30KKwogdm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBuYXRpdmVJ
bWFnZVJlc291cmNlSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IDdkODBiNzI1ODYzOTRlNTVlY2NjYzliZjczZjk1
ZWZiMGNjOTQwNTAuLjE5MTYyNzI0MDc3Y2EyNjc1ZTkwMTQ0ZGNkZjZlMzU0NmY0ZjczNzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtNTksNiArNTksMTEgQEAgZW51bSBjbGFzcyBSZW5kZXJp
bmdNb2RlIDogYm9vbDsKIAogfQogCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEZpbHRlclJlZmVy
ZW5jZTsKK2NsYXNzIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlOworfQorCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgRGlzcGxheUxpc3RSZWFkZXJIYW5kbGU7CkBAIC0xNDIsNiArMTQ3LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJl
c2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJ
bWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CiAgICAgdm9pZCBnZXRTaGFyZWFi
bGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4mJik7CisgICAgdm9pZCBnZXRGaWx0ZXJlZEltYWdl
Rm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBJUEM6
OkZpbHRlclJlZmVyZW5jZSYmLCBJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlJiYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYpOwogICAgIHZv
aWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVm
PFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggMWVmNTZkY2M5NzYyNzRlMzU2YWIy
MmI0ZWE0ZTcxYmNmYWMwYjBkZi4uMjRiZTM2ZjYxNmJhN2YzZTgyMTgxMWI2MjQzYTg1MmMxMjZm
ODZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KQEAgLTMyLDYg
KzMyLDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CiAgICAgR2V0RGF0
YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVybFN0cmluZykgU3luY2hyb25vdXMK
ICAgICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5j
aHJvbm91cwogICAgIEdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgZW51bTp1aW50OF90IFdlYkNv
cmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIC0+IChXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKKyAgICBHZXRGaWx0ZXJl
ZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGltYWdlQnVmZmVyLCBJUEM6OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIsIElQQzo6RmlsdGVyR2Vv
bWV0cnlSZWZlcmVuY2UgZ2VvbWV0cnkpIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKICAgICBDYWNoZU5hdGl2ZUltYWdlKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIENhY2hlRm9udChJUEM6
OkZvbnRSZWZlcmVuY2UgZm9udCkKICAgICBEZWxldGVBbGxGb250cygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hZjliZWFkZTFiYTA3OTBjY2RkNjlmY2JmMDM4YjhjYzQ3NzdhMmI0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVu
Y2UuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RmlsdGVyR2VvbWV0cnkuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIEZpbHRlckdlb21l
dHJ5UmVmZXJlbmNlIHsKK3B1YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZShzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpCisgICAgICAg
IDogbV9nZW9tZXRyeShXVEZNb3ZlKGdlb21ldHJ5KSkKKyAgICB7CisgICAgfQorCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiB0YWtlR2VvbWV0cnkoKSB7IHJl
dHVybiBXVEZNb3ZlKG1fZ2VvbWV0cnkpOyB9CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCisgICAgewor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+IG1fZ2VvbWV0cnk7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJl
ZmVyZW5jZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjAyZjMxNzMwMDMxN2QzMDE3NzA1ODM2YWJlYTNmMzM2NDc5ZWQ3ODkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZl
cmVuY2UuY3BwCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZpbHRlclJlZmVyZW5jZS5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRD
b2Rlci5oIgorI2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9DU1NGaWx0ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFT2Zmc2V0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TVkdGaWx0ZXIuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK0Zp
bHRlclJlZmVyZW5jZTo6RmlsdGVyUmVmZXJlbmNlKFJlZjxXZWJDb3JlOjpGaWx0ZXI+JiYgZmls
dGVyKQorICAgIDogbV9maWx0ZXIoV1RGTW92ZShmaWx0ZXIpKQoreworfQorCitzdGF0aWMgdm9p
ZCBlbmNvZGVGaWx0ZXJFZmZlY3QoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3Qs
IEVuY29kZXImIGVuY29kZXIpCit7CisgICAgQVNTRVJUKGVmZmVjdC50eXBlKCkgPj0gV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1pbmltdW0gJiYgZWZmZWN0LnR5cGUoKSA8PSBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTWF4aW11bSk7CisKKyAgICBlbmNvZGVyIDw8IGVm
ZmVjdC50eXBlKCk7CisKKyAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUJsZW5kOgorICAgIGNhc2UgV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXg6CisgICAgY2FzZSBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcjoKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvc2l0ZToKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4OgorICAgIGNhc2UgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nOgorICAgIGNhc2UgV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlzcGxhY2VtZW50TWFwOgorICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRHJvcFNoYWRvdzoKKyAgICBjYXNlIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kOgorICAgIGNhc2UgV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFR2F1c3NpYW5CbHVyOgorICAgIGNhc2UgV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2U6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVNZXJnZToKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRU1vcnBob2xvZ3k6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZzZXQ6CisgICAgICAgIGRvd25jYXN0PFdlYkNv
cmU6OkZFT2Zmc2V0PihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRp
bmc6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlOgorICAg
IGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVHVyYnVsZW5jZToKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3Vy
Y2VBbHBoYToKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VH
cmFwaGljOgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgZW5jb2RlU1ZHRmlsdGVyKGNvbnN0IFdlYkNvcmU6OlNWR0Zp
bHRlciYgZmlsdGVyLCBFbmNvZGVyJiBlbmNvZGVyKQoreworICAgIGVuY29kZXIgPDwgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0ZpbHRlcjsKKworLy8gICAgYXV0byYgbmFtZWRF
ZmZlY3RzID0gZmlsdGVyLm5hbWVkRWZmZWN0cygpOworLy8gICAgZW5jb2RlciA8PCBuYW1lZEVm
ZmVjdHMuc2l6ZSgpOworLy8KKy8vICAgIGZvciAoYXV0byBpdCA9IG5hbWVkRWZmZWN0cy5iZWdp
bigpOyBpdCAhPSBuYW1lZEVmZmVjdHMuZW5kKCk7ICsraXQpIHsKKy8vICAgICAgICBlbmNvZGVy
IDw8IGl0LT5rZXk7CisvLyAgICAgICAgZW5jb2RlRmlsdGVyRWZmZWN0KGl0LT52YWx1ZSwgZW5j
b2Rlcik7CisvLyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZUNTU0ZpbHRlcihjb25zdCBX
ZWJDb3JlOjpDU1NGaWx0ZXImIGZpbHRlciwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBlbmNv
ZGVyIDw8IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXI7CisgICAgZW5j
b2RlciA8PCBmaWx0ZXIuZnVuY3Rpb25zKCkuc2l6ZSgpOworICAgIAorICAgIGZvciAoYXV0byYg
ZnVuY3Rpb24gOiBmaWx0ZXIuZnVuY3Rpb25zKCkpIHsKKyAgICAgICAgaWYgKGlzPFdlYkNvcmU6
OlNWR0ZpbHRlcj4oZnVuY3Rpb24pKQorICAgICAgICAgICAgZW5jb2RlU1ZHRmlsdGVyKGRvd25j
YXN0PFdlYkNvcmU6OlNWR0ZpbHRlcj4oZnVuY3Rpb24uZ2V0KCkpLCBlbmNvZGVyKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW5jb2RlRmlsdGVyRWZmZWN0KGRvd25jYXN0PFdlYkNvcmU6
OkZpbHRlckVmZmVjdD4oZnVuY3Rpb24uZ2V0KCkpLCBlbmNvZGVyKTsKKyAgICB9Cit9CisKK3N0
YXRpYyBSZWZQdHI8V2ViQ29yZTo6RmlsdGVyRWZmZWN0PiBkZWNvZGVGaWx0ZXJFZmZlY3QoRGVj
b2RlciYgZGVjb2RlciwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKK3sKKyAg
ICBpZiAoISh0eXBlID49IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1pbmltdW0g
JiYgdHlwZSA8PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNYXhpbXVtKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZDoKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4OgorICAgIGNhc2UgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb3NpdGU6CisgICAgY2FzZSBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeDoKKyAgICBjYXNlIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZzoKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcDoKKyAgICBj
YXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3c6CisgICAgY2Fz
ZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVGbG9vZDoKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUdhdXNzaWFuQmx1cjoKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlOgorICAgIGNhc2UgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFTWVyZ2U6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVNb3JwaG9sb2d5OgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0OgorICAgICAgICBpZiAoYXV0byBl
ZmZlY3QgPSBXZWJDb3JlOjpGRU9mZnNldDo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHsgKCplZmZlY3QpLnB0cigpIH07CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nOgorICAgIGNh
c2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVGlsZToKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVR1cmJ1bGVuY2U6CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGE6Cisg
ICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlR3JhcGhpYzoKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpTVkdGaWx0ZXI+IGRl
Y29kZVNWR0ZpbHRlcihEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8c2l6
ZV90PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUgfHwgISpzaXpl
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworLy8gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBS
ZWY8V2ViQ29yZTo6RmlsdGVyRWZmZWN0Pj4gbmFtZWRFZmZlY3RzOworLy8KKy8vICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisvLyAgICAgICAgc3RkOjpvcHRpb25hbDxB
dG9tU3RyaW5nPiBuYW1lOworLy8gICAgICAgIGRlY29kZXIgPj4gbmFtZTsKKy8vICAgICAgICBp
ZiAoIW5hbWUpCisvLyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworLy8KKy8vICAgICAgICBz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlPiB0eXBlOworLy8gICAg
ICAgIGRlY29kZXIgPj4gdHlwZTsKKy8vICAgICAgICBpZiAoIXR5cGUpCisvLyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworLy8KKy8vICAgICAgICBhdXRvIGVmZmVjdCA9IGRlY29kZUZpbHRl
ckVmZmVjdChkZWNvZGVyLCAqdHlwZSk7CisvLyAgICAgICAgaWYgKCFlZmZlY3QpCisvLyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworLy8KKy8vICAgICAgICBuYW1lZEVmZmVjdHMuc2V0KCpu
YW1lLCBlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisvLyAgICB9CisvLworLy8gICAgcmV0dXJu
IFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKFdURk1vdmUobmFtZWRFZmZlY3RzKSwgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK3N0YXRpYyBSZWZQdHI8V2ViQ29yZTo6Q1NTRmlsdGVyPiBkZWNvZGVDU1NGaWx0ZXIoRGVj
b2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gc2l6ZTsKKyAgICBk
ZWNvZGVyID4+IHNpemU7CisgICAgaWYgKCFzaXplIHx8ICEqc2l6ZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBWZWN0b3I8UmVmPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uPj4gZnVu
Y3Rpb25zOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Cisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU+IHR5cGU7
CisgICAgICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKCp0eXBlID09IFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGZpbHRl
ciA9IGRlY29kZVNWR0ZpbHRlcihkZWNvZGVyKSkgeworICAgICAgICAgICAgICAgIGZ1bmN0aW9u
cy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IH0KKworICAgICAgICBhdXRvIGVmZmVjdCA9IGRlY29kZUZpbHRlckVmZmVjdChkZWNvZGVyLCAq
dHlwZSk7CisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKGVmZmVjdC5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUoV1RG
TW92ZShmdW5jdGlvbnMpLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
K30KKworc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpGaWx0ZXI+IGRlY29kZUZpbHRlcihEZWNvZGVy
JiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU+IHR5cGU7CisgICAgZGVjb2RlciA+PiB0eXBlOworICAgIGlmICghdHlwZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoKnR5cGUgPT0gV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkNTU0ZpbHRlcikKKyAgICAgICAgcmV0dXJuIGRlY29kZUNTU0ZpbHRlcihk
ZWNvZGVyKTsKKworICAgIGlmICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6U1ZHRmlsdGVyKQorICAgICAgICByZXR1cm4gZGVjb2RlU1ZHRmlsdGVyKGRlY29kZXIpOwor
ICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVGaWx0ZXIo
Y29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIsIEVuY29kZXImIGVuY29kZXIpCit7CisgICAg
aWYgKGlzPFdlYkNvcmU6OkNTU0ZpbHRlcj4oZmlsdGVyKSkKKyAgICAgICAgZW5jb2RlQ1NTRmls
dGVyKGRvd25jYXN0PFdlYkNvcmU6OkNTU0ZpbHRlcj4oZmlsdGVyKSwgZW5jb2Rlcik7CisgICAg
ZWxzZQorICAgICAgICBlbmNvZGVTVkdGaWx0ZXIoZG93bmNhc3Q8V2ViQ29yZTo6U1ZHRmlsdGVy
PihmaWx0ZXIpLCBlbmNvZGVyKTsKK30KKwordm9pZCBGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZUZpbHRlcihtX2ZpbHRlciwgZW5j
b2Rlcik7Cit9CisKK3N0ZDo6b3B0aW9uYWw8RmlsdGVyUmVmZXJlbmNlPiBGaWx0ZXJSZWZlcmVu
Y2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGlmIChhdXRvIGZpbHRlciA9IGRl
Y29kZUZpbHRlcihkZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyLnJlbGVhc2VOb25O
dWxsKCkgfTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJ
UEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5j
ZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjBjMmZhMTQ4ZDRhNWNhMDcwOTViNzFlMmU2M2Q0NmZjN2EzN2E3YgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5oCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPFdl
YkNvcmUvRmlsdGVyLmg+CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBFbmNvZGVyOworY2xh
c3MgRGVjb2RlcjsKKworY2xhc3MgRmlsdGVyUmVmZXJlbmNlIHsKK3B1YmxpYzoKKyAgICBGaWx0
ZXJSZWZlcmVuY2UoUmVmPFdlYkNvcmU6OkZpbHRlcj4mJik7CisKKyAgICBSZWY8V2ViQ29yZTo6
RmlsdGVyPiB0YWtlRmlsdGVyKCkgeyByZXR1cm4gV1RGTW92ZShtX2ZpbHRlcik7IH0KKworICAg
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxG
aWx0ZXJSZWZlcmVuY2U+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgUmVmPFdl
YkNvcmU6OkZpbHRlcj4gbV9maWx0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2Uv
V2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IGVkOTRhM2VlNTY2OGEzNDhi
Yzc2YWRiZDQyYjY1MDA3MWQxYjk1MWEuLjc5OWFiNDgyYmE2Nzg3NDE4NTY0NGNkZmI2NGJmZjk5
MDhmNzUwMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAt
Mjg5LDcgKzI4OSw2IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVk
KCk6CiAgICAgICAgICdXZWJDb3JlOjpNZWRpYUtleVN5c3RlbVJlcXVlc3RJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJD
b3JlOjpNZWRpYVNlc3Npb25JZGVudGlmaWVyJywKLSAgICAgICAgJ1dlYkNvcmU6Ok5hdGl2ZUlt
YWdlUmVmZXJlbmNlJywKICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYkNvcmU6OlBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkZW50aWZpZXInLAogICAg
ICAgICAnV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeScsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCBj
NGE4NGUxZmI2ZjQ2NmI4ZmJkNTRlNmNhNDZjNDcyNDIyYjNiMGM4Li5kMzUzZTUyYjg0NjAyYzRk
MjYxZDgwYTNhN2UzNGUzODZjODVkNDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTE2Myw2ICsxNjMsNyBA
QCBQbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5jcHAgQG5vLXVuaWZ5CiBQbGF0Zm9ybS9JUEMvQ29u
bmVjdGlvbi5jcHAgQG5vLXVuaWZ5CiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAgQG5vLXVuaWZ5
CiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAgQG5vLXVuaWZ5CitQbGF0Zm9ybS9JUEMvRmlsdGVy
UmVmZXJlbmNlLmNwcCBAbm8tdW5pZnkKIFBsYXRmb3JtL0lQQy9KU0lQQ0JpbmRpbmcuY3BwIEBu
by11bmlmeQogUGxhdGZvcm0vSVBDL01lc3NhZ2VSZWNlaXZlUXVldWVNYXAuY3BwIEBuby11bmlm
eQogUGxhdGZvcm0vSVBDL01lc3NhZ2VSZWNlaXZlck1hcC5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiYTIzNzll
YzRlMDk3YTIzNjRhZmRhNGZiMjczNGY2ZmQxN2QxZjhkLi4yNWI2MTgzZjUwYjRjNzg3ZTViYmFh
MmNlYmM5M2ZiYzg4MWU2Y2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTMsNyArMyw3IEBACiAJYXJjaGl2ZVZlcnNpb24gPSAxOwog
CWNsYXNzZXMgPSB7CiAJfTsKLQlvYmplY3RWZXJzaW9uID0gNTI7CisJb2JqZWN0VmVyc2lvbiA9
IDU0OwogCW9iamVjdHMgPSB7CiAKIC8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9u
ICovCkBAIC0xMzMxLDYgKzEzMzEsNyBAQAogCQk3MUE2NzZBNjIyQzYyMzI1MDA3RDYyOTUgLyog
V0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUE2NzZBNDIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3Vj
aEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggKi87IH07CiAJCTcxQkFBNzMzMjVGRkQwOTgwMEQ3
Q0Q1RCAvKiBXS01vZGVsVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFCQUE3MzEyNUZGQ0NCQTAwRDdDRDVEIC8qIFdLTW9kZWxWaWV3LmggKi87
IH07CiAJCTcxRkI4MTBCMjI2MDYyN0UwMDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VF
dmVudHNEaXNwYXRjaFBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRN
b3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi87IH07CisJCTcyMDBDRjc1MjcwRDk1NDQwMDUx
NUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzIwMENGNzQyNzBEOTIyNjAwNTE1QzI0IC8qIEZpbHRlclJlZmVy
ZW5jZS5jcHAgKi87IH07CiAJCTcyOEU4NkYxMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBp
Y2tlck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi87IH07CiAJ
CTc1QThEMkM4MTg3Q0NGQUIwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThEMkM0MTg3Q0NGOUYw
MEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQdWJsaWMsICk7IH07IH07CiAJCTc1QThEMkQ2MTg3RDFDMEUwMEMzOUM5RSAvKiBXS1dl
YnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFT
dG9yZUludGVybmFsLmggKi87IH07CkBAIC00NjgzLDYgKzQ2ODQsOSBAQAogCQk3MUJBQTczMTI1
RkZDQ0JBMDBEN0NENUQgLyogV0tNb2RlbFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV0tNb2RlbFZpZXcuaDsgcGF0aCA9IGlvcy9XS01vZGVsVmlldy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MUJBQTczMjI1RkZDQ0JBMDBEN0NENUQgLyogV0tNb2Rl
bFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS01vZGVs
Vmlldy5tbTsgcGF0aCA9IGlvcy9XS01vZGVsVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3Vz
ZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjY5MjcwQzUyRUEwMDUxNUMyNCAvKiBGaWx0ZXJSZWZl
cmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyMDBDRjZBMjcwQzU3QTcwMDUxNUMyNCAvKiBGaWx0ZXJHZW9tZXRy
eVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAwQ0Y3NDI3MEQ5MjI2MDA1MTVDMjQgLyog
RmlsdGVyUmVmZXJlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlZmVyZW5jZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMDM0NDlBMjZBNkM0NEMwMDBBNUY1
NCAvKiBNb25vdG9uaWNPYmplY3RJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vbm90b25p
Y09iamVjdElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIwMzQ0
OUIyNkE2QzQ3NjAwMEE1RjU0IC8qIFJlbmRlcmluZ1VwZGF0ZUlELmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlcmluZ1VwZGF0ZUlELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMjc4
MDBCMjQwOEJEN0QwMDdEMzc2QiAvKiBQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzIwLDYgKzczMjQsOSBAQAogCQkJCUJDMDMyRDlFMTBG
NDM3RDEwMDU4QzE1QSAvKiBEZWNvZGVyLmggKi8sCiAJCQkJQkMwMzJEOUYxMEY0MzdEMTAwNThD
MTVBIC8qIEVuY29kZXIuY3BwICovLAogCQkJCUJDMDMyREEwMTBGNDM3RDEwMDU4QzE1QSAvKiBF
bmNvZGVyLmggKi8sCisJCQkJNzIwMENGNkEyNzBDNTdBNzAwNTE1QzI0IC8qIEZpbHRlckdlb21l
dHJ5UmVmZXJlbmNlLmggKi8sCisJCQkJNzIwMENGNzQyNzBEOTIyNjAwNTE1QzI0IC8qIEZpbHRl
clJlZmVyZW5jZS5jcHAgKi8sCisJCQkJNzIwMENGNjkyNzBDNTJFQTAwNTE1QzI0IC8qIEZpbHRl
clJlZmVyZW5jZS5oICovLAogCQkJCTlCRDhBQjQ5MjU4MjBFNTIwMDUzODZGOCAvKiBGb250UmVm
ZXJlbmNlLmggKi8sCiAJCQkJNDE1MUU1QzMxRkJCOTBBOTAwRTQ3RTJEIC8qIEZvcm1EYXRhUmVm
ZXJlbmNlLmggKi8sCiAJCQkJQzBDRTcyQUMxMjQ3RTc4RDAwQkMwRUM0IC8qIEhhbmRsZU1lc3Nh
Z2UuaCAqLywKQEAgLTEzNjU5LDcgKzEzNjY2LDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFB
QzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWF0
dHJpYnV0ZXMgPSB7Ci0JCQkJRGVmYXVsdEJ1aWxkU3lzdGVtVHlwZUZvcldvcmtzcGFjZSA9IE9y
aWdpbmFsOwogCQkJCUxhc3RTd2lmdFVwZGF0ZUNoZWNrID0gMTMwMDsKIAkJCQlMYXN0VXBncmFk
ZUNoZWNrID0gMTE0MDsKIAkJCQlUYXJnZXRBdHRyaWJ1dGVzID0gewpAQCAtMTQ0NTEsNiArMTQ0
NTcsNyBAQAogCQkJCTJEOTJBNzgwMjEyQjZBNzEwMEY0OTNGRCAvKiBFbmNvZGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUNEQ0RDOTlFMjQ4RkU4REEwMEE2OTUyMiAvKiBFbmRvd21lbnRTdGF0
ZVRyYWNrZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUE1NzYwMjE0OTZCOTc5MDBBNEVFMDYg
LyogRXZlbnREaXNwYXRjaGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTcyMDBDRjc1MjcwRDk1NDQwMDUxNUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQ0RBOTNEQjEyMkY4QkNGNDAwNDkwQTY5IC8qIEZ1bGxzY3JlZW5Ub3VjaFNl
Y2hldXJpc3RpY1BhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzFBMTUyRDcyNEU1
QTI5QTAwOTc4QzhCIC8qIEhhbmRsZVhQQ0VuZHBvaW50TWVzc2FnZXMubW0gaW4gU291cmNlcyAq
LywKIAkJCQkyNzQ5RjY0NDIxNDY1NjFCMDA4MzgwQkYgLyogSW5qZWN0ZWRCdW5kbGVOb2RlSGFu
ZGxlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAppbmRleCAy
N2JjZDAwNTQ1MDk1OGU4MDIxMjMzMGMxZTg5NmUzYzg5MTczNGZiLi5jODY5M2FlMjlkOGJhN2Rk
MmQ0MWNjYjQyMWMwNjlhN2RlYTA0YWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApA
QCAtMjAzLDYgKzIwMywxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBiaXRtYXAtPmNy
ZWF0ZUltYWdlKCk7CiAgICAgfQogCisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBmaWx0ZXJl
ZEltYWdlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAg
cmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5nZXRGaWx0ZXJlZEltYWdlRm9y
SW1hZ2VCdWZmZXIobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGZpbHRlciwgV1RGTW92
ZShnZW9tZXRyeSkpOworICAgIH0KKwogICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxC
dWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBk
ZXN0aW5hdGlvbkZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCkgY29uc3Qg
ZmluYWwKICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4
IGVjNzkzNDEwNmIxMWIzNjZjNzg4YzUzYmQ5YjI0MDk3OTY5YmQ5ZDkuLjc2MGM1NDNiMzFmOGY0
MzE3MzUxZjlmNjc1ZjNkNGM1M2Y5MDk1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CiAKICNpbmNsdWRlICJEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5oIgorI2luY2x1ZGUgIkZpbHRl
clJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmgiCkBAIC0yMzcsNiArMjM4LDI0IEBAIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0U2hhcmVhYmxlQml0bWFwKFJlbmRlcmluCiAgICAg
cmV0dXJuIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7CiB9CiAKK1JlZlB0cjxJbWFn
ZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VC
dWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyLCBjb25zdCBGaWx0
ZXImIGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5KQor
eworICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOworCisgICAgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5j
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRGaWx0ZXJlZEltYWdlRm9ySW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXIsIElQQzo6RmlsdGVyUmVmZXJlbmNlIHsgUmVmPEZpbHRlcj4g
eyBjb25zdF9jYXN0PEZpbHRlciY+KGZpbHRlcikgfSB9LCBJUEM6OkZpbHRlckdlb21ldHJ5UmVm
ZXJlbmNlKFdURk1vdmUoZ2VvbWV0cnkpKSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpHZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXI6OlJlcGx5KGhhbmRsZSksIHJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDFfcyk7CisgICAgQVNTRVJUX1VOVVNFRChzZW5kUmVz
dWx0LCBzZW5kUmVzdWx0KTsKKworICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgCisgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZShoYW5kbGUpOworICAgIGlmICghYml0bWFwKQorICAgICAgICByZXR1cm4geyB9OworICAgIAor
ICAgIHJldHVybiBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7Cit9CisKIHZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Q2FjaGVOYXRpdmVJbWFnZShoYW5kbGUsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0
Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5oCmluZGV4IDg3YWU1MjJjYmJiMjgxZmM0YTg4MDc2NWI5OWY0Yzkw
MjU2YTlkMjUuLjRkN2RlNGY2NTVmMTFjYzFhMjkwMmYyZWNkZDczM2VjZDk4ZDY5M2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMjcsNiArMjcsOCBAQAogCiAj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnlSZWZlcmVu
Y2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNz
Q29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRz
LmgiCiAjaW5jbHVkZSAiSVBDU2VtYXBob3JlLmgiCkBAIC0xMDIsNiArMTA0LDcgQEAgcHVibGlj
OgogICAgIFZlY3Rvcjx1aW50OF90PiBnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNo
SWRlbnRpZmllciBmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cik7CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZ2V0U2hhcmVhYmxlQml0bWFwKFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0
aW9uKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGdldEZpbHRlcmVkSW1hZ2VGb3JJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkZpbHRlciYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeT4mJik7
CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGNhY2hl
Rm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440768</attachid>
            <date>2021-10-11 02:46:37 -0700</date>
            <delta_ts>2021-10-11 03:04:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211011024636.patch</filename>
            <type>text/plain</type>
            <size>722238</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzODg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJhMDA2NDYzZjNkOGRk
NzAxZTg2ODJlNGIzZmJiZjY5NGVkNWVkMC4uMGViZDYzZTdkOTM4ZWU3YmViYThhNGU0Y2Q5MWFj
Y2NlZTRlNTRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1MyBAQAorMjAyMS0xMC0xMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXND
b2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZpbHRlckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29j
b2EubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5oLgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFnZTo6c2V0SW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcklm
RXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFnZTo6aW1hZ2VC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFw
aGljQ29yZUltYWdlLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VHcmFwaGljOjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVCbGVuZDo6RkVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpzZXRCbGVuZE1v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YXBwbHkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVCbGVuZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbG9yTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeDo6RkVDb2xvck1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1h
dHJpeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjplZmZlY3RUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4Lmg6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKGlzVHlw
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OnNldEsxKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRL
Mik6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0SzMpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb21wb3NpdGU6OnNldEs0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBw
bHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0T3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBCeXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmFyaXRobWV0aWNTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb21wb3NpdGVPcGVy
YXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6b3BlcmF0aW9uIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRy
aXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZHJhd2luZ1JlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6YXBwbHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjbGFtcFJHQkFWYWx1ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0
ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6
c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2
ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVD
b252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGln
aHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpkaWZmdXNlQ29u
c3RhbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1l
bnRNYXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVE
aXNwbGFjZW1lbnRNYXApOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNl
dFhDaGFubmVsU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6
OnNldFlDaGFubmVsU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRN
YXA6OnNldFNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpyZXN1
bHRDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1h
cDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFj
ZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Ynl0ZU9mZnNldE9mUGl4ZWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5k
ZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnlDaGFubmVs
SW5kZXggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAg
IChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnNoYWRvd0NvbG9yIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVGbG9vZDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9v
ZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZs
b29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVz
c2lhbkJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoZ2F1c3NpYW5L
ZXJuZWxGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsUG9zaXRpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlh
dGlvblgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0
ZERldmlhdGlvblkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OnNldEVkZ2VNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9u
bHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpzdGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6
c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0
U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRn
ZU1vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpz
ZXREaWZmdXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3Bl
Y3VsYXJDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTcGVjdWxh
ckV4cG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRM
ZW5ndGhYKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5n
dGhZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9w
Um93Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
aW50ZXJpb3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3Jt
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFp
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eUdlbmVyaWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpkcmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRpZmZ1c2VD
b25zdGFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzcGVjdWxhckNv
bnN0YW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNwZWN1bGFyRXhw
b25lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c291cmNlIGNvbnN0
KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjps
aWdodGluZ0NvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OmxpZ2h0U291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OkFscGhhV2luZG93Ojp0b3BMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0
b3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFX
aW5kb3c6OmNlbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpBbHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3ApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3BS
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRv
dzo6c2V0UmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxw
aGFXaW5kb3c6OnNldEJvdHRvbVJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnQpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRU1lcmdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTWVyZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9y
cGhvbG9neTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21w
b25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9y
cGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5oOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0
b3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRy
YXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6
OnNldER5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgIChpc1R5cGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFy
Q29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5n
OjpzZXRTcGVjdWxhckV4cG9uZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVT
cGVjdWxhckxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJFeHBvbmVudCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpkcmF3aW5nUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFwcGx5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OkZFVHVyYnVsZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFR1cmJ1
bGVuY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1
ZW5jeVgpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5
WSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRTZWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJi
dWxlbmNlOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWlu
dGluZ0RhdGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1
cmJ1bGVuY2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnR1cmJ1bGVuY2VUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6YXBwbHkgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzZXRTb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6ZmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXI6OnNldEZpbHRlclJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpmaWx0ZXJTY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXI6OnNldEZpbHRlclNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6YWJzb2x1dGVUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpzZXRSZW5kZXJpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6aXNTVkdGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyOjppc0NTU0ZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
Qm91bmRhcnlTZXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhv
bG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OkZp
bHRlckJvdW5kYXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp4
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjphcHBseVBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y29sbGVjdEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRp
cGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpw
cmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29w
eVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFj
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0
ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJl
c3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6cmVzdWx0Q29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnNldE9wZXJhdGluZ0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAgICAgIChpc1R5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpudW1iZXJPZkVmZmVjdElucHV0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlzQWxwaGFJ
bWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNl
dElzQWxwaGFJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmFic29sdXRlUGFpbnRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6c2V0QWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjptYXhFZmZlY3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0TWF4RWZmZWN0UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVj
dFR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpv
dXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
aGFzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNl
dEhhc1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNZIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzWSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1dpZHRoIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzV2lkdGgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNIZWlnaHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNIZWln
aHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjplZmZlY3RCb3VuZGFyaWVzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RWZmZWN0Qm91bmRhcmllcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldFVuY2xpcHBlZEFic29s
dXRlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y2xpcHNUb0JvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldENsaXBzVG9Cb3VuZHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1hbGl6ZWRGbG9hdHMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1ZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyR2VvbWV0cnkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6RmlsdGVyR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZp
bHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291
cmNlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Ojph
YnNvbHV0ZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6cmVzb2x1dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
Ym91bmRhcnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmNv
bnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyR2VvbWV0cnk6OmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OnJlc29sdmVUb0ZpbHRlckNvb3JkaW5h
dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9B
YnNvbHV0ZUNvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21l
dHJ5OjpjbGlwVG9QcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0
cHV0OjpjcmVhdGVGaWx0ZXJSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3V0cHV0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck91dHB1dDo6
cmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OnJlbmRlcmluZ01vZGUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVz
ZW50YXRpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
UmVzdWx0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJl
c3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1
bHQ6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Z2V0UGl4
ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpyZXF1aXJlc1BpeGVs
QnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Y29weVBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6bG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyUmVzdWx0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJSZXN1bHQ6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJSZXN1bHQ6OnNldElzQWxwaGFJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXN1bHRWZWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb2lu
dExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFs
cGhhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhh
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjplZmZlY3ROYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKTogRGVsZXRlZC4K
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmVmZmVjdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6bm9ybWFs
aXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjphcHBseVNvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGFtcEJ5dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUFy
aXRobWV0aWNQaXhlbHNVbmNsYW1wZWQpOgorICAgICAgICAoV2ViQ29yZTo6YXJpdGhtZXRpY1Nv
ZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseUFyaXRobWV0aWNTb2Z0d2FyZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBwbHlOb25Bcml0aG1ldGlj
U29mdHdhcmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5U29m
dHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNv
ZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRp
bmcuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5U29mdHdhcmUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lT
b2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjphcHBs
eVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFw
cGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0UmVuZGVyZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdFNvZnR3YXJl
OjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgorICAgICAg
ICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L1NvdXJjZUFscGhhU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUFscGhhOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdy
YXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTZXBpYUVmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0
RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dFZmZlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
RmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgIChpc1R5cGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJz
OjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6Omlu
cHV0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9j
YXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJG
aWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJzLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRkVC
bGVuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1
aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9y
Pjo6aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojpmcm9tU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlw
ZT46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPENvbXBv
c2l0ZU9wZXJhdGlvblR5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6ZnJvbVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGw6CisgICAg
ICAgICogc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAg
KiBzdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3Bs
YWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6Omxp
Z2h0U291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RFbGVtZW50Lmg6CisgICAgICAgICogc3Zn
L1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjppbWFnZUJ1ZmZlckZvckVmZmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQgY29u
c3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRUxpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAg
ICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVN
b3JwaG9sb2d5RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yPjo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
Pjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9w
ZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlw
ZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmlkbDoKKyAgICAgICAgKiBzdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVBvaW50TGlnaHRFbGVtZW50Ojps
aWdodFNvdXJjZSBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ZFVGlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVUaWxlRWxlbWVudDo6
YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50Lmg6CisgICAgICAg
ICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAg
KiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJF
bGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6RkVJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUltYWdlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
Y3JlYXRlV2l0aEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNy
ZWF0ZVdpdGhJUklSZWZlcmVuY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFn
ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZTo6cmVmZXJlbmNlZFJlbmRlcmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OlNWR0ZpbHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmluZGV4ZWRFZmZlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpsYXN0RWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlcjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoKKyAgICAgICAgKGlzVHlwZSk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VHcmFwaGljIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNvdXJjZUFscGhhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZE5hbWVkRWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6Om5hbWVkRWZmZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZm
ZWN0UmVmZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWls
ZGVyOjpjbGVhckVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
QnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXJCdWlsZGVyOjpzZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjp0YXJnZXRCb3VuZGluZ0JveCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpwcmltaXRpdmVVbml0
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpz
ZXRQcmltaXRpdmVVbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJC
dWlsZGVyOjpsYXN0RWZmZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OmVmZmVjdFJlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6IERlbGV0
ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckV4cHJlc3Npb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckdlb21ldHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJHZW9tZXRyeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5
OjpTVkdGaWx0ZXJHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJHZW9tZXRy
eTo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RmlsdGVyR2VvbWV0cnk6OmJvdW5kYXJ5U2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckdlb21ldHJ5Ojpjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9GaWx0ZXJDb29yZGlu
YXRlcyBjb25zdCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR2Vv
bWV0cnkuaDogQWRkZWQuCisgICAgICAgICogeG1sL1hQYXRoR3JhbW1hci5jcHA6CisgICAgICAg
ICogeG1sL1hQYXRoR3JhbW1hci55OgorCiAyMDIxLTEwLTEwICBTaWh1aSBMaXUgIDxzaWh1aV9s
aXVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBpdGVyYXRpbmcgRmlsZVN5
c3RlbURpcmVjdG9yeUhhbmRsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzMDk0NDkwNTE4OGQ5Zjg4N2E1ZTU3ZjMz
Y2UxMjI4MjQ2MTdlY2UzLi43NDdkNTM2NGFjNTFiMWFhODM3NTAxOTBiOGYwNzM2NTUxZDZjZGJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIxLTEwLTExICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gRW5hYmxlIGZpbHRl
cnMgaW4gR1BVIFByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMTI1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zp
bHRlckdlb21ldHJ5UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZTo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjpG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTo6dGFrZUdlb21ldHJ5KToKKyAgICAgICAgKElQQzo6Rmls
dGVyR2VvbWV0cnlSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRl
ckdlb21ldHJ5UmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0
ZXJSZWZlcmVuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjpG
aWx0ZXJSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjplbmNvZGVGaWx0ZXJFZmZlY3QpOgorICAg
ICAgICAoSVBDOjplbmNvZGVTVkdGaWx0ZXIpOgorICAgICAgICAoSVBDOjplbmNvZGVDU1NGaWx0
ZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoSVBDOjpk
ZWNvZGVTVkdGaWx0ZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVDU1NGaWx0ZXIpOgorICAgICAg
ICAoSVBDOjpkZWNvZGVGaWx0ZXIpOgorICAgICAgICAoSVBDOjplbmNvZGVGaWx0ZXIpOgorICAg
ICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6
OkZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRmlsdGVy
UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OnRha2VG
aWx0ZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAo
dHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCk6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoKKwogMjAyMS0xMC0xMCAg
U2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBm
b3IgaXRlcmF0aW5nIEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
MmIwM2ZhNzE5YTAxYjlkYTkyOWY4YjU5NGFhN2IwMjA4MTNiMGMwMC4uZjk2ZjJjNjE1ZDAxNDQ3
NDA1ZjA3NDUzZGJkY2M0NDNjYTUwMWM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwNTQsMTQgKzIw
NTQsMzQgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbnMuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0
ZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZv
bHZlTWF0cml4U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT0JveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09PcmlnaW5hbEZvcm1hdEJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09Qcm90
ZWN0aW9uU2NoZW1lSW5mb0JveC5jcHAKQEAgLTI2NDQsNiArMjY2NCw3IEBAIHN2Zy9ncmFwaGlj
cy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAKIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuY3BwCiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyR2VvbWV0cnkuY3BwCiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmNwcAog
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5jcHAK
IHN2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZUFuaW1hdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKaW5kZXggYTRjMGE3NjI3YzM3ODFkZmNkMDQ5MDZmYzUyMzMwOWM5MDczMGMyYy4uMGJk
ZGI5OWMyMzhhZDBlNzExZDMzOTI3MGEzZWM1MWU5MWQ2NjI1NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CkBAIC0zOTgsNyArMzk4LDggQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRp
ZXMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW0KIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCi1wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCiBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVRGV2aWNlTWV0YWwubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNw
bGF5UmVmcmVzaE1vbml0b3JJT1MubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggZmFjYjNiZGQwMjhjZjJkMDZmMGZmMThlZTAyOTYzNzg3NjA0MzE3Mi4uZWEzNTRjNDQ3
NjgzMDg5NjY0ZjU0NTU3NzQxMzFlMjdmMjYyODBiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjM1LDcgKzIzNSw2IEBACiAJ
CTA4MTY2OEQ0MTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2NjhEMjEyNTYwM0JG
MDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRlci5oICovOyB9OwogCQkwODE2NjhEQTEyNTYw
M0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNW
R1RleHRMYXlvdXRFbmdpbmUuaCAqLzsgfTsKIAkJMDgxQUE4REExMTExMjM3RTAwMkFCMDZFIC8q
IFNWR0VsZW1lbnRSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDgxQUE4RDkxMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0
YS5oICovOyB9OwotCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxRUJG
MzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLzsgfTsKIAkJMDgzREFF
QTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZC
MDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJMDgzREFF
QTkwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTUwRjAxQTdG
QjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oICovOyB9OwogCQkwODQ1
NjgwODEyQjkwREE2MDA5NjBBOUYgLyogRm9udE1ldHJpY3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5RiAvKiBG
b250TWV0cmljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NzcsOCArNzc2LDYgQEAKIAkJMkFFRjZGREQyNkU3RUNDRjAwMzI2RDAyIC8qIENT
U051bWVyaWNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyQUVGNkZDRTI2RTcxRjJEMDAzMjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCAqLzsgfTsK
IAkJMkIzNjVDODQxNTI1MTE5RTAwOTFEMjdCIC8qIFJlbmRlclNWR0VsbGlwc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCNDIzNUEwMTUyNTBGNjAw
MERCQkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNlLmggKi87IH07CiAJCTJCRThFMkM3MTJBNTg5RUMw
MEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1M
TWV0YUNoYXJzZXRQYXJzZXIuaCAqLzsgfTsKLQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8q
IEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuaCAqLzsgfTsKLQkJMkNBQTRBM0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQ0FBNEEzOTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UuaCAqLzsgfTsKIAkJMkQwNjIxNDQxREE2MzlCNjAwQTdGQjI2IC8qIFdlYktp
dE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQyMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtl
eU1lc3NhZ2VFdmVudC5jcHAgKi87IH07CiAJCTJEMDYyMTQ1MURBNjM5QkEwMEE3RkIyNiAvKiBX
ZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDMxREE2Mzk4ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlh
S2V5TWVzc2FnZUV2ZW50LmggKi87IH07CiAJCTJEMDYyMTREMURBNjNBOEIwMEE3RkIyNiAvKiBX
ZWJLaXRNZWRpYUtleXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQwNjIxNDkxREE2M0E3OTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAg
Ki87IH07CkBAIC0yMjk3LDcgKzIyOTQsMTggQEAKIAkJNzI5OUJDNjgyM0Q2QTUzRTAwQ0M2ODgz
IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI5RDA1MzAy
NTMxNDI0MzAwNDIyMDk4IC8qIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5RDA1MkUyNTMxM0UyNjAw
NDIyMDk4IC8qIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyQTczQkVGMjQ1QTNGOTAwMDFDOUQw
MyAvKiBBbmltYXRpb25GcmFtZVJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFt
ZVJhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkFBNDZDMzI3MTQzNDQ3MDAzRTg4QzQgLyogRmlsdGVyR2VvbWV0cnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDgzMjcwNjY3NEMwMDND
NUFBRSAvKiBGaWx0ZXJHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM1MjcxNDM1MjMwMDNFODhDNCAvKiBGaWx0ZXJCb3Vu
ZGFyeVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJBQTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2QzYyNzE0MzVG
RDAwM0U4OEM0IC8qIEZpbHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2NjI3MDNENjZEMDAzQzVBQUUgLyogRmlsdGVyRnVu
Y3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkFBNDZDNzI3MTQzNjlBMDAzRTg4QzQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJEMjcxNDMw
QjEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM4MjcxNDM3MzMwMDNFODhDNCAv
KiBGaWx0ZXJSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQzkwQTNBMjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDOTI3MTQz
N0QxMDAzRTg4QzQgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0EyNzE0
MzkwMTAwM0U4OEM0IC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0
NkNCMjcxNDM5OTcwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJCMjcxNDMwQjAwMDNFODhD
NCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDQzI3MTQzOUQ5MDAzRTg4QzQgLyogU1ZHRmlsdGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2
QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0QyNzE0MzlFNTAwM0U4OEM0IC8qIFNW
R0ZpbHRlckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQUE0NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJC
QUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQTUyM0UxNzMyODAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyRUJDN0REMjcxMTNEMzEwMEYwQTIwRiAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJGNjY3RTEyNjBDMjZBQzAwRUUzNkFEIC8qIERp
YWdub3N0aWNMb2dnaW5nRG9tYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkY2NjdERjI2MEMyNjQ0MDBFRTM2QUQgLyogRGlhZ25vc3RpY0xvZ2dp
bmdEb21haW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEw
OEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1Nzkz
RTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBN
ZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTI3MDAsOCArMjcwOCw2IEBACiAJCTg0MjI0MTk0MTA3
RTc4QTcwMDc2NkE4NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3OEE3MDA3NjZBODcg
LyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oICovOyB9OwogCQk4NDMwMEJENjEyMEM5QUFDMDAy
MTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhT
dHJpbmdTb3VyY2UuaCAqLzsgfTsKIAkJODQzMDBCRDgxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1Bh
dGhTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg0MzAwQkQ3MTIwQzlBRDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi87IH07Ci0JCTg0
NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0
ZXIuaCAqLzsgfTsKLQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRkEwRkQy
NjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oICovOyB9OwogCQk4NDY1MEU3RTIzODdBRDdEMDA2
MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQ2NTBFN0MyMzg3QUQ3QzAwNjI2NkUyIC8qIE1lZGlhUXVl
cnlMaXN0RXZlbnQuaCAqLzsgfTsKIAkJODQ3MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3Rh
bnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3MzBENUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICov
OyB9OwogCQk4NDczMEQ3OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUMxMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguaCAqLzsgfTsKQEAgLTI3MTEsNyArMjcx
Nyw3IEBACiAJCTg0NzMwRDgxMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2NDEyNDhGMEIz
MDBEM0E5QzkgLyogRkVMaWdodGluZy5oICovOyB9OwogCQk4NDczMEQ4MzEyNDhGMEIzMDBEM0E5
QzkgLyogRkVNZXJnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3MzBENjYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuaCAqLzsgfTsKIAkJODQ3
MzBEODUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTW9ycGhvbG9neS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjgxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFTW9ycGhvbG9neS5oICovOyB9OwotCQk4NDczMEQ4NzEyNDhGMEIzMDBEM0E5QzkgLyogRkVP
ZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oICovOyB9OworCQk4NDczMEQ4NzEy
NDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg0NzMw
RDg5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZDMTI0OEYwQjMwMEQzQTlD
OSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCAqLzsgfTsKIAkJODQ3MzBEOEIxMjQ4RjBCMzAwRDNB
OUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovOyB9OwogCQk4NDcz
MEQ4RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyog
RkVUdXJidWxlbmNlLmggKi87IH07CkBAIC02MTAwLDggKzYxMDYsNiBAQAogCQkwODE2NjhENzEy
NTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRM
YXlvdXRFbmdpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExh
eW91dEVuZ2luZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODFBQThEOTExMTEy
MzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5
IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHRmlsdGVyQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVB
MjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAz
NDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNjI0OCw4ICs2MjUyLDYgQEAKIAkJMEY0OTY2QTgxREI0MEM0MzAwQTI3NEJCIC8q
IEpTRE9NUG9pbnRSZWFkT25seS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RPTVBvaW50UmVhZE9ubHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjQ5NjZBOTFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xs
VHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAv
KiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQz
NCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXll
ckZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzU4LDEwICs3MzYwLDYgQEAKIAkJMkI0MjM1QTAxNTI1
MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAg
LyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQ0FBNEEzNzI0QkUxOEExMDA5REVFNzAg
LyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQyMURBNjM5ODgwMEE3RkIy
NiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQzMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRN
ZWRpYUtleU1lc3NhZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDA2MjE0NzFEQTYzQTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlOZWVkZWRFdmVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU5l
ZWRlZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTMyLDkgKzEw
NTMwLDUwIEBACiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZpbHRlck91dHB1dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWx0ZXJPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBG
aWx0ZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJGdW5jdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAv
KiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZDMjcwM0RDM0EwMDNDNUFB
RSAvKiBDU1NGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q1NTRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkQyNzAz
REMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDU1NGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkUy
NzAzREZEODAwM0M1QUFFIC8qIEZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVB
QUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJj
ZUdyYXBoaWNTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8qIEZFTW9ycGhvbG9neVNv
ZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzQyNzA1ODM3RDAwM0M1QUFFIC8q
IEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1lcmdlU29mdHdhcmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVB
QUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29s
b3JNYXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9vZFNvZnR3YXJlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZFRmxvb2RTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5z
ZmVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0IyNzA1QjJD
OTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQTgzRDdDMjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFFIC8qIEZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEaXNwbGFj
ZW1lbnRNYXBTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDdFMjcwNjMzNkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGRVRpbGVTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBGRVR1cmJ1bGVuY2VTb2Z0
d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBG
RUxpZ2h0aW5nU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVMaWdodGluZ1NvZnR3
YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEODIyNzA2NTExQjAw
M0M1QUFFIC8qIEZFQmxlbmRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUJsZW5k
U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MzI3MDY2
NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyR2Vv
bWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjQyNzE0MkNFQjAw
M0U4OEM0IC8qIEZpbHRlclJlc3VsdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1
bHRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjYyNzE0MkYz
NzAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBQTQ2QjcyNzE0MkYzODAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpbHRlclJlc3VsdFNvZnR3YXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQUE0NkI4MjcxNDJGNzkwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2Uu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI5MjcxNDJG
NzkwMDNFODhDNCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkEyNzE0MkY3QTAwM0U4OEM0IC8qIEZpbHRl
clJlc3VsdENvcmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2
QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkMyNzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlck91dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJPdXRwdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCRDI3MTQzMEIxMDAzRTg4QzQg
LyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmlsdGVyUmVwcmVzZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBQTQ2QkUyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkFBNDZCRjI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhw
cmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXJFeHBy
ZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkMwMjcxNDMyREYw
MDNFODhDNCAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR0ZpbHRlckJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkFBNDZDMTI3MTQzMkRGMDAzRTg4QzQgLyogU1ZHRmlsdGVyR2VvbWV0cnkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyR2VvbWV0cnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QzIyNzE0MzJFMDAwM0U4OEM0IC8qIFNW
R0ZpbHRlckdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0ZpbHRlckdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJB
QTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckJvdW5kYXJ5U2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyQkFDM0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJh
Y2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZm
ZXJCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTUyM0Ux
NzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA1NDYsNiArMTA1ODUsOCBAQAogCQk3
MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQzkwQTM5MjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmlsdGVyUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJDOTBBM0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaWx0ZXJSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJF
NDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTQ3OCw5ICsxMTUxOSw2IEBACiAJCTg0MzAwQkQ1MTIw
QzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFNvdXJjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJEOTEyMEM5QUVEMDAyMTk1NEEgLyogU1ZHUGF0
aFN0cmluZ1NvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdQYXRoU3RyaW5nU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1
RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcy
RjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NDVFNzJGQTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NDY1MEU3QzIzODdBRDdDMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdGMjM4N0FEOEEwMDYyNjZFMiAv
KiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NDY1MEU4MDIzODdBRDhCMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFRdWVyeUxpc3RFdmVudC5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTUxMiw4ICsxOTU1MCw5IEBACiAJCTJDRTExODk4MjRD
MjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCTJDQUE0QTM5MjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZS5oICovLAotCQkJCTJDQUE0QTM3MjRCRTE4QTEwMDlERUU3MCAv
KiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFBNDZCQTI3MTQy
RjdBMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0Q29yZUltYWdlLmggKi8sCisJCQkJNzJBQTQ2Qjgy
NzE0MkY3OTAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdENvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFB
NDZCOTI3MTQyRjc5MDAzRTg4QzQgLyogU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbSAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gY29yZWltYWdlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTIzMTI5LDYgKzIzMTY4LDMyIEBACiAJCQlwYXRoID0gIm1vZGVsLWVsZW1lbnQiOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzJBODNENkYyNzA1NzREMDAwM0M1QUFFIC8q
IHNvZnR3YXJlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQk3MkE4M0Q4MjI3MDY1MTFCMDAzQzVBQUUgLyogRkVCbGVuZFNvZnR3YXJlLmNwcCAqLywKKwkJ
CQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAq
LywKKwkJCQk3MkE4M0Q3QTI3MDVBREZBMDAzQzVBQUUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NjI3MDU4OTAyMDAzQzVBQUUgLyogRkVDb21wb3Np
dGVTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0MyNzA1QkQ4NjAwM0M1QUFFIC8qIEZFQ29u
dm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFF
IC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdFMjcwNjMz
NkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzgy
NzA1OEMwMzAwM0M1QUFFIC8qIEZFRmxvb2RTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0Iy
NzA1QjJDOTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovLAorCQkJCTcy
QTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQTgzRDc0MjcwNTgzN0QwMDNDNUFBRSAvKiBGRU1lcmdlU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQTgzRDczMjcwNTdDQkUwMDNDNUFBRSAvKiBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAgKi8s
CisJCQkJNzJBODNENzIyNzA1NzlDNzAwM0M1QUFFIC8qIEZFT2Zmc2V0U29mdHdhcmUuY3BwICov
LAorCQkJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAgKi8s
CisJCQkJNzJBODNEODAyNzA2NDFCNjAwM0M1QUFFIC8qIEZFVHVyYnVsZW5jZVNvZnR3YXJlLmNw
cCAqLywKKwkJCQk3MkFBNDZCNjI3MTQyRjM3MDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0U29mdHdh
cmUuY3BwICovLAorCQkJCTcyQUE0NkI3MjcxNDJGMzgwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRT
b2Z0d2FyZS5oICovLAorCQkJCTcyQTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBo
YVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNl
R3JhcGhpY1NvZnR3YXJlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gc29mdHdhcmU7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QzAxMUYzQzI0RkFEMzYwMDA1QkVGMTAg
LyogU2V0dGluZ3NUZW1wbGF0ZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKApAQCAtMjUxODMsNiArMjUyNDgsNyBAQAogCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0
ODEgLyogZmlsdGVycyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJNzJBODNENkYyNzA1NzREMDAwM0M1QUFFIC8qIHNvZnR3YXJlICovLAogCQkJCUExRTEx
NTQzMTMwMTVDM0QwMDU0QUM4QyAvKiBEaXN0YW50TGlnaHRTb3VyY2UuY3BwICovLAogCQkJCTg0
NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAqLywKIAkJCQlB
NzVFOEI4MDBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5jcHAgKi8sCkBAIC0yNTIxOSwxNSAr
MjUyODUsMjQgQEAKIAkJCQk4NDczMEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmggKi8s
CiAJCQkJODQ3MzBENkYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgKi8sCiAJ
CQkJODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovLAotCQkJCTg0
NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2RTI3MDNE
RkQ4MDAzQzVBQUUgLyogRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVB
QUUgLyogRmlsdGVyLmggKi8sCisJCQkJNzJBQTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRl
ckJvdW5kYXJ5U2V0LmggKi8sCiAJCQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRl
ckVmZmVjdC5jcHAgKi8sCiAJCQkJMDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVm
ZmVjdC5oICovLAotCQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RS
ZW5kZXJlci5jcHAgKi8sCi0JCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVm
ZmVjdFJlbmRlcmVyLmggKi8sCisJCQkJNzJBQTQ2QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZpbHRl
ckVmZmVjdFZlY3Rvci5oICovLAorCQkJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBGaWx0
ZXJGdW5jdGlvbi5oICovLAorCQkJCTcyQTgzRDgzMjcwNjY3NEMwMDNDNUFBRSAvKiBGaWx0ZXJH
ZW9tZXRyeS5oICovLAogCQkJCTQ5RUNFQjYzMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uY3BwICovLAogCQkJCTQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uaCAqLywKIAkJCQk0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0
aW9ucy5jcHAgKi8sCiAJCQkJNDlFQ0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJh
dGlvbnMuaCAqLywKKwkJCQk3MkFBNDZCQzI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyT3V0cHV0
LmNwcCAqLywKKwkJCQk3Mjk3OEQ0MzI2RkU5REU3MDBGRDJDNTYgLyogRmlsdGVyT3V0cHV0Lmgg
Ki8sCisJCQkJNzJBQTQ2QkQyNzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9u
LmggKi8sCisJCQkJNzJDOTBBMzkyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5jcHAg
Ki8sCisJCQkJNzJDOTBBM0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovLAor
CQkJCTcyQUE0NkI0MjcxNDJDRUIwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRWZWN0b3IuaCAqLywK
IAkJCQk4NDczMEQ3NDEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLywKIAkJCQlB
MUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9pbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJ
ODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLywKQEAgLTI2
OTkwLDEwICsyNzA2NSwxMyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjI1NTk4RUEwRDAwRDhC
OTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuY3BwICovLAogCQkJCUIyNTU5OEVCMEQwMEQ4QjkwMEJC
ODI1QyAvKiBTVkdGRUltYWdlLmggKi8sCi0JCQkJODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8q
IFNWR0ZpbHRlci5jcHAgKi8sCi0JCQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0Zp
bHRlci5oICovLAotCQkJCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWls
ZGVyLmNwcCAqLywKLQkJCQkwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVp
bGRlci5oICovLAorCQkJCTcyQTgzRDZBMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuY3Bw
ICovLAorCQkJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuaCAqLywKKwkJ
CQk3MkFBNDZDMDI3MTQzMkRGMDAzRTg4QzQgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8sCisJ
CQkJNzJBQTQ2QkUyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLywKKwkJ
CQk3MkFBNDZCRjI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oICovLAor
CQkJCTcyQUE0NkMyMjcxNDMyRTAwMDNFODhDNCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5jcHAgKi8s
CisJCQkJNzJBQTQ2QzEyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRlckdlb21ldHJ5LmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IGZpbHRlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMzAxMDAsOCArMzAxNzgsOCBAQAogCQkJCUNBN0U5QjQ3MjQzNjFEQzUwMDRFODlGNiAvKiBD
b250ZW50ZnVsUGFpbnRDaGVja2VyLmggKi8sCiAJCQkJOTM5MkYxNEYwQUQxODYyMzAwNjkxQkQ0
IC8qIENvdW50ZXJOb2RlLmNwcCAqLywKIAkJCQk5MzkyRjE0QjBBRDE4NjFCMDA2OTFCRDQgLyog
Q291bnRlck5vZGUuaCAqLywKLQkJCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmls
dGVyLmNwcCAqLywKLQkJCQkwRjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmgg
Ki8sCisJCQkJNzJBODNENkMyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5jcHAgKi8sCisJ
CQkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovLAogCQkJCUUzQkJD
MjQ1MjM4MzU1MUEwMDZFQzM5RiAvKiBDU1NWYWx1ZUtleS5oICovLAogCQkJCUU0QThEMjE1MjI1
NzhEQTAwMEE4NDYzQyAvKiBFdmVudFJlZ2lvbi5jcHAgKi8sCiAJCQkJRTRBOEQyMTQyMjU3OERB
MDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmggKi8sCkBAIC0zMTUyNCw2ICszMTYwMiw3IEBACiAJ
CQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk3MkVCQzdERDI3MTEzRDMxMDBGMEEyMEYgLyogKG51
bGwpIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NEMEUyQjgxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NEMEUyQkYxRjgwQTU2RTAwMTZBNENF
IC8qIEFib3J0U2lnbmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkI5NTE5NTIwN0Q2MzM0MDBB
N0QyREQgLyogQWJzdHJhY3RET01XaW5kb3cuaCBpbiBIZWFkZXJzICovLApAQCAtMzIxODMsNiAr
MzIyNjIsNyBAQAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFn
ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3OUUxNDFCQjIxNUJCMDBDQUE4QkYgLyog
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTQ0NzZCREIxREZD
QUMwMzAwNjkwRTIzIC8qIENTU0RlZmVycmVkUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MkFBNDZDQTI3MTQzOTAxMDAzRTg4QzQgLyogQ1NTRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGQkIwQzVCODE3QkJENjI5MDAzRDM2NzcgLyogQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM2NEI0RDYwQ0I0Mjk4QTAwNUYyQjYyIC8qIENTU0ZvbnRGYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNGRDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTRm9udEZh
Y2VSdWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNjg3LDEyICszMjc2NywxNiBAQAogCQkJCTkz
MEU0NDg2MjcwQzM3MjIwMERFN0FCNyAvKiBGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjlGMEU4MURBRUIwMEIyNTk2NSAvKiBG
aWxsTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDgzMUZFODY1REQwMDIwMzFDQyAv
KiBGaWxsTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRjgwRkQyNjFFRTAwQTg3RDc5
IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzkyNzE0MzdEMTAwM0U4OEM0
IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzUyNzE0MzUyMzAwM0U4OEM0
IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEM5MjUxQTBGQ0M3
QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkyQzg1NjUz
NDI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCTJDQUE0QTNBMjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2Q0IyNzE0Mzk5NzAwM0U4OEM0IC8q
IEZpbHRlckVmZmVjdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzYyNzE0MzVG
RDAwM0U4OEM0IC8qIEZpbHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZD
MzI3MTQzNDQ3MDAzRTg4QzQgLyogRmlsdGVyR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDNzI3MTQzNjlBMDAzRTg4QzQgLyogRmlsdGVyUmVw
cmVzZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM4MjcxNDM3MzMwMDNFODhD
NCAvKiBGaWx0ZXJSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MkMwMEQ5MTI5NjE5Rjgw
MDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEYwQTE1
NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTZG
QjdEMkREMjUwRkQ4MjgwMDAyMDdBQSAvKiBGbGV4Rm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzU1OTAsOSArMzU2NzQsOSBAQAogCQkJCUIyMjI3QTAzMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
QTA2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMjIyN0EwOTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0Zp
bHRlckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkNDMjcxNDM5RDkwMDNFODhD
NCAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBDMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGaWx0ZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDRDI3
MTQzOUU1MDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBMEYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTIwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR0ZpdFRvVmlld0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMUYyQUIwQ0VGMEFC
RjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM2MzU1LDcg
KzM2NDM5LDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0
ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJRGVm
YXVsdEJ1aWxkU3lzdGVtVHlwZUZvcldvcmtzcGFjZSA9IE9yaWdpbmFsOwogCQkJCUxhc3RTd2lm
dFVwZGF0ZUNoZWNrID0gMDcwMDsKIAkJCQlMYXN0VXBncmFkZUNoZWNrID0gMTE0MDsKIAkJCQlU
YXJnZXRBdHRyaWJ1dGVzID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zp
bHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCmluZGV4IDhjZjkwOWFlOWU1MzcyNGI5MWRiNGFjZTE0YWUyODU3MWRkOTU1MjYuLjM3
MzZiNGY5MjgyMTI0ZTkxMThlMmJhNDM3ZjEyZGNlYTIzOTkxNmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJDU1NGaWx0ZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
IlJlbmRlckVsZW1lbnQuaCIKQEAgLTExNiwyNiArMTE3LDIzIEBAIFJlZlB0cjxJbWFnZT4gQ1NT
RmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZs
b2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAv
LyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFs
bHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGF1dG8gcmVuZGVyaW5nTW9k
ZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisgICAgYXV0byB0ZXh0dXJlID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBpZiAoIXRleHR1cmUpCiAg
ICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCiAgICAgYXV0byBpbWFnZVJlY3Qg
PSBGbG9hdFJlY3QgeyB7IH0sIHNpemUgfTsKICAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJhd0lt
YWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKIAotICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVy
OjpjcmVhdGUoKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUodGV4dHVy
ZSkpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7Ci0gICAg
Y3NzRmlsdGVyLT5zZXRGaWx0ZXJSZWdpb24oaW1hZ2VSZWN0KTsKLSAgICBpZiAoIWNzc0ZpbHRl
ci0+YnVpbGQocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXI6OkZp
bHRlckZ1bmN0aW9uKSkKKyAgICBhdXRvIGZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRl
cmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmlsdGVy
KQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKLSAgICBjc3NGaWx0ZXItPmFw
cGx5KCk7CiAKLSAgICBhdXRvKiBvdXRwdXQgPSBjc3NGaWx0ZXItPm91dHB1dCgpOwotICAgIGlm
ICghb3V0cHV0KQotICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKKyAgICBhdXRv
IGdlb21ldHJ5ID0gbWFrZVVuaXF1ZTxGaWx0ZXJHZW9tZXRyeT4oaW1hZ2VSZWN0LCBpbWFnZVJl
Y3QpOworICAgIGlmIChhdXRvIGZpbHRlcmVkSW1hZ2UgPSB0ZXh0dXJlLT5maWx0ZXJlZEltYWdl
KCpmaWx0ZXIsIFdURk1vdmUoZ2VvbWV0cnkpKSkKKyAgICAgICAgcmV0dXJuIGZpbHRlcmVkSW1h
Z2U7CiAKLSAgICByZXR1cm4gb3V0cHV0LT5jb3B5SW1hZ2UoKTsKKyAgICByZXR1cm4gJkltYWdl
OjpudWxsSW1hZ2UoKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXJJbWFnZVZhbHVlOjpmaWx0ZXJJbWFn
ZUNoYW5nZWQoY29uc3QgSW50UmVjdCYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKaW5kZXggYTVkZDI4YjczN2JjODM1
ZTg2ZWEzZWYyMDJhNzRlNDZhYjIyMjE4MS4uODhhMzEwMjc3OTgyZjMyN2QyNDM5NDZlZWVmNTI2
ZTVmNzIwOTc0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29uY3JldGVJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKIApAQCAtMTM4LDYgKzEzOSwxOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIFJlZlB0cjxJbWFnZT4gZmlsdGVy
ZWRJbWFnZShjb25zdCBGaWx0ZXImIGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21l
dHJ5PiYmIGdlb21ldHJ5KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCk7CisgICAgICAgIGlmICghYmFja2VuZCkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0
ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKworICAgICAgICBS
ZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAgICAgICBzdGQ6OnRpZShpbWFnZUJ1
ZmZlciwgc3RkOjppZ25vcmUpID0gZmlsdGVyLmFwcGx5KHRoaXMsIFdURk1vdmUoZ2VvbWV0cnkp
KTsKKyAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVyID8gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZSgp
IDogbnVsbHB0cjsKKyAgICB9CisKICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAKaW5kZXggODVlM2QyNGJlYjBjMjA0YzMyNWEyNjU2ZDljYTU0MDQwODY2ZmI3Mi4uY2U4
OWY0YmQzYWRmNzhlMjI1ODkxZWQ2NzM3M2M5OWYwYzk2OTJmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0yOCw2
ICsyOCw4IEBACiAKICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTYwOSw2ICs2MTEsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlLCBjb25zdAogICAgIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2Up
LCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIoRmlsdGVyJiBmaWx0ZXIsIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21l
dHJ5KQoreworICAgIGF1dG8gW2ZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0XSA9IGZpbHRlci5hcHBs
eShzb3VyY2VJbWFnZSwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgIGlmIChmaWx0ZXJkSW1hZ2Up
CisgICAgICAgIGRyYXdJbWFnZUJ1ZmZlcigqZmlsdGVyZEltYWdlLCBpbWFnZVJlY3QpOworfQor
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QpCiB7CiAgICAgUGF0aCBwYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBkNmUyNTY3N2JlZjcxNWJh
NDljZjA0MWUxNGM5ZWM4MDFjNWM5N2MzLi5iNjFmNTQ0YTQ4ZGMxNDY5NWI0MDlkNzZjODQzYzc2
ZWEzNWZmZWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaApAQCAtODUsNiArODUsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
VUludDg7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2Ns
YXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OwogY2xhc3MgRmxvYXRSb3VuZGVkUmVj
dDsKIGNsYXNzIEdyYWRpZW50OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OwpAQCAtNDQyLDYgKzQ0NCw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFBv
aW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKaW5kZXggMTM5NzgwMWI0ZDhlMGZmY2Q2OTQ2N2NhMTQyMjBkMDA1M2NmMTVlZS4u
YWIzNGM5NjU2M2UwYmVmZWY1NDFkZjk5ZWVhYjhkYzJkOTBlNmUwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC00Miw2ICs0Miw5IEBA
IGNsYXNzIERyYXdpbmdDb250ZXh0Owogc3RydWN0IEl0ZW1CdWZmZXJIYW5kbGU7CiB9CiAKK2Ns
YXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OworCiBjbGFzcyBJbWFnZUJ1ZmZlciA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbWFnZUJ1ZmZlciwgV1RGOjpEZXN0cnVjdGlv
blRocmVhZDo6TWFpbj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxJbWFnZUJ1ZmZlcj4gewogcHVi
bGljOgogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFp
bHVyZS4KQEAgLTEwNiw2ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFJlZlB0cjxO
YXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlPiBmaWx0ZXJlZEltYWdlKGNvbnN0IEZpbHRlciYsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJH
ZW9tZXRyeT4mJikgPSAwOwogCiAgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8g
dGhpcyBuZXcgb25lLgogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCmluZGV4
IGQ0ZmEzYzRiZmFkMzRhYWYzMDkzYTlmMDI0ODZiYjcyN2Y5OGQ0YWEuLmQ0NWFiMzNjNDQwOGVk
NjM2MDc0NjE0ZDQ2ZjQ1OWRhNmY1MWQ2MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRl
cnNDb2NvYS5tbQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8v
IEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2UgdmFsdWVzIHdpdGggQ1NTRmlsdGVyOjpidWlsZCgp
IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgorLy8gRklY
TUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBGaWx0ZXI6OmJ1aWxkKCkgKGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjAwOCkuCiBzdGF0aWMgY29uc3Qg
ZG91YmxlIHNlcGlhRnVsbENvbnN0YW50c1szXVszXSA9IHsKICAgICB7IDAuMzkzLCAwLjc2OSwg
MC4xODkgfSwKICAgICB7IDAuMzQ5LCAwLjY4NiwgMC4xNjggfSwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGU2YzhkZjRkNTViNDU2MTM1NDllM2FmNDkxOTJhMjZlMmMwNDRhZjcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0KLSNpbXBvcnQgIkZpbHRlckVmZmVj
dFJlbmRlcmVyLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCi0jaW1wb3J0IDx3
dGYvVmVjdG9yLmg+Ci0KLU9CSkNfQ0xBU1MgQ0lJbWFnZTsKLU9CSkNfQ0xBU1MgQ0lGaWx0ZXI7
Ci1PQkpDX0NMQVNTIENJQ29udGV4dDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBG
RUNvbG9yTWF0cml4OwotY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlcjsKLWNsYXNzIFNvdXJjZUdy
YXBoaWM7Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlIDogcHVibGljIEZp
bHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAK
LXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlPiB0cnlDcmVhdGUoRmlsdGVyRWZmZWN0Jik7Ci0gICAgUmV0YWluUHRyPENJQ29u
dGV4dD4gc2hhcmVkQ0lDb250ZXh0KCk7Ci0gICAgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVyRWZm
ZWN0JikgZmluYWw7Ci0gICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X291dHB1dEltYWdlOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0IGZpbmFsOwot
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3QmKSBjb25zdCBmaW5hbDsK
LSAgICB2b2lkIGNsZWFyUmVzdWx0KCkgZmluYWw7Ci0gICAgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2UoKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPENJSW1hZ2U+IGNvbm5l
Y3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVy
KEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQ29yZUltYWdl
UmVuZGVyaW5nKEZpbHRlckVmZmVjdCYpOwotICAgIHN0YXRpYyBib29sIGNhblJlbmRlclVzaW5n
Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOwotICAgIAotICAgIFJldGFpblB0cjxDSUltYWdlPiBp
bWFnZUZvclNvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYyYpOwotICAgIFJldGFpblB0cjxDSUlt
YWdlPiBpbWFnZUZvckZFQ29sb3JNYXRyaXgoY29uc3QgRkVDb2xvck1hdHJpeCYsIGNvbnN0IFZl
Y3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7Ci0gICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdl
Rm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVyJiwgVmVjdG9y
PFJldGFpblB0cjxDSUltYWdlPj4mKTsKLSAgICAKLSAgICBSZWZQdHI8SU9TdXJmYWNlSW1hZ2VC
dWZmZXI+IG1fb3V0cHV0SW1hZ2VCdWZmZXI7Ci0gICAgUmV0YWluUHRyPENJSW1hZ2U+IG1fb3V0
cHV0SW1hZ2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1Yzg2ZmM0YzIzYWY5NTQ1NTU3YTU1OGM4YzQ1MWUxOWE4YTM4
ZmI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKgotKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0q
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UuaCIKLQotI2lmIFVTRShDT1JFX0lNQUdFKQotCi0jaW1wb3J0ICJGRUNv
bG9yTWF0cml4LmgiCi0jaW1wb3J0ICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCi0jaW1wb3J0ICJG
aWx0ZXIuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdC5oIgotI2ltcG9ydCAiRmlsdGVyT3BlcmF0
aW9uLmgiCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbXBvcnQgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCi0jaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgot
I2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgotI2ltcG9ydCA8Q29yZUltYWdlL0NJQ29udGV4dC5o
PgotI2ltcG9ydCA8Q29yZUltYWdlL0NJRmlsdGVyLmg+Ci0jaW1wb3J0IDxDb3JlSW1hZ2UvQ29y
ZUltYWdlLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjp0cnlDcmVhdGUoRmlsdGVyRWZmZWN0JiBs
YXN0RWZmZWN0KQotewotICAgIGlmIChjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhsYXN0RWZmZWN0
KSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U+KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFpblB0cjxDSUNvbnRleHQ+IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzaGFyZWRDSUNvbnRleHQoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0lDb250ZXh0Pj4gY2lDb250ZXh0ID0gW0NJ
Q29udGV4dCBjb250ZXh0V2l0aE9wdGlvbnM6IEB7IGtDSUNvbnRleHRXb3JraW5nQ29sb3JTcGFj
ZTogKF9fYnJpZGdlIGlkKUNHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VT
UkdCKX1dOwotICAgIHJldHVybiBjaUNvbnRleHQ7Ci19Ci0KLXN0YXRpYyBib29sIGlzTnVsbE9y
TGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVy
JiBlZmZlY3QpCi17Ci0gICAgYXV0byBpc051bGxPckxpbmVhciA9IFtdIChjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikgewotICAgICAgICByZXR1cm4gZnVuY3Rpb24u
dHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTgotICAgICAgICAgICAgfHwg
ZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgIH07
Ci0gICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5yZWRGdW5jdGlvbigpKSAmJiBpc051
bGxPckxpbmVhcihlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKQotICAgICAgICAmJiBpc051bGxPckxp
bmVhcihlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpICYmIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5hbHBo
YUZ1bmN0aW9uKCkpOwotfQotCi1ib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpz
dXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKLXsKLSAgICAv
LyBGSVhNRTogY2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVt
ZW50ZWQKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgewotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1h
dHJpeDogewotICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCku
dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAg
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoK
LSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uKGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCkpOwotCi0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0
cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxhckxp
Z2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpTb3VyY2VBbHBoYToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZm
ZWN0cyhGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgbV9vdXRwdXRJbWFnZSA9IGNv
bm5lY3RDSUZpbHRlcnMobGFzdEVmZmVjdCk7Ci0gICAgaWYgKCFtX291dHB1dEltYWdlKQotICAg
ICAgICByZXR1cm47Ci0gICAgcmVuZGVyVG9JbWFnZUJ1ZmZlcihsYXN0RWZmZWN0KTsKLX0KLQot
UmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0
Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQotewotICAgIFZlY3RvcjxSZXRhaW5QdHI8
Q0lJbWFnZT4+IGlucHV0SW1hZ2VzOwotICAgIAotICAgIGZvciAoYXV0byBpbiA6IGVmZmVjdC5p
bnB1dEVmZmVjdHMoKSkgewotICAgICAgICBhdXRvIGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0
ZXJzKCppbik7Ci0gICAgICAgIGlmICghaW5wdXRJbWFnZSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICBpbnB1dEltYWdlcy5hcHBlbmQoaW5wdXRJbWFnZSk7Ci0gICAgfQot
ICAgIGVmZmVjdC5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIGVmZmVjdC5zZXRS
ZXN1bHRDb2xvclNwYWNlKGVmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIAotICAg
IGlmIChlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVm
ZmVjdENsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdy
YXBoaWM6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoZG93bmNhc3Q8U291
cmNlR3JhcGhpYz4oZWZmZWN0KSk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9y
TWF0cml4OgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4KGRvd25jYXN0PEZF
Q29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvckZFQ29t
cG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZmZWN0KSwgaW5w
dXRJbWFnZXMpOwotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aG9zZSBmaWx0ZXJzIHVzaW5n
IENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxpZCBDSUltYWdlCi0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZl
TWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxh
ckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpTb3VyY2VBbHBoYToKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGljKFNvdXJjZUdy
YXBoaWMmIGVmZmVjdCkKLXsKLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBlZmZlY3Qu
ZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoaXM8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpz
b3VyY2VJbWFnZSkpCi0gICAgICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhJT1N1cmZhY2U6
ZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkuc3VyZmFjZSgpLnN1
cmZhY2UoKV07Ci0gICAgCi0gICAgcmV0dXJuIFtDSUltYWdlIGltYWdlV2l0aENHSW1hZ2U6c291
cmNlSW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCldOwotfQot
Ci1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdl
Rm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0cml4JiBlZmZlY3QsIGNvbnN0IFZlY3Rv
cjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykKLXsKLSAgICBhdXRvIGlucHV0SW1h
Z2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKLQotICAgIGF1dG8gdmFsdWVzID0gRkVDb2xvck1hdHJp
eDo6bm9ybWFsaXplZEZsb2F0cyhlZmZlY3QudmFsdWVzKCkpOwotICAgIGZsb2F0IGNvbXBvbmVu
dHNbOV07Ci0gICAgCi0gICAgc3dpdGNoIChlZmZlY3QudHlwZSgpKSB7Ci0gICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0
ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgICAgICBicmVh
azsKLSAgICAKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAg
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywg
dmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfTUFUUklYOgotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFO
Q0VUT0FMUEhBOiAvLyBGSVhNRTogQWRkIEx1bWluYW5jZSB0byBBbHBoYSBJbXBsZW1lbnRhdGlv
bgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgCi0gICAgYXV0byAqY29sb3JN
YXRyaXhGaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07
Ci0gICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0KCkgZm9yS2V5
OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgewot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURTogewotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbMF0gWTpjb21wb25lbnRzWzFdIFo6
Y29tcG9uZW50c1syXSBXOjBdIGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICBbY29s
b3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNb
M10gWTpjb21wb25lbnRzWzRdIFo6Y29tcG9uZW50c1s1XSBXOjBdIGZvcktleTpAImlucHV0R1Zl
Y3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOmNvbXBvbmVudHNbNl0gWTpjb21wb25lbnRzWzddIFo6Y29tcG9uZW50c1s4XSBX
OjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIg
c2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAg
ICAgIFo6MCAgICAgICAgICAgICBXOjFdIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAg
ICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAg
ICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjBdIGZvcktleTpAImlu
cHV0Qmlhc1ZlY3RvciJdOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1
ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzBdICBZOnZhbHVlc1sxXSAgWjp2YWx1ZXNb
Ml0gIFc6dmFsdWVzWzNdXSAgZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07Ci0gICAgICAgIFtjb2xv
ck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzVdICBZ
OnZhbHVlc1s2XSAgWjp2YWx1ZXNbN10gIFc6dmFsdWVzWzhdXSAgZm9yS2V5OkAiaW5wdXRHVmVj
dG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6dmFsdWVzWzEwXSBZOnZhbHVlc1sxMV0gWjp2YWx1ZXNbMTJdIFc6dmFsdWVzWzEz
XV0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBz
ZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzE1XSBZOnZhbHVlc1sxNl0gWjp2
YWx1ZXNbMTddIFc6dmFsdWVzWzE4XV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9yIl07Ci0gICAgICAg
IFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVz
WzRdICBZOnZhbHVlc1s5XSAgWjp2YWx1ZXNbMTRdIFc6dmFsdWVzWzE5XV0gZm9yS2V5OkAiaW5w
dXRCaWFzVmVjdG9yIl07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X1VOS05PV046Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gY29s
b3JNYXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2U7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGNv
bnN0IEZFQ29tcG9uZW50VHJhbnNmZXImIGVmZmVjdCwgVmVjdG9yPFJldGFpblB0cjxDSUltYWdl
Pj4mIGlucHV0SW1hZ2VzKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlIHJlc3Qgb2Yg
RkVDb21wb25lbnRUcmFuc2ZlciBmdW5jdGlvbnMKLSAgICBBU1NFUlQoaXNOdWxsT3JMaW5lYXJD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGVmZmVjdCkpOwotCi0gICAgYXV0byBpbnB1dEltYWdl
ID0gaW5wdXRJbWFnZXMuYXQoMCk7Ci0gICAgYXV0byBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVy
V2l0aE5hbWU6QCJDSUNvbG9yUG9seW5vbWlhbCJdOwotICAgIAotICAgIFtmaWx0ZXIgc2V0VmFs
dWU6aW5wdXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFnZUtleV07Ci0gICAgCi0gICAg
YXV0byBzZXRDb2VmZmljaWVudHMgPSBbJl0gKE5TU3RyaW5nICprZXksIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAgICAgIGlmIChmdW5jdGlvbi50eXBl
ID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIpCi0gICAgICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpmdW5jdGlvbi5pbnRlcmNlcHQgWTpmdW5j
dGlvbi5zbG9wZSBaOjAgVzowXSBmb3JLZXk6a2V5XTsKLSAgICB9OwotICAgIHNldENvZWZmaWNp
ZW50cyhAImlucHV0UmVkQ29lZmZpY2llbnRzIiwgZWZmZWN0LnJlZEZ1bmN0aW9uKCkpOwotICAg
IHNldENvZWZmaWNpZW50cyhAImlucHV0R3JlZW5Db2VmZmljaWVudHMiLCBlZmZlY3QuZ3JlZW5G
dW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEJsdWVDb2VmZmljaWVudHMi
LCBlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0QWxw
aGFDb2VmZmljaWVudHMiLCBlZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKLSAgICAKLSAgICByZXR1
cm4gZmlsdGVyLm91dHB1dEltYWdlOwotfQotCi1ib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlOjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKLXsK
LSAgICBpZiAoIXN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKGVmZmVjdCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3Rz
KCkpIHsKLSAgICAgICAgaWYgKCFzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygqaW4pIHx8ICFj
YW5SZW5kZXJVc2luZ0NJRmlsdGVycygqaW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAotewotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlcmluZyAiIDw8IHRoaXMgPDwgIiB1c2luZyBDb3JlSW1h
Z2VcbiIpOwotICAgIHJldHVybiBtX291dHB1dEltYWdlQnVmZmVyLmdldCgpOwotfQotICAgIAot
dm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihG
aWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0g
SW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCksIGxh
c3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlm
ICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewotICAgICAgICBjbGVhclJlc3VsdCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgW3NoYXJlZENJQ29udGV4dCgpLmdldCgpIHJlbmRlcjog
bV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogbV9vdXRwdXRJbWFnZUJ1ZmZlci0+c3Vy
ZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFzdEVmZmVjdCkgY29sb3JTcGFjZTps
YXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKS5wbGF0Zm9ybUNvbG9yU3BhY2UoKV07Ci19Ci0g
ICAgCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNv
bnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGRlc3RT
aXplID0gbGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkZXN0U2l6
ZS5zY2FsZShsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0UmVj
dCBkZXN0UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RTaXplKTsKLSAgICByZXR1
cm4gZGVzdFJlY3Q7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNs
ZWFyUmVzdWx0KCkKLXsKLSAgICBtX291dHB1dEltYWdlQnVmZmVyID0gbnVsbHB0cjsKLSAgICBt
X291dHB1dEltYWdlID0gbnVsbHB0cjsKLX0KLQotRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCkKLSAgICA6IEZpbHRlckVmZmVjdFJl
bmRlcmVyKCkKLXsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyUmVzdWx0Q29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FiZTU2MWI3MDFi
Y2EwNWIyNDRlNTI1ZTE3OGVjMjRmNmRkZDFmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2Uu
aApAQCAtMCwwICsxLDU3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBt
ZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNpbXBvcnQgIkZpbHRlclJlc3VsdC5oIgorCitPQkpD
X0NMQVNTIENJSW1hZ2U7CitPQkpDX0NMQVNTIENJQ29udGV4dDsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UgOiBwdWJsaWMgRmlsdGVyUmVzdWx0
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdDsKKworICAg
IHZvaWQgc2V0SW1hZ2UoUmV0YWluUHRyPENJSW1hZ2U+JiYpOworICAgIAorcHJpdmF0ZToKKyAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgb3ZlcnJpZGU7Cisg
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJpZGU7CisKKyAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gbV9pbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6RmlsdGVyUmVzdWx0Q29yZUltYWdlKQorICAgIHN0YXRpYyBib29sIGlz
VHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0
LnJlbmRlcmluZ01vZGUoKSA9PSBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsg
fQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyUmVzdWx0Q29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyNzkyYjFhYmU5NzBkOGNkZjg5YWY4
NWE1OGQ1NGQ1YWI4MDBiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorCisj
aW1wb3J0IDxDb3JlSW1hZ2UvQ0lDb250ZXh0Lmg+CisjaW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUlt
YWdlLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIEZpbHRlclJlc3VsdENvcmVJbWFnZTo6c2V0SW1hZ2UoUmV0YWluUHRyPENJ
SW1hZ2U+JiYgaW1hZ2UpCit7CisgICAgQVNTRVJUKGltYWdlKTsKKyAgICBtX2ltYWdlID0gV1RG
TW92ZShpbWFnZSk7Cit9CisKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4mIEZpbHRlclJlc3VsdENvcmVJ
bWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cygpCit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXI7
Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U6OmltYWdlQnVmZmVyKCkK
K3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzVjNDg0OGEwMjczNTk4ZDA0NjFhZjkzZmMwMjI3YWQ2NDNiY2ZlZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFw
aGljQ29yZUltYWdlLm1tCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTb3VyY2VHcmFwaGljLmgiCisKKyNpZiBVU0Uo
Q09SRV9JTUFHRSkKKworI2ltcG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UoRmlsdGVy
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoc291cmNlSW1hZ2UpOworICAgIGlmICgh
c291cmNlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDSUlt
YWdlPiBpbWFnZTsKKyAgICBpZiAoaXM8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFn
ZSkpCisgICAgICAgIGltYWdlID0gW0NJSW1hZ2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0
PElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpLnN1cmZhY2UoKS5zdXJmYWNlKCld
OworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBbQ0lJbWFnZSBpbWFnZVdpdGhDR0ltYWdlOnNv
dXJjZUltYWdlLT5jb3B5TmF0aXZlSW1hZ2UoKS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKKwor
ICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBkb3duY2Fz
dDxGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U+KHJlc3VsdCkuc2V0SW1hZ2UoV1RGTW92ZShpbWFnZSkp
OworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9m
aWx0ZXJzL0ZFQmxlbmRORU9OLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
cHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAppbmRleCAyNjExMGNkZmIwYmI2Y2Y0OTA0NTgz
ODc3ODdhYzEwZmExNzFjZjE4Li5iM2QyYTU5NDY5NDIyMzUzMjM0MzkzMjg2NTZlOTY0ZTljMTZl
ZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJt
L2ZpbHRlcnMvRkVCbGVuZE5FT04uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaApAQCAtMTA3LDE1ICsxMDcsMTggQEAg
cHVibGljOgogICAgIH0KIH07CiAKLXZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK0ZpbHRlclJlc3VsdCogRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKEZpbHRlclJl
c3VsdHMmIHJlc3VsdHMsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIGF1
dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3Qo
KTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSByZXN1bHRzLmdldCh7ICp0aGlzIH0pKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyKCkuY3Jl
YXRlRmlsdGVyUmVzdWx0KGFic29sdXRlUGFpbnRSZWN0KCksIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgYXV0
byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcmVzdWx0LT5waXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJbnRSZWN0IGVm
ZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7CkBAIC0xMjksNyArMTMyLDcgQEAgdm9pZCBGRUJsZW5kOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgaWYgKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgg
Pj0gOCkgewogICAgICAgICBwbGF0Zm9ybUFwcGx5TkVPTihzb3VyY2VQaXhlbEFycmF5QS0+ZGF0
YSgpLCBzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0
YSgpLCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9CiAgICAgLy8gSWYgdGhlcmUgaXMganVzdCBv
bmUgcGl4ZWwgd2UgZXhwYW5kIGl0IHRvIHR3by4KICAgICBBU1NFUlQoc291cmNlUGl4ZWxBcnJh
eUxlbmd0aCA+IDApOwpAQCAtMTQwLDYgKzE0Myw4IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKICAgICBzb3VyY2VCQW5kRGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpKVswXTsKICAgICBwbGF0Zm9ybUFw
cGx5TkVPTihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VBKSwgcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oc291cmNlQkFuZERlc3QpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
Pihzb3VyY2VCQW5kRGVzdCksIDgpOwogICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBdOworCisg
ICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7CiB9CiAKIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1B
cHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNy
Y1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDVmMzZhOWMzYjcyZGE2MTljMjE4YmE4
MmY2ZjE4MGJkYmExNTIwOWIuLmUzNjlkMzMxNDgwYWUzMTFlYzEyMGJhOTcyMGRmYjQ1ZTk2ZjQ4
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTE4Miw2
ICsxODIsMTQgQEAgdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QKICAgICByZWNvcmREcmF3UGF0dGVy
bihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsK
IH0KIAordm9pZCBSZWNvcmRlcjo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKEZpbHRlciYsIEltYWdl
QnVmZmVyKiwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKQoreworLy8gICAgaWYg
KG1fZGVsZWdhdGUpCisvLyAgICAgICAgbV9kZWxlZ2F0ZS0+cmVjb3JkSW1hZ2VCdWZmZXJVc2Uo
KnNvdXJjZUltYWdlKTsKKy8vICAgIHJlY29yZEZpbHRlclVzZShmaWx0ZXIpOworLy8gICAgYXBw
ZW5kPERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oZmlsdGVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpLCBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGdlb21l
dHJ5KTsKK30KKwogdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7CiAgICAgcmVjb3JkU2F2ZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggNDg2NmM4MmNhYzk0MzBk
N2MzNzRhYzNmYTViZThjMDc3Y2Q5M2E0MS4uZDAxN2U2MDJiYzg4MWQzOGVjOTYyMWUyZDc4MTNm
N2M5YWMxM2Y4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0y
MzEsNiArMjMxLDggQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0
dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJikgZmluYWw7CisKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2NzA0Y2Q2
N2ZiMGE3YWZlOWFmMThmYmI2MmMyY2VkOS4uMTZkYTAyODBkMWE2ZjYyMGQ3Nzg0NWE2NDYxMzll
YTNlYzk1MzkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJp
Z2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsyNiw0NCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRORU9OLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+CisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQo
RmlsdGVyJiBmaWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRl
ciwgVHlwZTo6QmxlbmQpCi0gICAgLCBtX21vZGUobW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5k
OjpjcmVhdGUoQmxlbmRNb2RlIG1vZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVC
bGVuZChtb2RlKSk7CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQorRkVCbGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkK
KyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUJsZW5kKQorICAgICwgbV9tb2RlKG1vZGUpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChmaWx0ZXIsIG1vZGUpKTsKIH0KIAog
Ym9vbCBGRUJsZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCiB7Ci0gICAgaWYgKG1f
bW9kZSA9PSBtb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb2RlID0gbW9kZTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX21vZGUsIG1vZGUp
ICE9IG1fbW9kZTsKIH0KIAotI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZF
QmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFQmxlbmQ6OmFw
cGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91
bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwor
ICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwor
ICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0byByZXN1
bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVz
dWx0OwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQ
b2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4sIGluMiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQotI2VuZGlm
CiAKLVRleHRTdHJlYW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJl
YW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQmxlbmQi
OwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwogICAgIHRzIDw8ICIgbW9kZT1cIiIgPDwgKG1fbW9kZSA9PSBCbGVuZE1vZGU6Ok5v
cm1hbCA/ICJub3JtYWwiIDogY29tcG9zaXRlT3BlcmF0b3JOYW1lKENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VPdmVyLCBtX21vZGUpKSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5k
ZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmgKaW5kZXggNzBlODQwN2JmNWMyMDBkNDUyMTZiOGY5YzA4NTE3YjUwNzllNzk2Ni4u
YjVkOGFlNmExMjVjM2VmYzA5MWM3M2I0MGU5ZjU0NDU5NDNiNmIzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKQEAgLTMsNiAr
Myw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDMyICsyNSwyNyBAQAogCiAj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUJsZW5kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUJsZW5kPiBjcmVhdGUoRmlsdGVyJiwgQmxlbmRNb2Rl
KTsKKyAgICBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShCbGVuZE1vZGUpOwogCiAgICAgQmxl
bmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgc2V0
QmxlbmRNb2RlKEJsZW5kTW9kZSk7CiAKIHByaXZhdGU6CisgICAgRkVCbGVuZChCbGVuZE1vZGUp
OworCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RUJsZW5kIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJy
YXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4
ZWxBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlM
ZW5ndGgpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBk
c3RQaXhlbEFycmF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JB
cnJheUxlbmd0aCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBw
bHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgRkVCbGVuZChGaWx0ZXImLCBCbGVuZE1vZGUpOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBCbGVuZE1vZGUgbV9tb2Rl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRl
eCAzODA2NWNiOTZjN2I0YjRiMDNmYzZiMGVlZDg1YWM0YjZjOTY4YTU0Li5iZDk5MmZmNDAwNjU4
NWI3YzlhYTE1ODExZmUyYWRjY2UzMzMzY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTMs
NiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDI4ICsyNCwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUu
aD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29sb3JNYXRyaXg6OkZFQ29s
b3JNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8Zmxv
YXQ+JiYgdmFsdWVzKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29sb3JNYXRy
aXgpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVzKSkK
K1JlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBl
IHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVDb2xvck1hdHJpeCh0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAotUmVmPEZFQ29s
b3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQ29sb3JNYXRy
aXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCitGRUNvbG9yTWF0cml4OjpGRUNv
bG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQor
ICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29sb3JNYXRyaXgpCisgICAgLCBtX3R5cGUodHlw
ZSkKKyAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVzKSkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUNvbG9yTWF0cml4KGZpbHRlciwgdHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CiB9
CiAKIGJvb2wgRkVDb2xvck1hdHJpeDo6c2V0VHlwZShDb2xvck1hdHJpeFR5cGUgdHlwZSkKQEAg
LTYzLDI1OCArNTYsNDMgQEAgYm9vbCBGRUNvbG9yTWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVj
dG9yPGZsb2F0PiAmdmFsdWVzKQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBt
YXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhh
LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi17Ci0gICAgZmxvYXQgciA9IHJlZDsKLSAg
ICBmbG9hdCBnID0gZ3JlZW47Ci0gICAgZmxvYXQgYiA9IGJsdWU7Ci0gICAgZmxvYXQgYSA9IGFs
cGhhOwotCi0gICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2
YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKLSAgICBn
cmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlcyBbN10gKiBi
ICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OwotICAgIGJsdWUgICAgPSB2YWx1
ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNd
ICogYSArIHZhbHVlc1sxNF0gKiAyNTU7Ci0gICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsg
dmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVz
WzE5XSAqIDI1NTsKLX0KLQotaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMp
Cit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpCiB7Ci0gICAgZmxvYXQgciA9IHJlZDsKLSAgICBmbG9h
dCBnID0gZ3JlZW47Ci0gICAgZmxvYXQgYiA9IGJsdWU7Ci0KLSAgICByZWQgICAgID0gciAqIGNv
bXBvbmVudHNbMF0gKyBnICogY29tcG9uZW50c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOwotICAg
IGdyZWVuICAgPSByICogY29tcG9uZW50c1szXSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNv
bXBvbmVudHNbNV07Ci0gICAgYmx1ZSAgICA9IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBv
bmVudHNbN10gKyBiICogY29tcG9uZW50c1s4XTsKLX0KLQotLy8gRklYTUU6IHRoaXMgc2hvdWxk
IHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KLWlu
bGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVl
LCBmbG9hdCYgYWxwaGEpCi17Ci0gICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBn
cmVlbiArIDAuMDcyMSAqIGJsdWU7Ci0gICAgcmVkID0gMDsKLSAgICBncmVlbiA9IDA7Ci0gICAg
Ymx1ZSA9IDA7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLXRlbXBsYXRlPENvbG9yTWF0cml4
VHlwZSBmaWx0ZXJUeXBlPgotYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNv
bXBvbmVudHNbOV0sIEludFNpemUgYnVmZmVyU2l6ZSkKLXsKLSAgICBBU1NFUlQocGl4ZWxBcnJh
eS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOwotICAgIAotICAgIGlmIChmaWx0
ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKLSAgICAgICAgLy8gdkltYWdl
TWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUg
aW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKLSAgICAg
ICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCi0gICAgICAg
IGlmICh2YWx1ZXNbNF0gIT0gMCB8fCB2YWx1ZXNbOV0gIT0gMCB8fCB2YWx1ZXNbMTRdICE9IDAg
fHwgdmFsdWVzWzE5XSAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGNvbnN0IGludDMyX3QgZGl2aXNvciA9IDI1NjsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4
ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGgg
PSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0
KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICBzcmMu
ZGF0YSA9IGRhdGE7Ci0gICAgCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBidWZmZXJTaXplLmhl
aWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAg
IGRlc3QuZGF0YSA9IGRhdGE7Ci0KLSAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRy
aXhbNCAqIDRdID0gewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZh
bHVlc1sgMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWyA1XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNV0gKiBkaXZpc29yKSksCi0KLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDFdICogZGl2aXNvcikpLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNl0gKiBkaXZp
c29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEx
XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbMTZdICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYodmFsdWVzWyAyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDddICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMl0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE3XSAqIGRpdmlzb3IpKSwK
LQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgM10gKiBk
aXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVz
WyA4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbMTNdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sxOF0gKiBkaXZpc29yKSksCi0gICAgICAgIH07Ci0gICAgICAgIHZJ
bWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3Is
IG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7Ci0gICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4
WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21w
b25lbnRzWzBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKGNvbXBvbmVudHNbM10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAg
IDAsCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRz
WzFdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KGNvbXBvbmVudHNbNF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIDAsCi0K
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzJdICog
ZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBv
bmVudHNbNV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYoY29tcG9uZW50c1s4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIDAsCi0KLSAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIGRp
dmlzb3IsCi0gICAgICAgIH07Ci0gICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4
KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VO
b0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX0xVTUlOQU5DRVRPQUxQSEE6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAq
IDRdID0gewotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMjEyNSAqIGRpdmlzb3Ip
KSwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuNzE1NCAqIGRpdmlzb3IpKSwK
LQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMDcyMSAqIGRpdmlzb3IpKSwKLQot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgo
JnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5v
RmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0
cnVlOworICAgIGNvbXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVlKTsKKyAgICBj
b21wb25lbnRzWzFdID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1sy
XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbM10gPSAoMC4yMTMg
LSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsgMC4yODUgKiB2
YWx1ZSk7CisgICAgY29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAg
IGNvbXBvbmVudHNbNl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRz
WzddID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s4XSA9ICgwLjA3
MiArIDAuOTI4ICogdmFsdWUpOwogfQotI2VuZGlmCiAKLXRlbXBsYXRlPENvbG9yTWF0cml4VHlw
ZSBmaWx0ZXJUeXBlPgotdm9pZCBlZmZlY3RUeXBlKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFy
cmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIEludFNpemUgYnVmZmVyU2l6ZSkKK3Zv
aWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQgdmFsdWUpCiB7Ci0gICAgZmxvYXQgY29tcG9uZW50c1s5XTsKLQotICAg
IGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKLSAgICAgICAg
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZh
bHVlc1swXSk7Ci0gICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21w
b25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0KLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5
TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAg
IGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVl
cywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOwotI2VuZGlmCi0KLSAgICBzd2l0Y2ggKGZpbHRlclR5
cGUpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJh
eUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3Jl
ZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBm
bG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAg
ICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7
Ci0gICAgICAgICAgICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7Ci0g
ICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
OgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5
TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVl
biA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZs
b2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAg
ICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsK
LSAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBv
bmVudHMpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQp
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4p
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7
Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNl
dCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNl
dCArPSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbHVtaW5hbmNl
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0
ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0
ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRl
T2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAg
ICBmbG9hdCBjb3NIdWUgPSBjb3ModmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKKyAgICBmbG9hdCBz
aW5IdWUgPSBzaW4odmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKKyAgICBjb21wb25lbnRzWzBdID0g
MC4yMTMgKyBjb3NIdWUgKiAwLjc4NyAtIHNpbkh1ZSAqIDAuMjEzOworICAgIGNvbXBvbmVudHNb
MV0gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1IC0gc2luSHVlICogMC43MTU7CisgICAgY29tcG9u
ZW50c1syXSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgKyBzaW5IdWUgKiAwLjkyODsKKyAgICBj
b21wb25lbnRzWzNdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyArIHNpbkh1ZSAqIDAuMTQzOwor
ICAgIGNvbXBvbmVudHNbNF0gPSAwLjcxNSArIGNvc0h1ZSAqIDAuMjg1ICsgc2luSHVlICogMC4x
NDA7CisgICAgY29tcG9uZW50c1s1XSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgLSBzaW5IdWUg
KiAwLjI4MzsKKyAgICBjb21wb25lbnRzWzZdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyAtIHNp
bkh1ZSAqIDAuNzg3OworICAgIGNvbXBvbmVudHNbN10gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1
ICsgc2luSHVlICogMC43MTU7CisgICAgY29tcG9uZW50c1s4XSA9IDAuMDcyICsgY29zSHVlICog
MC45MjggKyBzaW5IdWUgKiAwLjA3MjsKIH0KIAotdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUNvbG9yTWF0cml4OjphcHBseShGaWx0
ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0
JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlm
IChpbkJ1ZmZlcikKLSAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZm
ZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBz
dGFjay50YWtlTGFzdCgpOwogCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJl
c3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0
SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKLSAgICBpZiAoIXBpeGVs
QnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxC
dWZmZXItPmRhdGEoKTsKLSAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZm
ZXItPnNpemUoKTsKLQotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0
cyhtX3ZhbHVlcyk7Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBF
X01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKLSAgICAg
ICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZh
bHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5z
aW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlO
QU5DRVRPQUxQSEE6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlO
QU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwot
ICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAg
ICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpw
aXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlw
ZSYgdHlwZSkKQEAgLTMzOSwxMCArMTE3LDkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKICAgICByZXR1
cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8
IGluZGVudCA8PCAiW2ZlQ29sb3JNYXRyaXgiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgdHlwZT1cIiIg
PDwgbV90eXBlIDw8ICJcIiI7CiAgICAgaWYgKCFtX3ZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgdHMgPDwgIiB2YWx1ZXM9XCIiOwpAQCAtMzU3LDkgKzEzNCw2IEBAIFRleHRTdHJlYW0mIEZF
Q29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJl
c2VudGF0aW9uCiAgICAgICAgIHRzIDw8ICJcIiI7CiAgICAgfQogICAgIHRzIDw8ICJdXG4iOwot
ICAgIAotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAyOWU0MWE4YWVkMWU0
ZjBiNTM5NzAzYWM0ZGI1NTI0ZWZhNGMxMjNmLi42ZDY1YmI1MzIxNjg2MTZkYzRmNWM3MzBmZGRh
ODg0ZDBmNTBjMThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNyArMzcs
NyBAQCBlbnVtIENvbG9yTWF0cml4VHlwZSB7CiAKIGNsYXNzIEZFQ29sb3JNYXRyaXggOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29sb3JNYXRyaXg+
IGNyZWF0ZShGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7CisgICAg
c3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8
ZmxvYXQ+JiYpOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KICAgICBib29sIHNldFR5cGUoQ29sb3JNYXRyaXhUeXBlKTsKQEAgLTQ2LDU0ICs0
NSwyMyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXM7IH0KICAgICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8Zmxv
YXQ+Jik7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25l
bnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Ci0gICAgc3RhdGljIGlubGluZSB2
b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0
IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxv
YXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVI
dWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAg
c3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+
JiB2YWx1ZXMpOwogCiBwcml2YXRlOgotICAgIEZFQ29sb3JNYXRyaXgoRmlsdGVyJiwgQ29sb3JN
YXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRy
aXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbG9yTWF0cml4IjsgfQogCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZp
bHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYs
IGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIG1fdHlwZTsKICAgICBWZWN0
b3I8ZmxvYXQ+IG1fdmFsdWVzOwogfTsKIAotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2Fs
Y3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkK
LXsKLSAgICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2YWx1ZSk7Ci0gICAgY29t
cG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMl0g
PSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzNdID0gKDAuMjEzIC0g
MC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s0XSA9ICgwLjcxNSArIDAuMjg1ICogdmFs
dWUpOwotICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBj
b21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s3
XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbOF0gPSAoMC4wNzIg
KyAwLjkyOCAqIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCi17
Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgZmxv
YXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgY29tcG9uZW50c1sw
XSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKLSAgICBjb21wb25l
bnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNv
bXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7Ci0g
ICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0
MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAq
IDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2lu
SHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMg
LSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAw
LjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1
ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXgp
Ci0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZm
ZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19FTkQoKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCA4NDdlYTU4ZjVm
OWIwMzg2NmQ5ZWFjNTdmMTBjY2Y1NzQwMmY5ZTYzLi43OTQxYjg5OTdlZDU5ZGFlOWFhYjRmYmZl
YWU2M2ZkNmJmOTY1MDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKQEAgLTQs
NiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxOCArMjUsMjAgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCiAK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5j
bHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0VmVjdG9yLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAgIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6
OkNvbXBvbmVudFRyYW5zZmVyKQorUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5j
dGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIocmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24sIGJs
dWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOworfQorCitGRUNvbXBvbmVudFRyYW5zZmVyOjpG
RUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1
bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBGaWx0ZXJFZmZlY3Qo
VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKICAgICAsIG1fcmVkRnVuY3Rpb24ocmVkRnVuY3Rp
b24pCiAgICAgLCBtX2dyZWVuRnVuY3Rpb24oZ3JlZW5GdW5jdGlvbikKICAgICAsIG1fYmx1ZUZ1
bmN0aW9uKGJsdWVGdW5jdGlvbikKQEAgLTQzLDExOSArNDYsMTUgQEAgRkVDb21wb25lbnRUcmFu
c2Zlcjo6RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXIKIHsKIH0KIAotUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
Z3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIoZmlsdGVyLCByZWRG
dW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7Ci19
Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3Vw
VGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKLXsKLX0KLQotdm9pZCBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1
ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCitG
aWx0ZXJSZXN1bHQqIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0
cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0
KSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNm
ZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6
ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAgICAgcmV0dXJuOyAgICAgICAgICAgIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91
YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBrID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0g
dGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWlu
KChrICsgMSksIChuIC0gMSkpXTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsg
KGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgw
LjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkp
OworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi12b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVz
OwotICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7Ci0gICAgaWYgKG4gPCAxKQot
ICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChp
ICogbikgLyAyNTUuMCk7Ci0gICAgICAgIGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7Ci0gICAgICAg
IGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVlc1trXTsKLSAgICAgICAgdmFsID0gc3RkOjpt
YXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91
dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAK
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUg
KiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4w
LCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0
cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEg
ZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBw
b3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAg
ICBMb29rdXBUYWJsZSByZWRUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBncmVlblRhYmxlOwotICAg
IExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlOwotICAg
IGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxw
aGFUYWJsZSk7Ci0KLSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVu
bXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxl
bmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRh
ID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVs
T2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBp
eGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtk
YXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVu
VGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCAr
IDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07Ci0gICAgICAgIGRhdGFbcGl4
ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsKLSAgICB9
Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29r
dXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYg
Ymx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVkVGFibGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlZFRhYmxlW2ldID0g
Z3JlZW5UYWJsZVtpXSA9IGJsdWVUYWJsZVtpXSA9IGFscGhhVGFibGVbaV0gPSBpOwotCi0gICAg
dXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsK
LSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAg
IC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRlRGlzY3Jl
dGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAg
Y29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVB
UgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfR0FNTUEKLSAgICB9OwotCi0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xF
TkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
c3RhdGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVO
R1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihz
dGF0aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdU
SChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3Rh
dGljX2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RI
KGNhbGxFZmZlY3QpKTsKLQotICAgIGNhbGxFZmZlY3RbbV9yZWRGdW5jdGlvbi50eXBlXShyZWRU
YWJsZSwgbV9yZWRGdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2dyZWVuRnVuY3Rpb24udHlw
ZV0oZ3JlZW5UYWJsZSwgbV9ncmVlbkZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fYmx1ZUZ1
bmN0aW9uLnR5cGVdKGJsdWVUYWJsZSwgbV9ibHVlRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3Rb
bV9hbHBoYUZ1bmN0aW9uLnR5cGVdKGFscGhhVGFibGUsIG1fYWxwaGFGdW5jdGlvbik7CisgICAg
cmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBi
b3VuZGFyeVNldCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBDb21wb25lbnRUcmFuc2ZlclR5cGUgdHlwZSkKQEAgLTIwOSwxMCArMTA4LDkgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGYKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0m
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W2ZlQ29tcG9uZW50VHJhbnNmZXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICJcbiI7CiAgICAgewogICAg
ICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgMik7CkBAIC0yMjEs
OSArMTE5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW4KICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJ7Ymx1ZTogIiA8PCBtX2JsdWVGdW5jdGlvbiA8PCAifVxuIjsKICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJ7YWxwaGE6ICIgPDwgbV9hbHBoYUZ1bmN0aW9uIDw8ICJ9XVxuIjsKICAgICB9
Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5w
dXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggMmI1
ODZkZWY3ZmI0MmEzN2IyZTEyM2VkYTg3MTE5YzRlYjM0OGE1MS4uN2QwMDY4NzIyMjBkOGIwNDcy
ZGIyNzJmMTliZTE2ODE2OTRmMjU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAg
LTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDkg
KzI0LDYgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVu
dW0gQ29tcG9uZW50VHJhbnNmZXJUeXBlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVi
bGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRy
YW5zZmVyPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
cmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBhbHBoYUZ1bmMpOworICAgIHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRl
KGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGFscGhhRnVuY3Rpb24pOwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRG
dW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuRnVu
Y3Rpb247IH0KQEAgLTYyLDI0ICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBhbHBoYUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1bmN0aW9u
OyB9CiAKIHByaXZhdGU6Ci0gICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBncmVlbkZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgYWxwaGFGdW5jKTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVDb21wb25l
bnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKTsKIAotICAgIHVzaW5nIExvb2t1cFRhYmxlID0g
c3RkOjphcnJheTx1aW50OF90LCAyNTY+OworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KIAotICAgIHN0YXRp
YyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUo
TG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3Rh
dGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxl
KExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0
YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0
JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRh
YmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9v
a3VwVGFibGUmIGFscGhhVGFibGUpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1
bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fcmVkRnVuY3Rpb247
CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX2dyZWVuRnVuY3Rpb247CkBAIC04OCw3
ICs3NiwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKLSAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3Qp
IHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhiNTllNjZkZTlmZThkNjM5MTZjYmU1Y2U2
ZGQ0MDM4ZmE0Y2IyYTguLjZjOTNjZmJlNzg5NDI2NmUwNmExNDkwOWRlZTM2ZjkwMzUyNjc5ZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjQsMTcgKzI1LDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05FT04uaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVk
ZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZp
bHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlwZSkKK1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21w
b3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9h
dCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVPcGVyYXRvciwgazEsIGsyLCBrMywgazQpKTsK
K30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAg
IDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29tcG9zaXRlKQorICAgICwgbV9jb21wb3NpdGVPcGVy
YXRvcihjb21wb3NpdGVPcGVyYXRvcikKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQog
ICAgICwgbV9rMyhrMykKQEAgLTQyLDI2NCArNDYsNjIgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9z
aXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBm
bG8KIHsKIH0KIAotUmVmPEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RUNvbXBvc2l0ZShmaWx0ZXIsIHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVD
b21wb3NpdGU6OnNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCitib29s
IEZFQ29tcG9zaXRlOjpzZXRDb21wb3NpdGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wZXJhdG9yKQogewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV9jb21wb3NpdGVPcGVyYXRvciwgY29tcG9zaXRlT3BlcmF0b3Ip
ICE9IG1fY29tcG9zaXRlT3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZs
b2F0IGsxKQogewotICAgIGlmIChtX2sxID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV9rMSA9IGsxOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdl
KG1fazEsIGsxKSAhPSBtX2sxOwogfQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMihmbG9hdCBr
MikKIHsKLSAgICBpZiAobV9rMiA9PSBrMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
azIgPSBrMjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2sy
LCBrMikgIT0gbV9rMjsKIH0KIAogYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzMoZmxvYXQgazMpCiB7
Ci0gICAgaWYgKG1fazMgPT0gazMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2szID0g
azM7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMywgazMp
ICE9IG1fazM7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogewotICAg
IGlmIChtX2s0ID09IGs0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rNCA9IGs0Owot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazQsIGs0KSAhPSBt
X2s0OwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KQorRmxvYXRSZWN0IEZFQ29tcG9zaXRlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBpZiAobV90eXBlICE9IEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZv
cmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci19Ci0gICAgCi1zdGF0aWMgdW5zaWduZWQg
Y2hhciBjbGFtcEJ5dGUoaW50IGMpCi17Ci0gICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKLSAgICB1bnNpZ25lZCB1YyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKLSAgICByZXR1cm4gYnVmZlshISh1YyAmIH4weGZm
KSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKLX0KLQotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0
Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVkIGNo
YXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVu
Z3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9h
dCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAgICAgIHNj
YWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRLNCA9IGs0
ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGky
ID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBp
MjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEg
KiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0Owot
Ci0gICAgICAgICpkZXN0aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOwotICAgICAgICArK3Nv
dXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLS8vIGNvbXB1dGVBcml0
aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0ZUFyaXRo
bWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwotLy8gaXMgbm90
IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6YXRpb25z
IHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgot
c3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFy
cmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAg
ICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAg
ICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRL
NCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBj
aGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsg
azMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsx
ICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxl
ZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IHJlc3VsdDsKLSAgICAgICAgKytzb3VyY2U7
Ci0gICAgICAgICsrZGVzdGluYXRpb247Ci0gICAgfQotfQotCi0jaWYgIUhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWdu
ZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJy
YXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewotICAg
IGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6Om1heCgwLjBmLCBr
MikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBrNDsKLSAgICBmbG9hdCBsb3dlckxpbWl0ID0gc3Rk
OjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjptaW4oMC4wZiwgazMp
ICsgazQ7Ci0gICAgaWYgKChrNCA+PSAwLjBmICYmIGs0IDw9IDEuMGYpICYmICh1cHBlckxpbWl0
ID49IDAuMGYgJiYgdXBwZXJMaW1pdCA8PSAxLjBmKSAmJiAobG93ZXJMaW1pdCA+PSAwLjBmICYm
IGxvd2VyTGltaXQgPD0gMS4wZikpIHsKLSAgICAgICAgaWYgKGs0KSB7Ci0gICAgICAgICAgICBp
ZiAoazEpCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8
MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywg
azQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzVW5jbGFtcGVkPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChr
MSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwxLCAw
Pihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHNVbmNsYW1wZWQ8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwg
azEsIGsyLCBrMywgazQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoazQpIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0
aWNQaXhlbHM8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEs
IGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRp
Y1BpeGVsczwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
b21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFy
cmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfQotfQotI2VuZGlmCisgICAgLy8gRm9y
IEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQg
b2YKKyAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBh
aW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KKyAgICBpZiAobV9jb21wb3NpdGVP
cGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiB8fCBtX2NvbXBvc2l0ZU9wZXJhdG9y
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1ApCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5j
bGlwVG9QcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzWzFdLT5kcmF3aW5nUmVjdCgpLCBwcmltaXRp
dmVTdWJyZWdpb24pOwogCi1pbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1l
dGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKLXsKLSAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOwotICAgIEFTU0VSVChsZW5n
dGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0aW5hdGlvbi5sZW5ndGgoKSkpOwotICAgIC8vIFRo
ZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkuCi0j
aWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIEFTU0VSVCghKGxlbmd0aCAmIDB4Mykp
OwotICAgIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24u
ZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSNlbHNlCi0gICAgYXJpdGhtZXRpY1Nv
ZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIs
IGszLCBrNCk7Ci0jZW5kaWYKLX0KKyAgICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0aGUg
Y29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKKyAgICAvLyBvcHRp
bWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0b3Ig
PT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICAgICAgcmV0dXJuIHByaW1p
dGl2ZVN1YnJlZ2lvbjsKIAotdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9JTjoKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAg
IC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0aGUg
cmVzdWx0IG9mCi0gICAgICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUg
YWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgotICAgICAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgxKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgotICAgICAgICAvLyBBcml0aG1l
dGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28g
d2UgY2FuJ3QKLSAgICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAg
ICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3Qo
KSkpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGFrZSB0aGUg
dW5pb24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgcmV0
dXJuIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoaW5wdXRzLCBnZW9tZXRyeSwgcHJpbWl0aXZl
U3VicmVnaW9uKTsKIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK0ZpbHRlclJlc3VsdCogRkVDb21wb3NpdGU6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBj
b25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgaWYgKG1fdHlwZSA9PSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICAgICAg
aWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICAg
ICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBp
eGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotCi0g
ICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0
aW5hdGlvblBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0g
ICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KTsKLQotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICBy
ZXR1cm47CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBz
dGFjay50YWtlTGFzdCgpOworICAgIAorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1
bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzd2l0
Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5
IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25S
ZWN0ID0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25S
ZWN0LmludGVyc2VjdChhYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0
aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBh
ZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRS
ZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRp
b25SZWN0IC0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50
UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJl
Y3QoKS5sb2NhdGlvbigpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJl
Y3Qoc291cmNlMlJlY3QpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJl
Y3Qoc291cmNlUmVjdCksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwg
aW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0
aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
VE9QOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIy
LCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwot
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KElu
dFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZUF0b3ApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX1hPUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkp
KTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVj
dChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJh
dG9yOjpYT1IpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X0xJR0hURVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwg
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJl
Y3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVy
YXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluLCBp
bjIgfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRkVDb21wb3NpdGVPcGVyYXRvciYgY29tcG9zaXRlT3BlcmF0b3IpCiB7Ci0gICAg
c3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRvcikgewogICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04i
OwogICAgICAgICBicmVhazsKQEAgLTMyOCwxOCArMTMwLDEzIEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBl
JiB0eXBlCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNvbXBvc2l0ZTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJl
cHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVDb21wb3NpdGU6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAog
ewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29tcG9zaXRlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAi
IG9wZXJhdGlvbj1cIiIgPDwgbV90eXBlIDw8ICJcIiI7Ci0gICAgaWYgKG1fdHlwZSA9PSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAgIHRzIDw8ICIgb3BlcmF0aW9uPVwiIiA8
PCBtX2NvbXBvc2l0ZU9wZXJhdG9yIDw8ICJcIiI7CisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0
b3IgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKICAgICAgICAgdHMgPDwgIiBr
MT1cIiIgPDwgbV9rMSA8PCAiXCIgazI9XCIiIDw8IG1fazIgPDwgIlwiIGszPVwiIiA8PCBtX2sz
IDw8ICJcIiBrND1cIiIgPDwgbV9rNCA8PCAiXCIiOwogICAgIHRzIDw8ICJdXG4iOwotCi0gICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0
KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5w
dXRFZmZlY3QoMSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1
OGUzYTM3YzMyYWUyZjc2YWVhMGMzLi44ZjdiNTUxZGM5NmQxZmQ3N2MzYjE5ODE3ZjZlMWZmNGQ2
YjEyNWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMywxMiArMjQsOSBAQAogCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5
cGUgeworZW51bSBGRUNvbXBvc2l0ZU9wZXJhdG9yIHsKICAgICBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9VTktOT1dOICAgID0gMCwgCiAgICAgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUiAgICAgICA9
IDEsCiAgICAgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU4gICAgICAgICA9IDIsCkBAIC00MSwxMCAr
MzksMTAgQEAgZW51bSBDb21wb3NpdGVPcGVyYXRpb25UeXBlIHsKIAogY2xhc3MgRkVDb21wb3Np
dGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29t
cG9zaXRlPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBj
cmVhdGUoRkVDb21wb3NpdGVPcGVyYXRvciwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywg
ZmxvYXQgazQpOwogCi0gICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRpb25UeXBlKTsKKyAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvcjsgfQorICAgIGJvb2wgc2V0Q29tcG9z
aXRlT3BlcmF0b3IoRkVDb21wb3NpdGVPcGVyYXRvcik7CiAKICAgICBmbG9hdCBrMSgpIGNvbnN0
IHsgcmV0dXJuIG1fazE7IH0KICAgICBib29sIHNldEsxKGZsb2F0KTsKQEAgLTU4LDMwICs1Niwy
MyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgazQoKSBjb25zdCB7IHJldHVybiBtX2s0OyB9CiAgICAg
Ym9vbCBzZXRLNChmbG9hdCk7CiAKLXByb3RlY3RlZDoKLSAgICBib29sIHJlcXVpcmVzVmFsaWRQ
cmVNdWx0aXBsaWVkUGl4ZWxzKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlICE9IEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KLQogcHJpdmF0ZToKLSAgICBGRUNvbXBvc2l0ZShG
aWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQpOworICAgIEZFQ29tcG9zaXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsx
LCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUiOyB9CiAKLSAgICB2b2lk
IGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZp
bHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29m
dHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7Cisg
ICAgYm9vbCBhcHBseUFyaXRobWV0aWNTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAg
ICBib29sIGFwcGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Owor
ICAgIAorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5T
SUNTKQotICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLSAgICBzdGF0aWMgaW5saW5lIHZv
aWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXJpdGht
ZXRpY05lb24oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxv
YXQgazQpOwotI2VuZGlmCi0KLSAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIG1fdHlwZTsKKyAg
ICBGRUNvbXBvc2l0ZU9wZXJhdG9yIG1fY29tcG9zaXRlT3BlcmF0b3I7CiAgICAgZmxvYXQgbV9r
MTsKICAgICBmbG9hdCBtX2syOwogICAgIGZsb2F0IG1fazM7CkBAIC04OSw0ICs4MCwzIEBAIHBy
aXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwCmluZGV4IDc1YjJlN2M2ZWExM2MyYzFjMmY4ZjY1ZDNkYjRlZDVjYzNhZmRhOGYuLjdl
OGQxZmVjMjE2YmIyMDFlOTQ3ZjcyNWNkODdiZjZkOTNmMTcxYjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVn
IDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE4ICsyNSwx
OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIK
IAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNs
dWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNv
bnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRT
aXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IElu
dFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBG
bG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5
cGU6OkNvbnZvbHZlTWF0cml4KQorUmVmPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRy
aXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1v
ZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBo
YSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoa2VybmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFy
Z2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwgcHJlc2VydmVBbHBoYSwga2Vy
bmVsTWF0cml4KSk7Cit9CisKK0ZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoY29u
c3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3Qg
SW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbnZv
bHZlTWF0cml4KQogICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAgICAgLCBtX2Rpdmlz
b3IoZGl2aXNvcikKICAgICAsIG1fYmlhcyhiaWFzKQpAQCAtNDksMTQgKzUxLDYgQEAgRkVDb252
b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6
ZSYga2VybmVsU2l6ZSwKICAgICBBU1NFUlQobV9rZXJuZWxTaXplLmhlaWdodCgpID4gMCk7CiB9
CiAKLVJlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwg
ZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJl
c2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoZmlsdGVyLCBrZXJuZWxTaXplLCBk
aXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAot
ICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKLX0KLQogdm9pZCBGRUNvbnZv
bHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUpCiB7CiAg
ICAgQVNTRVJUKGtlcm5lbFNpemUud2lkdGgoKSA+IDApOwpAQCAtMTIwLDMxOCArMTE0LDIwIEBA
IGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxw
aGEpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgICAgQ29udm9sdmVNYXRyaXggaW1wbGVtZW50YXRpb24KLSAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIFRoZSBpbWFnZSByZWN0YW5n
bGUgaXMgc3BsaXQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLSAgICAgICstLS0tLS0tLS0tLS0t
LS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEEgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8Ci0gICAgICB8IEIg
fCAgICAgIEMgICAgICB8IEQgfAotICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKLSAgICAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEUgICAgICAgICAgfAot
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgV2hlcmUgcmVnaW9uIEMgY29udGFp
bnMgdGhvc2UgcGl4ZWxzLCB3aG9zZSB2YWx1ZXMKLSAgIGNhbiBiZSBjYWxjdWxhdGVkIHdpdGhv
dXQgY3Jvc3NpbmcgdGhlIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZS4KLQotICAgRXhhbXBsZToKLSAg
ICAgIEltYWdlIHNpemU6IHdpZHRoOiAxMCwgaGVpZ2h0OiAxMAotCi0gICAgICBPcmRlciAoa2Vy
bmVsIG1hdHJpeCBzaXplKTogd2lkdGg6IDMsIGhlaWdodCA0Ci0gICAgICBUYXJnZXQ6IHg6MSwg
eTozCi0KLSAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSB0YXJnZXQgaW5zaWRl
IHRoZSBrZXJuZWwgbWF0cml4OgotCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAg
Li4uCi0gICAgICAgIC5YLgotCi0gICBUaGUgcmVnaW9ucyBpbiB0aGlzIGNhc2UgYXJlIHRoZSBm
b2xsb3dpbmc6Ci0gICAgICBOb3RlOiAoeDEsIHkxKSB0b3AtbGVmdCBhbmQgKHgyLCB5MikgaXMg
dGhlIGJvdHRvbS1yaWdodCBjb3JuZXIKLSAgICAgIE5vdGU6IHJvdyB4MiBhbmQgY29sdW1uIHky
IGlzIG5vdCBwYXJ0IG9mIHRoZSByZWdpb24KLSAgICAgICAgICAgIG9ubHkgdGhvc2UgKHgsIHkp
IHBpeGVscywgd2hlcmUgeDEgPD0geCA8IHgyIGFuZCB5MSA8PSB5IDwgeTIKLQotICAgICAgUmVn
aW9uIEE6IHgxOiAwLCB5MTogMCwgeDI6IDEwLCB5MjogMwotICAgICAgUmVnaW9uIEI6IHgxOiAw
LCB5MTogMywgeDI6IDEsIHkyOiAxMAotICAgICAgUmVnaW9uIEM6IHgxOiAxLCB5MTogMywgeDI6
IDksIHkyOiAxMAotICAgICAgUmVnaW9uIEQ6IHgxOiA5LCB5MTogMywgeDI6IDEwLCB5MjogMTAK
LSAgICAgIFJlZ2lvbiBFOiB4MTogMCwgeTE6IDEwLCB4MjogMTAsIHkyOiAxMCAoZW1wdHkgcmVn
aW9uKQotCi0gICBTaW5jZSByZWdpb24gQyAob2Z0ZW4pIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIHBp
eGVscywgd2UgaW1wbGVtZW50ZWQKLSAgIGEgZmFzdCBhbGdvcml0bSB0byBjYWxjdWxhdGUgdGhl
c2UgdmFsdWVzLCBjYWxsZWQgZmFzdFNldEludGVyaW9yUGl4ZWxzLgotICAgRm9yIG90aGVyIHJl
Z2lvbnMsIGZhc3RTZXRPdXRlclBpeGVscyBpcyB1c2VkLCB3aGljaCBjYWxscyBnZXRQaXhlbFZh
bHVlLAotICAgdG8gaGFuZGxlIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBpbWFnZS4gSW4gYSByYXJl
IHNpdHVhdGlvbnMsIHdoZW4KLSAgIGtlcm5lbCBtYXRyaXggaXMgYmlnZ2VyIHRoYW4gdGhlIGlt
YWdlLCBhbGwgcGl4ZWxzIGFyZSBjYWxjdWxhdGVkIGJ5IHRoaXMKLSAgIGZ1bmN0aW9uLgotCi0g
ICBBbHRob3VnaCB0aGVzZSB0d28gZnVuY3Rpb25zIGhhdmUgbG90IGluIGNvbW1vbiwgSSBkZWNp
ZGVkIG5vdCB0byBtYWtlCi0gICBjb21tb24gYSB0ZW1wbGF0ZSBmb3IgdGhlbSwgc2luY2UgdGhl
cmUgYXJlIGtleSBkaWZmZXJlbmNlcyBhcyB3ZWxsLAotICAgYW5kIHdvdWxkIG1ha2UgaXQgcmVh
bGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4KLSovCi0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2ln
bmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtYXgg
PSAyNTUpCitGbG9hdFJlY3QgRkVDb252b2x2ZU1hdHJpeDo6ZHJhd2luZ1JlY3QoY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBpZiAoY2hhbm5lbCA8PSAwKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCi0gICAgICAgIHJldHVybiBt
YXg7Ci0gICAgcmV0dXJuIGNoYW5uZWw7CisgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsK
IH0KIAotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2
b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQ
aXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCog
dG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzKQorRmlsdGVyUmVzdWx0KiBGRUNvbnZv
bHZlTWF0cml4OjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNv
bnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICB1bnNpZ25l
ZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZh
bHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgY2xhbXBSR0JBVmFsdWUo
dG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7Ci0KLSAgICBpZiAocHJlc2Vy
dmVBbHBoYVZhbHVlcykgewotICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCwgc291cmNlUGl4
ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAgICAgKytwaXhlbDsKLSAgICB9IGVsc2UKLSAgICAgICAg
ZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwotfQotCi0jaWYgQ09NUElMRVIoTVNW
QykKLS8vIEluY29ycmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRlIG9mIHN0YWNrIGluIHx0b3Rh
bHN8IGR1ZSB0byB8cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkK
LSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlmCi0KLS8vIE9ubHkgZm9yIHJl
Z2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5F
IHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFy
dCwgaW50IHlFbmQpCi17Ci0gICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBw
aXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRh
LndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAgaW50IGtlcm5lbEluY3JlYXNl
ID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53aWR0
aCgpIC0gMSkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVu
dHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsK
LQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7Ci0KLSAgICAvLyBTa2lwIHRo
ZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKLSAgICBwaXhlbCArPSAoY2xpcEJv
dHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwotICAgIGlu
dCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAo
Y2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQotICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+IHlT
dGFydDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsg
LS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtl
cm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7
CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtl
TGFzdCgpOwogCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAgdG90YWxz
WzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBpZiAoIXBy
ZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKyAgICBp
ZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkg
ewotICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4
W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxB
cnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAg
ICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVs
VmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0
ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZh
bHVlcykKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJu
ZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5l
bFBpeGVsOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAg
aWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsICs9IGtlcm5l
bEluY3JlYXNlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0
aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0
RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4ocGFpbnRpbmdEYXRhLnNyY1Bp
eGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rp
dmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKLSAgICAgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwg
Kz0gNDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0
YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSBp
bnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgaW50IHgsIGludCB5KQotewotICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0
YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJl
dHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKG1f
ZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9OT05FCi0gICAgICAgIHJldHVy
biAtMTsKLSAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKLSAgICAgICAgaWYgKHggPCAwKQot
ICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHggPj0gcGFpbnRpbmdEYXRhLndp
ZHRoKQotICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7Ci0gICAgICAgIGlm
ICh5IDwgMCkKLSAgICAgICAgICAgIHkgPSAwOwotICAgICAgICBlbHNlIGlmICh5ID49IHBhaW50
aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgICAgICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIDE7
Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAg
Y2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAgICB3aGlsZSAoeCA8IDApCi0gICAgICAgICAgICB4
ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICAgICAgeCAlPSBwYWludGluZ0RhdGEud2lkdGg7
Ci0gICAgICAgIHdoaWxlICh5IDwgMCkKLSAgICAgICAgICAgIHkgKz0gcGFpbnRpbmdEYXRhLmhl
aWdodDsKLSAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0OwotICAgICAgICByZXR1cm4g
KHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAgIH0KLX0KLQotLy8gRm9yIG90
aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci12
b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIGludCBw
aXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAqIDQ7Ci0gICAgaW50IGhlaWdo
dCA9IHkyIC0geTE7Ci0gICAgaW50IHdpZHRoID0geDIgLSB4MTsKLSAgICBpbnQgYmVnaW5LZXJu
ZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQ
aXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5
MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsKLSAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0
YS53aWR0aCAtIHdpZHRoKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkg
Y29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAw
IDogMSldOwotCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9kaXZpc29yKTsKLQotICAgIGZv
ciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHdp
ZHRoOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4
ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0g
c3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUu
d2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFs
c1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFw
cmVzZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7Ci0KLSAg
ICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaW50
IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBr
ZXJuZWxQaXhlbFkpOwotICAgICAgICAgICAgICAgIGlmIChwaXhlbEluZGV4ID49IDApIHsKLSAg
ICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMSkpOwotICAg
ICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtr
ZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXkuaXRlbShwaXhlbEluZGV4ICsgMikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQotICAgICAg
ICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJu
ZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXku
aXRlbShwaXhlbEluZGV4ICsgMykpOwotICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwot
ICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdp
ZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4
ZWxYOwotICAgICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAg
ICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZl
QWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0
UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcyk7
Ci0gICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICB9Ci0gICAgICAgIHBp
eGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5l
bFBpeGVsWDsKLSAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsKLSAgICB9Ci19Ci0KLSNpZiBD
T01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8gRGlzYWJsZSBvZiA0Nzg5Ci0j
ZW5kaWYKLQotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9y
UGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xp
cEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8gTXVzdCBiZSBpbXBsZW1l
bnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdBWVNfSU5MSU5FCi0gICAgLy8g
ZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291cmNlIGZpbGUgYXMgd2VsbAot
ICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczx0
cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsK
LSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczxmYWxzZT4ocGFpbnRpbmdE
YXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIC8v
IEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRvIHRoZSBoZWFkZXIsIGl0IGlz
IGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldEludGVyaW9yUGl4ZWxzIGlzIGFs
c28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZh
c3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKLSAg
ICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCB4
MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0K
LSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0KLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7Ci0gICAgaWYgKG1f
cHJlc2VydmVBbHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQo
ZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFzb3Vy
Y2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9
IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIo
KS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7Ci0g
ICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXks
Ci0gICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAotICAgICAgICBwYWludFNpemUuaGVpZ2h0KCks
Ci0gICAgICAgIG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9ybWFsaXplZEZsb2F0cyhtX2tlcm5l
bE1hdHJpeCkKLSAgICB9OwotCi0gICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwot
ICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0
aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxT
aXplLmhlaWdodCgpOwotCi0gICAgaWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDAp
IHsKLSAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAot
ICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0
aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIGFic29s
dXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbikgewotICAg
ICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlvbnM7Ci0gICAgICAgIGludCBj
aHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAvIHN0cmlkZTsKLQotICAgICAg
ICBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShjaHVua0NvdW50LCBbJl0oc2l6ZV90IGluZGV4
KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAqIGluZGV4KTsKLSAgICAgICAg
ICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAoaW5kZXggKyAxKSwgY2xpcEJv
dHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xp
cFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAgICAgICB9KTsKLSAgICB9IGVs
c2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNs
aXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zm
c2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwot
ICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkp
OwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBzZXRP
dXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgp
LCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQot
ICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0Lnko
KSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAgICBpZiAoY2xpcFJpZ2h0IDwg
cGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwg
Y2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90
dG9tKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwg
Z2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkKQEAgLTQ1MywxMCAr
MTQ5LDkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZF
Q29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29u
dm9sdmVNYXRyaXgiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgb3JkZXI9XCIiIDw8IG1fa2VybmVsU2l6
ZSA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxNYXRyaXg9XCIiIDw8IG1fa2VybmVsTWF0cml4
ICA8PCAiXCIgIgogICAgICAgIDw8ICJkaXZpc29yPVwiIiA8PCBtX2Rpdmlzb3IgPDwgIlwiICIK
QEAgLTQ2NSw5ICsxNjAsNiBAQCBUZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdAogICAgICAgIDw8ICJl
ZGdlTW9kZT1cIiIgPDwgbV9lZGdlTW9kZSA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxVbml0
TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGggPDwgIlwiICIKICAgICAgICA8PCAicHJl
c2VydmVBbHBoYT1cIiIgPDwgbV9wcmVzZXJ2ZUFscGhhIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4g
dHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKaW5kZXggNjdkNGM2NTY3ZmNlNmIyN2VlNWFi
ODk1YTZlMWU1MDA1NGUxM2RiYS4uZWI5MTQ4MDNiMjVmMTdlZDFjODIyNjViY2ViNTVmYWJlOWNk
YzdmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTI0LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDkgKzM4LDcgQEAgZW51bSBFZGdl
TW9kZVR5cGUgewogCiBjbGFzcyBGRUNvbnZvbHZlTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoRmls
dGVyJiwgY29uc3QgSW50U2l6ZSYsCi0gICAgICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IElu
dFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwKLSAgICAgICAgICAgIGJv
b2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAgICBzdGF0aWMgUmVmPEZFQ29udm9sdmVNYXRy
aXg+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0
IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAogICAgIEludFNpemUga2VybmVsU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsU2l6ZTsgfQogICAgIHZvaWQgc2V0S2VybmVsU2l6ZShj
b25zdCBJbnRTaXplJik7CkBAIC02Nyw0MSArNjUsMTcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0
UHJlc2VydmVBbHBoYShib29sKTsKIAogcHJpdmF0ZToKLQotICAgIHN0cnVjdCBQYWludGluZ0Rh
dGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKLSAg
ICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0
aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgZmxvYXQgYmlhczsKLSAgICAgICAgVmVj
dG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7Ci0gICAgfTsKLQotICAgIEZFQ29udm9sdmVNYXRyaXgo
RmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBmbG9hdCwKLSAgICAgICAgICAgIGNvbnN0
IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwgYm9vbCwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYpOworICAgIEZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2Vy
bmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdl
dE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3Ro
LCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7
CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
Q29udm9sdmVNYXRyaXgiOyB9CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVm
ZmVjdFJlY3QoKSkpOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJy
aWRlOwotCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxv
YXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4K
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0
YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7
CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEFMV0FZ
U19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsK
KyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0
cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTQsNCArODgsMyBAQCBwcml2YXRlOgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3Bw
CmluZGV4IGVlYjE3MjhkYjM1ZThhYzMwMmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLmEzOWRkZGFk
NDZmMzk5MWNhOWJiMjFiZTFlMjNmZmJmNzA2MGNhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI3LDM2ICsyOCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVzZUxp
Z2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNl
TGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAw
LCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRT
b3VyY2UpLCBUeXBlOjpEaWZmdXNlTGlnaHRpbmcpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZF
RGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2Nh
bGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlKQorRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VT
Y2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRpbmcoZmlsdGVyLCBsaWdodGlu
Z0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgs
IGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRURpZmZ1
c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCi1ib29sIEZFRGlm
ZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50KQot
ewotICAgIGlmIChtX2RpZmZ1c2VDb25zdGFudCA9PSBkaWZmdXNlQ29uc3RhbnQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX2RpZmZ1c2VDb25zdGFudCA9IGRpZmZ1c2VDb25zdGFudDsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSBy
ZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFRGlmZnVzZUxpZ2h0aW5nOjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZURpZmZ1c2VMaWdodGluZyI7Ci0gICAg
RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
CiAgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAi
CiAgICAgICAgPDwgImRpZmZ1c2VDb25zdGFudD1cIiIgPDwgbV9kaWZmdXNlQ29uc3RhbnQgPDwg
IlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVu
Z3RoWCA8PCAiLCAiIDw8IG1fa2VybmVsVW5pdExlbmd0aFkgPDwgIlwiXVxuIjsKLQotICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgw
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVy
biB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCmluZGV4IGRmNjExNGQwZmI4ZTJmM2Ux
MTI4Yjg0MjYxNWU0NzUxM2EwZGRkYzMuLjk2MDA2MjA0OWEyMmZlNWE4NWNiZmViYjM0OWVjZjFh
YmQ0MTc5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjEgKzI2LDE2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTGlnaHRTb3VyY2U7Ci0KIGNsYXNzIEZFRGlmZnVzZUxp
Z2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVE
aWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFRGlm
ZnVzZUxpZ2h0aW5nKCk7Ci0KLSAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdCB7IHJl
dHVybiBtX2RpZmZ1c2VDb25zdGFudDsgfQotICAgIGJvb2wgc2V0RGlmZnVzZUNvbnN0YW50KGZs
b2F0KTsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0
YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1
cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKIHByaXZh
dGU6Ci0gICAgRkVEaWZmdXNlTGlnaHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAgICBGRURpZmZ1c2VM
aWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNv
bnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgCisgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJGRURpZmZ1c2VMaWdodGluZyI7IH0KKworICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggMDQ3NDkzMzkyYmIy
ODE0NmQ4YjE2OWJhMGE3YzMyYjE2YzU2M2ZhMS4uMjQ0ZWY4NTJjNWVhOWZkY2ZhMDQ5ZWZiODhl
M2I3YzcyMTY2YzBiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTQsNiArNCw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDEzMiArMjUsNjQgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgogCi0jaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4
ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKEZpbHRl
ciYgZmlsdGVyLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCi0gICAgOiBGaWx0ZXJF
ZmZlY3QoZmlsdGVyLCBUeXBlOjpEaXNwbGFjZW1lbnRNYXApCi0gICAgLCBtX3hDaGFubmVsU2Vs
ZWN0b3IoeENoYW5uZWxTZWxlY3RvcikKLSAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5l
bFNlbGVjdG9yKQotICAgICwgbV9zY2FsZShzY2FsZSkKK1JlZjxGRURpc3BsYWNlbWVudE1hcD4g
RkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2Vs
ZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUp
CiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxT
ZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0KIAotUmVmPEZFRGlzcGxhY2Vt
ZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBDaGFubmVs
U2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5
Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKK0ZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3Bs
YWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoVHlwZTo6RkVEaXNwbGFjZW1lbnRNYXApCisgICAgLCBtX3hDaGFubmVsU2VsZWN0b3Io
eENoYW5uZWxTZWxlY3RvcikKKyAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVj
dG9yKQorICAgICwgbV9zY2FsZShzY2FsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RURpc3BsYWNlbWVudE1hcChmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0
b3IsIHNjYWxlKSk7CiB9CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFubmVsU2Vs
ZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKQogewotICAg
IGlmIChtX3hDaGFubmVsU2VsZWN0b3IgPT0geENoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1feENoYW5uZWxTZWxlY3RvciA9IHhDaGFubmVsU2VsZWN0b3I7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV94Q2hhbm5lbFNlbGVj
dG9yLCB4Q2hhbm5lbFNlbGVjdG9yKSAhPSBtX3hDaGFubmVsU2VsZWN0b3I7CiB9CiAKIGJvb2wg
RkVEaXNwbGFjZW1lbnRNYXA6OnNldFlDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKQogewotICAgIGlmIChtX3lDaGFubmVsU2VsZWN0b3Ig
PT0geUNoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1feUNoYW5u
ZWxTZWxlY3RvciA9IHlDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV95Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yKSAh
PSBtX3lDaGFubmVsU2VsZWN0b3I7CiB9CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNj
YWxlKGZsb2F0IHNjYWxlKQogewotICAgIGlmIChtX3NjYWxlID09IHNjYWxlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9zY2FsZSA9IHNjYWxlOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2NhbGUsIHNjYWxlKSAhPSBtX3NjYWxlOwogfQogCi12
b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYpCitjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2Vt
ZW50TWFwOjpyZXN1bHRDb2xvclNwYWNlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
KSBjb25zdAogewogICAgIC8vIFNwZWM6IFRoZSAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJz
JyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgdG8gdGhlICdpbjInIHNvdXJjZSBpbWFnZQogICAgIC8v
IGFuZCBkb2VzIG5vdCBhcHBseSB0byB0aGUgJ2luJyBzb3VyY2UgaW1hZ2UuIFRoZSAnaW4nIHNv
dXJjZSBpbWFnZSBtdXN0IHJlbWFpbiBpbiBpdHMKICAgICAvLyBjdXJyZW50IGNvbG9yIHNwYWNl
LgogICAgIC8vIFRoZSByZXN1bHQgaXMgaW4gdGhhdCBzbWFlIGNvbG9yIHNwYWNlIGJlY2F1c2Ug
aXQgaXMgYSBkaXNwbGFjZW1lbnQgb2YgdGhlICdpbicgaW1hZ2UuCi0gICAgRmlsdGVyRWZmZWN0
OjpzZXRSZXN1bHRDb2xvclNwYWNlKGlucHV0RWZmZWN0KDApLT5yZXN1bHRDb2xvclNwYWNlKCkp
OworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIHJldHVybiBpbnB1dHNbMF0t
PmNvbG9yU3BhY2UoKTsKIH0KIAotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCitGbG9hdFJl
Y3QgRkVEaXNwbGFjZW1lbnRNYXA6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0CiB7Ci0gICAgLy8gRG8gbm90IHRyYW5zZm9ybSB0aGUgZmlyc3QgcHJpbWl0
aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYgKGluZGV4KQotICAgICAgICBpbi0+
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIHJl
dHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0
ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMp
CitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXJPdXRwdXQmIG91
dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNl
dCkgY29uc3QKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKLSAgICBy
ZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7Ci19Ci0KLXZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZl
Y3QoMSk7Ci0KLSAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9X
Tik7Ci0gICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwot
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAg
ICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKLQotICAgIEludFJl
Y3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2lu
ZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9u
LXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgotICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2Ug
PSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOwotICAgIAotICAg
IGlmICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFnZS0+
bGVuZ3RoKCkpOwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50
U2l6ZS5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGUg
PSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsK
LSAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKLSAgICBm
bG9hdCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQg
c2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7Ci0gICAgZmxvYXQgc2Nh
bGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxlLmhlaWdodCgpICogMC41OworICAgIGF1dG8gaW4gPSBz
dGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKICAgICAK
LSAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7Ci0gICAgaW50
IGRpc3BsYWNlbWVudENoYW5uZWxZID0geUNoYW5uZWxJbmRleCgpOwotCi0gICAgaW50IHJvd0J5
dGVzID0gcGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1
dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IHBhaW50U2l6ZS5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAg
IGludCBsaW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7Ci0KLSAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBpbnQgZGVz
dGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0OwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JY
ICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVu
dENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsg
c3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVt
KGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZ
KTsKLQotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9uUGl4ZWxQdHIgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSArIGRlc3Rp
bmF0aW9uSW5kZXgpOwotICAgICAgICAgICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gcGFpbnRT
aXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWludFNpemUuaGVpZ2h0KCkpIHsK
LSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9IDA7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpkZXN0aW5hdGlvblBp
eGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5kYXRhKCkg
KyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOwotICAgICAgICB9Ci0g
ICAgfQorICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiwgaW4yIH0sIG51bGxw
dHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQpA
QCAtMTc0LDE3ICsxMDcsMTIgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRz
OwogfQogCi1UZXh0U3RyZWFtJiBGRURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBj
b25zdAorVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlRGlzcGxhY2VtZW50TWFwIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHNj
YWxlPVwiIiA8PCBtX3NjYWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInhDaGFubmVsU2VsZWN0b3I9
XCIiIDw8IG1feENoYW5uZWxTZWxlY3RvciA8PCAiXCIgIgogICAgICAgIDw8ICJ5Q2hhbm5lbFNl
bGVjdG9yPVwiIiA8PCBtX3lDaGFubmVsU2VsZWN0b3IgPDwgIlwiXVxuIjsKLQotICAgIFRleHRT
dHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZm
ZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAg
cmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggZGQ3MzJhODgxMDcz
ZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uYzY1NTQ3ZjEyOGZkYWQwMmFiZDZlOTUzNjY5
YTJjMDIxZWY1MTMzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtMiw2ICsyLDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTM3LDcgKzM2LDcgQEAgZW51bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKIAogY2xhc3Mg
RkVEaXNwbGFjZW1lbnRNYXAgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoRmlsdGVyJiwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IsIGZsb2F0IHNjYWxlKTsKKyAgICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBj
cmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKIAogICAgIENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxl
Y3RvcjsgfQogICAgIGJvb2wgc2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0
b3JUeXBlKTsKQEAgLTQ4LDIyICs0NywyMyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBj
b25zdCB7IHJldHVybiBtX3NjYWxlOyB9CiAgICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7CiAKLSAg
ICB2b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVj
dCosIGNvbnN0IGludCkgb3ZlcnJpZGU7Ci0KIHByaXZhdGU6Ci0gICAgRkVEaXNwbGFjZW1lbnRN
YXAoRmlsdGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVs
U2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKKyAgICBGRURpc3BsYWNlbWVu
dE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3Rv
clR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOworCisgICAgaW50IHhDaGFubmVs
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50
IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9
CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
RGlzcGxhY2VtZW50TWFwIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBv
dmVycmlkZTsKKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3Bh
Y2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZs
b2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAgICBGaWx0ZXJSZXN1bHQqIGFw
cGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFy
eVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3hDaGFu
bmVsU2VsZWN0b3I7CiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3lDaGFubmVsU2VsZWN0b3I7
CkBAIC03MSw0ICs3MSwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCA1Y2U3YmUzYTQ3MWI0N2I4ZGQ1NDI2ZDk2NWJiZmU3
ODlmNmJiZGQ4Li45ZDI1ZWJmZTJmNjViNjgzM2MwMjgwODJmOTVkNjhmMDQyYzg4ZWY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIzLDE2ICsyNCwxOCBAQAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXph
dGlvbi5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
ICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAg
ICAKLUZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRY
LCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xv
ciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6
OkRyb3BTaGFkb3cpCisKK1JlZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZs
b2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNo
YWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dP
cGFjaXR5KSk7Cit9CisKK0ZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZs
b2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBm
bG9hdCBzaGFkb3dPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFRHJvcFNoYWRv
dykKICAgICAsIG1fc3RkWChzdGRYKQogICAgICwgbV9zdGRZKHN0ZFkpCiAgICAgLCBtX2R4KGR4
KQpAQCAtNDIsMTAwICs0NSw1MSBAQCBGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhGaWx0ZXIm
IGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsbwogewogfQogCi1S
ZWY8RkVEcm9wU2hhZG93PiBGRURyb3BTaGFkb3c6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxv
YXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hh
ZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCitJbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6
b3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93
KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgsIGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkp
OworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRz
ZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgc3RkOjpt
YXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpIC0gbV9keSksCisgICAgICAgIHN0ZDo6bWF4
PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsgbV9keCksCisgICAgICAgIHN0ZDo6bWF4PGlu
dD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIG1fZHkpLAorICAgICAgICBzdGQ6Om1heDxpbnQ+
KDAsIG91dHNldFNpemUud2lkdGgoKSAtIG1fZHgpCisgICAgfTsKIH0KIAotdm9pZCBGRURyb3BT
aGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zsb2F0UmVjdCBGRURyb3BTaGFk
b3c6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAg
ICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQ
YWludFJlY3QoKTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QoYWJzb2x1
dGVQYWludFJlY3QpOwotICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIGFic29sdXRlUGFp
bnRSZWN0LnVuaXRlKGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KTsKLQotICAgIEludFNpemUga2Vy
bmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBt
X3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBh
dXRvIGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwogCisgICAgZHJhd2lu
Z1JlY3QubW92ZShnZW9tZXRyeS5yZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyh7IG1fZHgsIG1f
ZHkgfSkpOworICAgIAorICAgIGRyYXdpbmdSZWN0LnVuaXRlKGlucHV0c1swXS0+ZHJhd2luZ1Jl
Y3QoKSk7CisgICAgCisgICAgSW50U2l6ZSBrZXJuZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNh
bGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICAKICAgICAvLyBXZSB0
YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNh
dXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5p
bmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWlu
dFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKLQotICAgIGlm
IChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdCht
YXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5p
dGUobWF4RWZmZWN0UmVjdCgpKTsKKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgzICoga2VybmVs
U2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVkoMyAqIGtlcm5l
bFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xp
cFRvUHJpbWl0aXZlU3VicmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwog
fQogCi12b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJl
c3VsdCogRkVEcm9wU2hhZG93OjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgQVNTRVJUKCFzdGFjay5p
c0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRo
aXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRl
ci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBibHVy
UmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0
ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7CisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2lu
Z1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgRmxvYXRS
ZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRyYXdpbmdSZWdpb24pOwotICAgIGRyYXdpbmdS
ZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKLQotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghc291cmNlSW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgcmVzdWx0Q29udGV4dCA9IHJl
c3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRv
d09wYWNpdHkpOwotICAgIHJlc3VsdENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFn
ZSwgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEo
MSk7Ci0KLSAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBt
X3NoYWRvd0NvbG9yKTsKLQotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0
Q29sb3JTcGFjZSgpIH07Ci0gICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3Vs
dEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1h
Z2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7Ci0gICAgaWYgKCFwaXhlbEJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHBp
eGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzb3Vy
Y2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwgNCAqIHBpeGVsQnVmZmVy
LT5zaXplKCkud2lkdGgoKSk7Ci0gICAgCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVy
KCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7Ci0KLSAgICByZXN1bHRDb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwotICAgIHJlc3VsdENv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKLSAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKLQotICAgIHJl
c3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2lu
Z1JlZ2lvbik7Ci19Ci0KLUludE91dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKCkgY29uc3QK
LXsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0
c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIHJldHVybiB7Ci0gICAgICAgIHN0ZDo6
bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG1fZHkpLAotICAgICAgICBzdGQ6Om1h
eDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSArIG1fZHgpLAotICAgICAgICBzdGQ6Om1heDxp
bnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgKyBtX2R5KSwKLSAgICAgICAgc3RkOjptYXg8aW50
PigwLCBvdXRzZXRTaXplLndpZHRoKCkgLSBtX2R4KQotICAgIH07CisgICAgcmV0dXJuIGFwcGx5
UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7
CiB9CiAKLVRleHRTdHJlYW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAor
VGV4dFN0cmVhbSYgRkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAg
ICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNoYWRvdyI7CiAgICAgRmlsdGVyRWZmZWN0OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdGRE
ZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIiIDw8
IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgc2Vy
aWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxvb2Qt
b3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5IDw8ICJdXG4iOwotCi0gICAgVGV4dFN0cmVh
bTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwog
fQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggYjRlMGEyMDEyZmVkYjdiNzdiZjNlMDU3MzRlZTg4
YTI5ZWZmMzg0Yy4uNGY4NWEzOTdlNWM4YTgyM2E3NjZiYjBlYzBhYWJhM2MyYTQ1MWIyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIwLDE0ICsyMSwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJD
b2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRURyb3BTaGFkb3cgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3Jl
YXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYsIGZs
b2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3JlYXRlKGZsb2F0IHN0ZFgsIGZs
b2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5
KTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0K
ICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQgc3RkWCkgeyBtX3N0ZFggPSBzdGRYOyB9
CkBAIC00MSwyNCArNDEsMjYgQEAgcHVibGljOgogICAgIGZsb2F0IGR5KCkgY29uc3QgeyByZXR1
cm4gbV9keTsgfQogICAgIHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9keSA9IGR5OyB9CiAKLSAg
ICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd0NvbG9y
OyB9IAorICAgIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hh
ZG93Q29sb3I7IH0KICAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0IENvbG9yJiBzaGFkb3dD
b2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7IH0KIAogICAgIGZsb2F0IHNoYWRv
d09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd09wYWNpdHk7IH0KICAgICB2b2lkIHNl
dFNoYWRvd09wYWNpdHkoZmxvYXQgc2hhZG93T3BhY2l0eSkgeyBtX3NoYWRvd09wYWNpdHkgPSBz
aGFkb3dPcGFjaXR5OyB9CiAKIHByaXZhdGU6Ci0gICAgRkVEcm9wU2hhZG93KEZpbHRlciYsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBGRURy
b3BTaGFkb3coZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25z
dCBDb2xvciYsIGZsb2F0IG9wYWNpdHkpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRURyb3BTaGFkb3ciOyB9CiAKLSAgICB2b2lkIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEludE91dHNldHMgb3V0c2V0cygpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRPdXRzZXRzIG91dHNldHMo
KSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYs
IEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29u
c3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9v
bCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgZmxvYXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKQEAgLTY5LDQgKzcx
LDMgQEAgcHJpdmF0ZToKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3Bw
CmluZGV4IGI0MjM1NTM0YzM4YjFlYmEyMTFlZTg0ODYxNzk5MjM4MGYzYjZiMDEuLjUxOGNlZjYz
Y2E3MTBiMTUxZDdhNGM3NGJhMWQyYmYxZTgyNWExOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcApAQCAtMyw2ICszLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNCwyMiArMjUsMjAgQEAKICNpbmNsdWRlICJGRUZsb29kLmgiCiAKICNp
bmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVGbG9vZDo6RkVGbG9vZChGaWx0ZXImIGZpbHRl
ciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkZsb29kKQotICAgICwgbV9mbG9vZENvbG9yKGZsb29k
Q29sb3IpCi0gICAgLCBtX2Zsb29kT3BhY2l0eShmbG9vZE9wYWNpdHkpCitSZWY8RkVGbG9vZD4g
RkVGbG9vZDo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKIHsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29kKGNvbG9yLCBvcGFjaXR5KSk7CiB9CiAKLVJl
ZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBm
bG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCitGRUZsb29kOjpGRUZsb29kKGNvbnN0IENv
bG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCisgICAgOiBGaWx0ZXJFZmZlY3Qo
VHlwZTo6RkVGbG9vZCkKKyAgICAsIG1fZmxvb2RDb2xvcihmbG9vZENvbG9yKQorICAgICwgbV9m
bG9vZE9wYWNpdHkoZmxvb2RPcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
Rmxvb2QoZmlsdGVyLCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKIH0KIAogYm9vbCBGRUZs
b29kOjpzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTU4LDE3ICs1NywyMCBA
QCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
K0Zsb2F0UmVjdCBGRUZsb29kOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdAoreworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247Cit9CisKK0ZpbHRl
clJlc3VsdCogRkVGbG9vZDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3Vs
dFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBj
b25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0
cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAot
ICAgIGF1dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
Zmxvb2RPcGFjaXR5KCkpOwotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7
CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IH0sIG51bGxwdHIsIGdlb21ldHJ5
LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlv
bikgY29uc3QKK1RleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAog
ewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRmxvb2QiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0ZGM5
NjljNmQ3NTg4YmNlYjBhZDhiMjQ2ODJmYTA2MTczNDhlLi40OGUwZmY4OGMyODEzMjc4OTAxZGMz
OTkwMDU5NGI1MTA4M2YxZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwxNCArMjMsMTMgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUZsb29kIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUo
RmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRUZsb29kPiBj
cmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IENvbG9yJiBm
bG9vZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9mbG9vZENvbG9yOyB9CiAgICAgYm9vbCBzZXRG
bG9vZENvbG9yKGNvbnN0IENvbG9yJik7CkBAIC0zNywyNyArMzcsMjcgQEAgcHVibGljOgogICAg
IGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OyB9CiAg
ICAgYm9vbCBzZXRGbG9vZE9wYWNpdHkoZmxvYXQpOwogCitwcml2YXRlOgorICAgIEZFRmxvb2Qo
Y29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKKworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9vZCI7IH0KKyAgICAKICNpZiAhVVNFKENH
KQogICAgIC8vIGZlRmxvb2QgZG9lcyBub3QgcGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9m
IGFueSBraW5kLCBzbyB0aGUgcmVzdWx0IGlzIGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8v
IGNvbG9yIHNwYWNlIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRp
b24tZmlsdGVycy4KLSAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9y
U3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1
bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmls
dGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpKTsgfQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0KICNlbmRpZgogCi1wcml2YXRlOgotICAgIEZFRmxv
b2QoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdS
ZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVG
bG9vZCI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Cisg
ICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jiwg
Y29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBib29sIGFwcGx5U29m
dHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDb2xvciBtX2Zsb29k
Q29sb3I7CiAgICAgZmxvYXQgbV9mbG9vZE9wYWNpdHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2Yz
NmViYjZiYmI4YWIzNjM5NDM2NS4uNTUxMTVkYjA4NjBmMDliYjU0NGRiNzIxZDdlZGQ2YmY4MDc5
MTA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjYsNDUwICsyNiwzOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAKLSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAot
I2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgot
I2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdh
dXNzaWFuS2VybmVsRmFjdG9yKCkKLXsKLSAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBw
aUZsb2F0KTsKLX0KLQotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1
ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFS
aWdodCkKK1JlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4
LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDov
L3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9y
IGRldGFpbHMuCi0gICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAg
ICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVz
IC8gMiAtIDE7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0Owot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAg
ICAgICAgICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewot
ICAgICAgICAgICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMg
JSAyKSkgewotICAgICAgICAgICAgZGVsdGFSaWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7CiB9CiAKLUZFR2F1c3NpYW5CbHVy
OjpGRUdhdXNzaWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6R2F1c3Np
YW5CbHVyKQorRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHks
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUdhdXNz
aWFuQmx1cikKICAgICAsIG1fc3RkWCh4KQogICAgICwgbV9zdGRZKHkpCiAgICAgLCBtX2VkZ2VN
b2RlKGVkZ2VNb2RlKQogewogfQogCi1SZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVy
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cihmaWx0
ZXIsIHgsIHksIGVkZ2VNb2RlKSk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERl
dmlhdGlvblgoZmxvYXQgeCkKLXsKLSAgICBtX3N0ZFggPSB4OwotfQotCi12b2lkIEZFR2F1c3Np
YW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpCi17Ci0gICAgbV9zdGRZID0geTsKLX0K
LQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2Rl
KQotewotICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBv
bmx5IG9wZXJhdGVzIG9uIEFscGhhIGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFP
bmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRB
cnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYg
ZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwg
aW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSkKLXsKLSAgICBjb25z
dCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCog
ZHN0RGF0YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwotICAgIC8vIE1lbW9yeSBhbGlnbm1lbnQg
aXM6IFJHQkEsIHplcm8taW5kZXggYmFzZWQuCi0gICAgY29uc3QgaW50IGNoYW5uZWwgPSAzOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkgewotICAgICAgICBp
bnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOwotICAgICAgICBpbnQgc3VtID0gMDsKLQotICAgICAg
ICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2Vy
bmVsU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAq
IHN0cmlkZTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBv
ZmZzZXQ7Ci0gICAgICAgICAgICBzdW0gKz0gc3JjUHRyW2NoYW5uZWxdOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0
V2lkdGg7ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGlu
ZSArIHggKiBzdHJpZGUgKyBjaGFubmVsOwotICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0g
ZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLSAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihzdW0gLyBkeCk7Ci0KLSAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4K
LSAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0g
ICAgICAgICAgICAgICAgc3VtIC09ICpzcmNQdHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwot
ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9m
ZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gKz0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgYm94Qmx1cihjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXks
Ci0gICAgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBp
bnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFs
cGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICBjb25zdCBpbnQgbWF4S2Vy
bmVsU2l6ZSA9IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsKLSAgICBpZiAoYWxwaGFJ
bWFnZSkKLSAgICAgICAgcmV0dXJuIGJveEJsdXJBbHBoYU9ubHkoc3JjUGl4ZWxBcnJheSwgZHN0
UGl4ZWxBcnJheSwgZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBzdHJpZGVMaW5lLCAgZWZm
ZWN0V2lkdGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7Ci0KLSAgICBjb25zdCB1aW50
OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0
YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwotCi0gICAgLy8gQ29uY2VybmluZyB0aGUgYXJyYXkg
d2lkdGgvbGVuZ3RoOiBpdCBpcyBFbGVtZW50IHNpemUgKyBNYXJnaW4gKyBCb3JkZXIuIFRoZSBu
dW1iZXIgb2YgcGl4ZWxzIHdpbGwgYmUKLSAgICAvLyBQID0gd2lkdGggKiBoZWlnaHQgKiBjaGFu
bmVscy4KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7Ci0gICAg
ICAgIGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAgIGludCBzdW1SID0gMCwgc3Vt
RyA9IDAsIHN1bUIgPSAwLCBzdW1BID0gMDsKLQotICAgICAgICBpZiAoZWRnZU1vZGUgPT0gRURH
RU1PREVfTk9ORSkgewotICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OwotICAgICAgICAgICAg
ICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgIHN1bUcgKz0gKnNyY1B0cisr
OwotICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgIHN1
bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQmx1cnJpbmcu
Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlk
ZTsKLSAgICAgICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRl
T2Zmc2V0OwotCi0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3VtUiAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1
aW50OF90PihzdW1HIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTaGlmdCBr
ZXJuZWwuCi0gICAgICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBz
dHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0Rh
dGEgKyBsZWZ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SIC09IHNyY1B0clswXTsK
LSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUIgLT0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BIC09IHNyY1B0
clszXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoeCArIGR4Umln
aHQgPCBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9m
ZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKLSAg
ICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAg
IHN1bUcgKz0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IHNyY1B0clsy
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyBoZXJlLgotICAgICAgICAgICAgLy8gR2V0IGVk
Z2UgdmFsdWVzIGZvciBlZGdlTW9kZSAnZHVwbGljYXRlJy4KLSAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGVkZ2VWYWx1ZUxlZnQgPSBzcmNEYXRhICsgbGluZTsKLSAgICAgICAgICAgIGNvbnN0
IHVpbnQ4X3QqIGVkZ2VWYWx1ZVJpZ2h0ICA9IHNyY0RhdGEgKyAobGluZSArIChlZmZlY3RXaWR0
aCAtIDEpICogc3RyaWRlKTsKLQotICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IGR4TGVmdCAqIC0xOyBpIDwgZHhSaWdodDsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gSXMgdGhpcyByaWdodCBmb3IgbmVnYXRpdmUgdmFsdWVzIG9mICdp
Jz8KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsK
LSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0
OwotCi0gICAgICAgICAgICAgICAgaWYgKGkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1
bVIgKz0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdl
VmFsdWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZUxlZnRb
Ml07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGkgPj0gZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3Vt
RyArPSBlZGdlVmFsdWVSaWdodFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdl
VmFsdWVSaWdodFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVSaWdo
dFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdW1S
ICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAg
ICBzdW1BICs9ICpzcmNQdHI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
ZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9m
ZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0
ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRy
KysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAg
ICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAg
ICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA8IGR4
TGVmdCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SIC09IGVkZ2VWYWx1ZUxlZnRbMF07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gZWRnZVZhbHVlTGVmdFsxXTsKLSAgICAgICAgICAg
ICAgICAgICAgc3VtQiAtPSBlZGdlVmFsdWVMZWZ0WzJdOwotICAgICAgICAgICAgICAgICAgICBz
dW1BIC09IGVkZ2VWYWx1ZUxlZnRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4
TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRy
ID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3Jj
UHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEg
LT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh4
ICsgZHhSaWdodCA+PSBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9
IGVkZ2VWYWx1ZVJpZ2h0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1
ZVJpZ2h0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJd
OwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zm
c2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAg
ICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAg
c3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRyWzJd
OwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLSNpZiBVU0UoQUNDRUxF
UkFURSkKLWlubGluZSB2b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNp
emUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKLXsKLSAg
ICBpZiAoIWlvQnVmZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
ZWZmZWN0V2lkdGggPD0gMCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJpZGUgPD0gMCkgewot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIFdlIG11c3QgYWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgotICAgIGlmIChrZXJuZWxT
aXplICUgMiAhPSAxKQotICAgICAgICBrZXJuZWxTaXplICs9IDE7Ci0KLSAgICB2SW1hZ2VfQnVm
ZmVyIGVmZmVjdEluQnVmZmVyOwotICAgIGVmZmVjdEluQnVmZmVyLmRhdGEgPSBzdGF0aWNfY2Fz
dDx2b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKLSAgICBlZmZlY3RJbkJ1ZmZlci53aWR0aCA9IGVm
ZmVjdFdpZHRoOwotICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKLSAg
ICBlZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIHZJbWFnZV9CdWZmZXIg
ZWZmZWN0T3V0QnVmZmVyOwotICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5k
YXRhKCk7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZm
ZWN0T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKLSAgICBlZmZlY3RPdXRCdWZmZXIu
cm93Qnl0ZXMgPSBzdHJpZGU7Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYSB0ZW1w
b3JhcnkgYnVmZmVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdpdGggYSBzcGVjaWFs
IGZsYWcuIHZJbWFnZSB3aWxsIHJldHVybgotICAgIC8vIHRoZSBzaXplIG5lZWRlZCwgb3IgYW4g
ZXJyb3IgKHdoaWNoIGFyZSBhbGwgbmVnYXRpdmUpLgotICAgIHNpemVfdCB0bXBCdWZmZXJTaXpl
ID0gdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0
QnVmZmVyLCAwLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4
dGVuZCB8IGt2SW1hZ2VHZXRUZW1wQnVmZmVyU2l6ZSk7Ci0gICAgaWYgKHRtcEJ1ZmZlclNpemUg
PD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdm9pZCogdG1wQnVmZmVyID0gZmFzdE1hbGxv
Yyh0bXBCdWZmZXJTaXplKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0
SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwg
a2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIHZJbWFnZUJveENvbnZvbHZl
X0FSR0I4ODg4KCZlZmZlY3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwgdG1wQnVmZmVyLCAw
LCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7Ci0gICAg
dkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVm
ZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VF
ZGdlRXh0ZW5kKTsKLSAgICBXVEY6OmZhc3RGcmVlKHRtcEJ1ZmZlcik7Ci0KLSAgICAvLyBUaGUg
ZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0gICAgQVNTRVJUKGlv
QnVmZmVyLmxlbmd0aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOwotICAgIG1lbWNweShpb0J1
ZmZlci5kYXRhKCksIHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci19Ci0j
ZW5kaWYKLQotaW5saW5lIHZvaWQgc3RhbmRhcmRCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNp
emVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXpl
LCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIGludCBk
eExlZnQgPSAwOwotICAgIGludCBkeFJpZ2h0ID0gMDsKLSAgICBpbnQgZHlMZWZ0ID0gMDsKLSAg
ICBpbnQgZHlSaWdodCA9IDA7Ci0gICAgCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGZyb21CdWZm
ZXIgPSAmaW9CdWZmZXI7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIHRvQnVmZmVyID0gJnRlbXBC
dWZmZXI7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBpZiAo
a2VybmVsU2l6ZVgpIHsKLSAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVY
LCBkeExlZnQsIGR4UmlnaHQpOwotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICAg
ICAgICAgIGlmICghaXNBbHBoYUltYWdlKQotICAgICAgICAgICAgICAgIGJveEJsdXJORU9OKCpm
cm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0
cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBr
ZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgp
LCBwYWludFNpemUuaGVpZ2h0KCksIHRydWUsIGVkZ2VNb2RlKTsKLSNlbHNlCi0gICAgICAgICAg
ICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4
UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwg
aXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0ZDo6c3dhcChm
cm9tQnVmZmVyLCB0b0J1ZmZlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa2VybmVsU2l6
ZVkpIHsKLSAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVZLCBkeUxlZnQs
IGR5UmlnaHQpOwotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICAgICAgICAgIGlm
ICghaXNBbHBoYUltYWdlKQotICAgICAgICAgICAgICAgIGJveEJsdXJORU9OKCpmcm9tQnVmZmVy
LCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFp
bnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXpl
WSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRT
aXplLndpZHRoKCksIHRydWUsIGVkZ2VNb2RlKTsKLSNlbHNlCi0gICAgICAgICAgICBib3hCbHVy
KCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0
cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgaXNBbHBoYUlt
YWdlLCBlZGdlTW9kZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVy
LCB0b0J1ZmZlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgZmluYWwgcmVzdWx0
IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0gICAgaWYgKCZpb0J1ZmZlciAhPSBmcm9t
QnVmZmVyKSB7Ci0gICAgICAgIEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSBmcm9tQnVmZmVy
LT5sZW5ndGgoKSk7Ci0gICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCksIGZyb21CdWZmZXIt
PmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOwotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgRkVH
YXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1
ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNp
emVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQotewotICAgIGlu
dCBzdHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkK
LSAgICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKG1fZWRnZU1vZGUgPT0gRURH
RU1PREVfTk9ORSB8fCBtX2VkZ2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKLSAgICAg
ICAgYWNjZWxlcmF0ZUJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVY
LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBzdGFuZGFyZEJveEJsdXIoaW9CdWZmZXIs
IHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNp
emUsIGlzQWxwaGFJbWFnZSgpLCBtX2VkZ2VNb2RlKTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1
cjo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVy
cykKLXsKLSAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVy
cy0+aGVpZ2h0KTsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
KCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBw
YXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6
ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4
Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXks
IHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFp
bnRTaXplKQorc3RhdGljIGlubGluZSBmbG9hdCBnYXVzc2lhbktlcm5lbEZhY3RvcigpCiB7Ci0j
aWYgIVVTRShBQ0NFTEVSQVRFKQotICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lk
dGgoKTsKLSAgICBpbnQgZXh0cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOwotICAg
IGludCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXpl
LmhlaWdodCgpKSAvIChzX21pbmltYWxSZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWlu
dFNpemUud2lkdGgoKSk7Ci0KLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAg
ICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVs
Sm9icygmcGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAg
ICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChq
b2JzID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJibG9ja0hlaWdo
dCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0
bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyBibG9ja0hlaWdodCAqIGpvYnMgPCB0b3Rh
bCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dp
dGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQgYmxvY2tIZWlnaHQgPSBwYWludFNpemUu
aGVpZ2h0KCkgLyBqb2JzOwotICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSBw
YWludFNpemUuaGVpZ2h0KCkgJSBqb2JzOwotCi0gICAgICAgICAgICBpbnQgY3VycmVudFkgPSAw
OwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKLSAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxK
b2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlz
OwotCi0gICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9ICFqb2IgPyAwIDogY3VycmVudFkgLSBl
eHRyYUhlaWdodDsKLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4
dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgaW50
IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50WSA6IGN1cnJlbnRZICsgZXh0cmFIZWln
aHQ7Ci0KLSAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXplID0gKGVuZFkgLSBzdGFydFkpICog
c2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCFqb2IpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gVWludDhD
bGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKLSAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRl
VW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGFy
YW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZlci5kYXRhKCkgKyBzdGFydFkgKiBzY2Fu
bGluZSwgYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBw
YXJhbXMud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMu
aGVpZ2h0ID0gZW5kWSAtIHN0YXJ0WTsKLSAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6
ZVggPSBrZXJuZWxTaXplWDsKLSAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkgPSBr
ZXJuZWxTaXplWTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4
ZWN1dGUoKTsKLQotICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhl
IGltYWdlLgotICAgICAgICAgICAgY3VycmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQg
am9iID0gMTsgam9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAg
ICAgICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50IGRlc3Rp
bmF0aW9uT2Zmc2V0OwotICAgICAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgICAg
IGludCBhZGp1c3RlZEJsb2NrSGVpZ2h0ID0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVp
Z2h0ICsgMSA6IGJsb2NrSGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRq
dXN0ZWRCbG9ja0hlaWdodDsKLSAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhl
aWdodCAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3Vy
cmVudFkgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hl
aWdodCAqIHNjYW5saW5lOwotCi0gICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEo
KSArIGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3Vy
Y2VPZmZzZXQsIHNpemUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgotICAg
IH0KLSNlbmRpZgotCi0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxk
IGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSAgICBwbGF0Zm9ybUFwcGx5
R2VuZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZ
LCBwYWludFNpemUpOworICAgIHJldHVybiAzIC8gNC5mICogc3FydGYoMiAqIHBpRmxvYXQpOwog
fQogCiBzdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCiB7CiAgICAg
Ly8gTGltaXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdvbid0IG1h
a2UgYSBiaWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQKICAgICAvLyBpbmZs
YXRlcyB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21wYXRpYmxl
IHdpdGggRmlyZWZveCcgYmVoYXZpb3IuCisgICAgc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVs
U2l6ZSA9IDUwMDsKICAgICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3Rvcigp
ICsgMC41ZikpKTsKICAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihnTWF4S2VybmVsU2l6ZSkpKTsKIH0KLSAgICAKLUludFNpemUgRkVH
YXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2
aWF0aW9uKQorCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5l
bFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7CiAgICAgQVNTRVJUKHN0ZERl
dmlhdGlvbi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49IDApOwogICAg
IEludFNpemUga2VybmVsU2l6ZTsKQEAgLTQ4MywxMiArNzEsMTIgQEAgSW50U2l6ZSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRp
b24pCiAgICAgcmV0dXJuIGtlcm5lbFNpemU7CiB9CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGRE
ZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewotICAgIHJldHVybiBjYWxjdWxhdGVVbnNj
YWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzdGREZXZpYXRp
b24pKTsKKyAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlhdGlv
biAvKmZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9uKSovKTsKIH0K
IAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUg
c3RkRGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKICAgICBhdXRvIGtlcm5lbFNpemUg
PSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKIApAQCAtNDk2LDcy
ICs4NCw0MyBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZs
b2F0U2l6ZSBzdGREZXZpYXRpb24pCiAgICAgcmV0dXJuIHsgMyAqIGtlcm5lbFNpemUud2lkdGgo
KSAvIDIsIDMgKiBrZXJuZWxTaXplLmhlaWdodCgpIC8gMiB9OwogfQogCi12b2lkIEZFR2F1c3Np
YW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitJbnRPdXRzZXRzIEZFR2F1c3Np
YW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKIHsKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxj
dWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIEludFNp
emUgb3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsK
KyAgICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCksIG91
dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSB9OworfQogCi0gICAgRmxvYXRS
ZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0
KCk7CitGbG9hdFJlY3QgRkVHYXVzc2lhbkJsdXI6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBk
cmF3aW5nUmVjdCA9IGlucHV0c1swXS0+ZHJhd2luZ1JlY3QoKTsKICAgICAvLyBFZGdlIG1vZGVz
IG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBwYWludCByZWN0
LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUpIHsKLSAgICAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUp
CisgICAgICAgIHJldHVybiBkcmF3aW5nUmVjdDsKIAotICAgIC8vIFdlIHRha2UgdGhlIGhhbGYg
a2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJv
eCBibHVyIHRocmVlIHRpbWVzLgotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBr
ZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRl
WSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOworICAgIEludFNpemUga2VybmVsU2l6
ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKIAotICAgIGlmIChj
bGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhF
ZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUo
bWF4RWZmZWN0UmVjdCgpKTsKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFu
ZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0
aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICog
MC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkg
KiAwLjVmKTsKIAotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJz
b2x1dGVQYWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvUHJpbWl0aXZlU3Vi
cmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUdhdXNz
aWFuQmx1cjo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYg
c3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25z
dCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsK
KyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1h
Z2UoKSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29w
eVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5n
UmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZ
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVL
ZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIGtlcm5lbFNpemUu
c2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9
IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIo
KS5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIHRtcEltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHBhaW50U2l6ZS5hcmVhKCkgKiA0KTsKLSAgICBp
ZiAoIXRtcEltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1BcHBseShk
ZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwg
a2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsKLX0KLQotSW50T3V0c2V0cyBGRUdhdXNz
aWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBvdXRzZXRTaXplID0gY2Fs
Y3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIHJldHVybiB7IG91dHNl
dFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwg
b3V0c2V0U2l6ZS53aWR0aCgpIH07CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7
IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0m
IEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBS
ZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUdh
dXNzaWFuQmx1cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVy
UmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVHYXVzc2lh
bkJsdXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc3RkRGV2aWF0aW9uPVwiIiA8PCBtX3N0ZFggPDwg
IiwgIiA8PCBtX3N0ZFkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3Bl
IGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5oCmluZGV4IDVmYjk3ZmZiMDcwYzJkYWViNmViMjgzYmVhYWExNzY0N2NiYjJkM2UuLjk3
YzgwNDM2NjljNWY1MmUwMzMwZGEwODk5OTdlYWU0M2ExYzVlZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjIsNTkgKzIzLDQwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRy
aXguaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUdhdXNzaWFuQmx1ciA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVHYXVzc2lhbkJsdXI+IGNyZWF0
ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGljIFJlZjxG
RUdhdXNzaWFuQmx1cj4gY3JlYXRlKGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKIAogICAg
IGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KLSAgICB2b2lk
IHNldFN0ZERldmlhdGlvblgoZmxvYXQpOworICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9h
dCB4KSB7IG1fc3RkWCA9IHg7IH0KIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblkoKSBjb25zdCB7
IHJldHVybiBtX3N0ZFk7IH0KLSAgICB2b2lkIHNldFN0ZERldmlhdGlvblkoZmxvYXQpOworICAg
IHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCB5KSB7IG1fc3RkWSA9IHk7IH0KIAogICAgIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZU1vZGU7IH0KLSAgICB2
b2lkIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7CisgICAgdm9pZCBzZXRFZGdlTW9kZShFZGdl
TW9kZVR5cGUgZWRnZU1vZGUpIHsgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOyB9CiAKLSAgICBzdGF0
aWMgSW50U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYsIEZsb2F0U2l6ZSBz
dGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVs
U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKLSAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxh
dGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOworICAgIHN0YXRpYyBJbnRTaXpl
IGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOworICAg
IHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShjb25zdCBGbG9hdFNp
emUmIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlT3V0c2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7CiAKIHByaXZhdGU6Ci0gICAgRkVHYXVz
c2lhbkJsdXIoRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOworICAgIEZFR2F1
c3NpYW5CbHVyKGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKIAogICAgIGNvbnN0IGNoYXIq
IGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVHYXVzc2lhbkJsdXIiOyB9CiAK
LSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7
IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBz
dHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMgewotICAgICAgICBGRUdhdXNzaWFuQmx1ciog
ZmlsdGVyOwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGlvUGl4ZWxBcnJheTsK
LSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB0bXBQaXhlbEFycmF5OwotICAgICAg
ICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5l
bFNpemVYOwotICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWTsKLSAgICB9OwotCi0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBJbnRPdXRzZXRzIG91dHNl
dHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgSW50T3V0c2V0cyBv
dXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJP
dXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdv
cmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseShV
aW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVy
LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBh
aW50U2l6ZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRBcnJh
eSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSk7CisgICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc3Rk
WDsKICAgICBmbG9hdCBtX3N0ZFk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCBkZjE3NmY4ZTA3MGE0MThj
MjA4NTE4MDkwZWU3YTZjYTExM2U1NmY1Li5kNmQ1OTQyZjJmZmJhMmRjMzlmYmRkODRlNmI0MmFj
Y2YyYzU1MDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Wm9sdGFuIEhlcmN6ZWcKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw0NzAgKzI4LDc3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVMaWdodGluZy5oIgogCi0jaW5jbHVkZSAiQ29sb3JD
b252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKyNpbmNsdWRlICJGaWx0
ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgorI2luY2x1ZGUgIkZpbHRl
clJlc3VsdFZlY3Rvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTGlnaHRpbmc6OkZF
TGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGln
aHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UsIFR5cGUgdHlwZSkKLSAgICA6IEZpbHRlckVmZmVjdChm
aWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xpZ2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCi0gICAgLCBt
X2xpZ2h0U291cmNlKFdURk1vdmUobGlnaHRTb3VyY2UpKQotICAgICwgbV9saWdodGluZ0NvbG9y
KGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xv
ciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSwg
RmlsdGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKKyAgICA6IEZpbHRlckVmZmVjdCh0eXBlKQorICAg
ICwgbV9jb2xvcihjb2xvcikKICAgICAsIG1fc3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSkKICAg
ICAsIG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCkKICAgICAsIG1fc3BlY3VsYXJD
b25zdGFudChzcGVjdWxhckNvbnN0YW50KQogICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1
bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhY
KQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0TGVuZ3RoWSkKKyAgICAsIG1f
c291cmNlKFdURk1vdmUoc291cmNlKSkKIHsKIH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpzZXRTdXJm
YWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQotewotICAgIGlmIChtX3N1cmZhY2VTY2FsZSA9
PSBzdXJmYWNlU2NhbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fc3VyZmFjZVNj
YWxlID0gc3VyZmFjZVNjYWxlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFTGlnaHRp
bmc6OnNldExpZ2h0aW5nQ29sb3IoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IpCitib29sIEZF
TGlnaHRpbmc6OnNldENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAobV9saWdo
dGluZ0NvbG9yID09IGxpZ2h0aW5nQ29sb3IpCisgICAgaWYgKG1fY29sb3IgPT0gY29sb3IpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fbGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29s
b3I7CisgICAgbV9jb2xvciA9IGNvbG9yOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZF
TGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKQot
ewotICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGhYID09IGtlcm5lbFVuaXRMZW5ndGhYKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2tlcm5lbFVuaXRMZW5ndGhYID0ga2VybmVsVW5p
dExlbmd0aFg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdodGluZzo6c2V0S2Vy
bmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCi17Ci0gICAgaWYgKG1fa2Vy
bmVsVW5pdExlbmd0aFkgPT0ga2VybmVsVW5pdExlbmd0aFkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0TGVuZ3RoWTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGNvbnN0ZXhwciBpbnQgY1BpeGVsU2l6ZSA9IDQ7Ci1z
dGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsKLXN0YXRpYyBjb25z
dGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0aWNfY2FzdDx1aW50OF90PigweEZGKTsK
LQotLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1hbCBjb2VmZmljaWVudHMgY29tZSBmcm9t
IHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNm
ZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCi1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3Ix
ZGl2MiA9IC0xIC8gMi5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjMgPSAt
MSAvIDMuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXY0ID0gLTEgLyA0LmY7
Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IyZGl2MyA9IC0yIC8gMy5mOwotCi1pbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwoaW50IG9m
ZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
OwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAqIGNlbnRlciArIDIgKiByaWdodCAt
IGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtMiAqIGNlbnRlciAtIHJpZ2h0ICsgMiAq
IGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAg
ICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSB3aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICogbGVmdCArIDIgKiByaWdodCAtIGJv
dHRvbUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAgICAgLWxlZnQgLSAyICogY2VudGVyIC0gcmln
aHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQot
aW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJv
dHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAqIGxlZnQgKyAyICogY2VudGVy
IC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAgLWxlZnQgLSAyICogY2VudGVyICsgYm90
dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsK
LSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0b3Ag
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQg
Kz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b20gPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewot
ICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9t
ICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQgKyAyICogYm90dG9t
ICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpM
aWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JiBhbHBo
YVdpbmRvdykgY29uc3QKLXsKLSAgICBpbnQgcmlnaHRBbHBoYU9mZnNldCA9IG9mZnNldCArIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0OwotICAgIAotICAgIGludCByaWdodCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQpKTsKLSAgICBpbnQg
dG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0
IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0ICsgd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUpKTsKLQotICAgIGludCBsZWZ0ID0gYWxwaGFXaW5kb3cubGVmdCgp
OwotICAgIGludCB0b3BMZWZ0ID0gYWxwaGFXaW5kb3cudG9wTGVmdCgpOwotICAgIGludCB0b3Ag
PSBhbHBoYVdpbmRvdy50b3AoKTsKLQotICAgIGludCBib3R0b21MZWZ0ID0gYWxwaGFXaW5kb3cu
Ym90dG9tTGVmdCgpOwotICAgIGludCBib3R0b20gPSBhbHBoYVdpbmRvdy5ib3R0b20oKTsKLQot
ICAgIC8vIFRoZSBhbHBoYVdpbmRvdyBoYXMgYmVlbiBzaGlmdGVkLCBhbmQgaGVyZSB3ZSBmaWxs
IGluIHRoZSByaWdodCBjb2x1bW4uCi0gICAgYWxwaGFXaW5kb3cuYWxwaGFbMF1bMl0gPSB0b3BS
aWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsxXVsyXSA9IHJpZ2h0OwotICAgIGFscGhhV2lu
ZG93LmFscGhhWzJdWzJdID0gYm90dG9tUmlnaHQ7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCB0
aGUgYWxwaGFXaW5kb3cgaXMgd29ya2luZyB3aXRoIHNvbWUgc3BvdC1jaGVja3MuCi0gICAgQVNT
RVJUKGFscGhhV2luZG93LnRvcExlZnQoKSA9PSBwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OyAvLyB0b3BMZWZ0Ci0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcCgpID09IHBpeGVscy0+aXRl
bShvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsgLy8gdG9wCi0KLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0
IC0gMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9tUmlnaHQsCi0gICAg
ICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgYm90dG9tTGVmdCArIDIgKiBib3R0
b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAg
ICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIg
KiB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAg
ICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBi
b3R0b20sCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCArIGJvdHRvbUxlZnQgKyAyICogYm90
dG9tCi0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGNlbnRlciA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0
b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcCAr
IHRvcFJpZ2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdodCwKLSAgICAgICAgLTIgKiB0b3AgLSB0
b3BSaWdodCArIDIgKiBjZW50ZXIgKyByaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXpl
IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0Citib29sIEZFTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZShmbG9hdCBzdXJmYWNlU2NhbGUp
CiB7Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
LSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxl
ZnQgKyAyICogcmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsg
bGVmdCArIDIgKiBjZW50ZXIgKyByaWdodAotICAgIH07CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFu
Z2UobV9zdXJmYWNlU2NhbGUsIHN1cmZhY2VTY2FsZSkgIT0gbV9zdXJmYWNlU2NhbGU7CiB9CiAK
LWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKK2Jvb2wgRkVMaWdodGluZzo6c2V0RGlmZnVzZUNvbnN0YW50
KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKIHsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3AgLSAyICog
bGVmdCArIDIgKiBjZW50ZXIsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCArIGxlZnQgKyAy
ICogY2VudGVyCi0gICAgfTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2RpZmZ1c2VDb25z
dGFudCwgZGlmZnVzZUNvbnN0YW50KSAhPSBtX2RpZmZ1c2VDb25zdGFudDsKIH0KIAotdm9pZCBG
RUxpZ2h0aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGlu
dCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9y
KQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29u
c3RhbnQpCiB7Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0
YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4gc3RkOjpleGNo
YW5nZShtX3NwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyQ29uc3RhbnQpICE9IHNwZWN1bGFyQ29u
c3RhbnQ7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0
LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0
b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSkKK2Jvb2wgRkVMaWdodGlu
Zzo6c2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCBzcGVjdWxhckV4cG9uZW50KQogewotICAgIGZs
b2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOwotICAgIExpZ2h0U291cmNlOjpDb21w
dXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBtX2xpZ2h0U291cmNlLT5jb21wdXRlUGl4
ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKLQotICAgIGZsb2F0IGxpZ2h0
U3RyZW5ndGg7Ci0gICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygpKSB7Ci0gICAgICAgIC8v
IE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2Fz
ZS4KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdo
dGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5n
dGg7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0
b3IgPSB7Ci0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAg
ICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAotICAgICAgICAgICAg
ICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0
b3JMZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9y
TGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3NwZWN1
bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVj
dWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1
bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0
aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0gICAgICAgICAgICBmYWN0b3JYICogbm9y
bWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAgICAgICAgICAgZmFj
dG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICogZGF0YS5zdXJmYWNlU2NhbGUsCi0gICAg
ICAgICAgICAxLjBmCi0gICAgICAgIH07Ci0gICAgICAgIGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0
aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKLQotICAgICAgICBpZiAobV9saWdodGluZ1R5cGUg
PT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAgbGlnaHRTdHJlbmd0
aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9y
TGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndh
eVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueCgp
LAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci55KCksCi0gICAgICAg
ICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlW
ZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKG1f
c3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBt
X3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9y
bWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIHBv
d2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAq
IGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25lbnQpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxKQotICAgICAgICBsaWdodFN0cmVuZ3Ro
ID0gMTsKLSAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDApCi0gICAgICAgIGxpZ2h0U3RyZW5ndGgg
PSAwOwotCi0gICAgdWludDhfdCBwaXhlbFZhbHVlWzNdID0gewotICAgICAgICBzdGF0aWNfY2Fz
dDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLngoKSAq
IDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBs
aWdodGluZ0RhdGEuY29sb3JWZWN0b3IueSgpICogMjU1LjBmKSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci56KCkg
KiAyNTUuMGYpCi0gICAgfTsKLSAgICAKLSAgICBkYXRhLnBpeGVscy0+c2V0UmFuZ2UocGl4ZWxW
YWx1ZSwgMywgb2Zmc2V0KTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3NwZWN1bGFyRXhw
b25lbnQsIHNwZWN1bGFyRXhwb25lbnQpICE9IG1fc3BlY3VsYXJFeHBvbmVudDsKIH0KIAotLy8g
VGhpcyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHNhbWUgcGl4ZWwgYnVm
ZmVyLCBidXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEgY2hhbm5lbCwgYW5kIHdyaXRlcyB0aGUg
bm9uLWFscGhhIGNoYW5uZWxzLgotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJp
Y1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKLXsKLSAgICAvLyBN
YWtlIHN1cmUgc3RhcnRZIGlzID4gMCBzaW5jZSB3ZSByZWFkIGZyb20gdGhlIHByZXZpb3VzIHJv
dyBpbiB0aGUgbG9vcC4KLSAgICBBU1NFUlQoc3RhcnRZKTsKLSAgICBBU1NFUlQoZW5kWSA+IHN0
YXJ0WSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAg
ICAgIGludCByb3dTdGFydE9mZnNldCA9IHkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOwotICAgICAgICBpbnQgcHJldmlvdXNSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0IC0gZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IG5leHRSb3dTdGFydCA9
IHJvd1N0YXJ0T2Zmc2V0ICsgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLQotICAg
ICAgICAvLyBhbHBoYVdpbmRvdyBpcyBhIGxvY2FsIGNhY2hlIG9mIGFscGhhIHZhbHVlcy4KLSAg
ICAgICAgLy8gRmlsbCB0aGUgdHdvIHJpZ2h0IGNvbHVtbnMgcHV0dGluZyB0aGUgbGVmdCBlZGdl
IHZhbHVlIGluIHRoZSBjZW50ZXIgY29sdW1uLgotICAgICAgICAvLyBGb3IgZWFjaCBwaXhlbCwg
d2Ugc2hpZnQgZWFjaCByb3cgbGVmdCB0aGVuIGZpbGwgdGhlIHJpZ2h0IGNvbHVtbi4KLSAgICAg
ICAgQWxwaGFXaW5kb3cgYWxwaGFXaW5kb3c7Ci0gICAgICAgIGFscGhhV2luZG93LnNldFRvcChk
YXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3BSaWdodChkYXRhLnBpeGVscy0+aXRlbShwcmV2
aW91c1Jvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAg
ICAgICBhbHBoYVdpbmRvdy5zZXRDZW50ZXIoZGF0YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZz
ZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgICAgIGFscGhhV2luZG93LnNldFJpZ2h0
KGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b20oZGF0YS5waXhl
bHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgICAgICBh
bHBoYVdpbmRvdy5zZXRCb3R0b21SaWdodChkYXRhLnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotCi0gICAgICAgIGludCBvZmZz
ZXQgPSByb3dTdGFydE9mZnNldCArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAx
OyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXpl
KSB7Ci0gICAgICAgICAgICBhbHBoYVdpbmRvdy5zaGlmdCgpOwotICAgICAgICAgICAgc2V0UGl4
ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0
LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JOb3JtYWwob2Zmc2V0LCBhbHBoYVdpbmRvdyks
IGFscGhhV2luZG93LmNlbnRlcigpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
cmFtZXRlcnMqIHBhcmFtZXRlcnMpCitib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5n
dGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKQogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+
cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5w
YWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7CisgICAg
cmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0
aFgpICE9IG1fa2VybmVsVW5pdExlbmd0aFg7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgdW5zaWduZWQgcm93c1RvUHJv
Y2VzcyA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgLSAxOwotICAgIHVuc2lnbmVkIG1heE51
bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFk
TnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lIC0g
MSkgKiByb3dzVG9Qcm9jZXNzKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24sIG1heE51bVRocmVh
ZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICAvLyBJbml0
aWFsaXplIHBhcmFsbGVsIGpvYnMKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1B
cHBseUdlbmVyaWNQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3JtQXBwbHlHZW5lcmlj
V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBwYXJh
bWV0ZXIgYXJyYXkKLSAgICAgICAgaW50IGpvYiA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMo
KTsKLSAgICAgICAgaWYgKGpvYiA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2Ig
aW50byAieVN0ZXAiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRv
IGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQotICAgICAgICAgICAgLy8geVN0ZXAgKiBqb2JzIDwg
dG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIgImpv
YnNXaXRoRXh0cmEiLgotICAgICAgICAgICAgY29uc3QgaW50IHlTdGVwID0gcm93c1RvUHJvY2Vz
cyAvIGpvYjsKLSAgICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4dHJhID0gcm93c1RvUHJv
Y2VzcyAlIGpvYjsKLQotICAgICAgICAgICAgaW50IHlTdGFydCA9IDE7Ci0gICAgICAgICAgICBm
b3IgKC0tam9iOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFw
cGx5R2VuZXJpY1BhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9i
KTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMuZGF0YSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5nRGF0
YSA9IHBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMueVN0YXJ0ID0geVN0YXJ0
OwotICAgICAgICAgICAgICAgIHlTdGFydCArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8geVN0ZXAg
KyAxIDogeVN0ZXA7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnlFbmQgPSB5U3RhcnQ7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJl
YWRlZCBtb2RlLgotICAgIH0KLQotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoZGF0YSwg
cGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lKTsKLX0KLQotaW5saW5l
IHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK2Jvb2wgRkVM
aWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCiB7
Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5h
bWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSNpZiBDUFUoQVJNX05FT04pICYmIENQVShBUk1f
VFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdDQ19DT01QQVRJQkxFKQotICAgIHBsYXRmb3JtQXBw
bHlOZW9uKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0jZWxzZQotICAgIHBsYXRmb3JtQXBwbHlHZW5l
cmljKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0jZW5kaWYKKyAgICByZXR1cm4gc3RkOjpleGNoYW5n
ZShtX2tlcm5lbFVuaXRMZW5ndGhZLCBrZXJuZWxVbml0TGVuZ3RoWSkgIT0gbV9rZXJuZWxVbml0
TGVuZ3RoWTsKIH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVk
QXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorRmxvYXRSZWN0IEZFTGlnaHRp
bmc6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0g
ICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgTGlnaHRpbmdE
YXRhIGRhdGE7Ci0KLSAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdo
dCAob3IgYm90aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZp
bmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCi0gICAgaWYgKHdpZHRo
IDw9IDIgfHwgaGVpZ2h0IDw9IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRhdGEu
cGl4ZWxzID0gJnBpeGVsczsKLSAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxl
IC8gMjU1LjBmOwotICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSB3aWR0aCAq
IGNQaXhlbFNpemU7Ci0gICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gd2lkdGggLSAxOwot
ICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOwotCi0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBtX2xpZ2h0aW5nQ29sb3IudG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3Bh
Y2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0
aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKLQotICAgIG1fbGln
aHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMsIHBhaW50aW5nRGF0YSk7Ci0KLSAgICAv
LyBUb3AgbGVmdC4KLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRh
dGEsIHBhaW50aW5nRGF0YSwgMCwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEu
dG9wTGVmdE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8vIFRvcCByaWdodC4KLSAgICBvZmZzZXQg
PSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQ
aXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25l
LCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BSaWdodE5vcm1hbChvZmZz
ZXQpKTsKLQotICAgIC8vIEJvdHRvbSBsZWZ0LgotICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVj
cmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIHNldFBp
eGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21MZWZ0Tm9ybWFsKG9m
ZnNldCkpOwotCi0gICAgLy8gQm90dG9tIHJpZ2h0LgotICAgIG9mZnNldCA9IGhlaWdodCAqIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgIHNldFBpeGVs
KG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRh
LmJvdHRvbVJpZ2h0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgaWYgKHdpZHRoID49IDMpIHsKLSAg
ICAgICAgLy8gVG9wIHJvdy4KLSAgICAgICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0
ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEudG9wUm93Tm9y
bWFsKG9mZnNldCkpOwotCi0gICAgICAgIC8vIEJvdHRvbSByb3cuCi0gICAgICAgIG9mZnNldCA9
IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRo
RGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBz
ZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFz
ZWRCeU9uZSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEuYm90dG9tUm93Tm9ybWFs
KG9mZnNldCkpOwotICAgIH0KLQotICAgIGlmIChoZWlnaHQgPj0gMykgewotICAgICAgICAvLyBM
ZWZ0IGNvbHVtbi4KLSAgICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAg
ICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIHksIGNGYWN0
b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLmxlZnRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7Ci0K
LSAgICAgICAgLy8gUmlnaHQgY29sdW1uLgotICAgICAgICBvZmZzZXQgPSAyICogZGF0YS53aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkg
PSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwg
ZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIHksIGNGYWN0b3Ix
ZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOwotICAg
IH0KLQotICAgIGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAzKSB7Ci0gICAgICAgIC8vIElu
dGVyaW9yIHBpeGVscy4KLSAgICAgICAgcGxhdGZvcm1BcHBseShkYXRhLCBwYWludGluZ0RhdGEp
OwotICAgIH0KLQotICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplICogaGVpZ2h0OwotICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRp
bmcpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGNBbHBoYUNoYW5uZWxPZmZzZXQ7IGkgPCBsYXN0
UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSwg
Y09wYXF1ZUFscGhhKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICB1aW50OF90IGExID0g
ZGF0YS5waXhlbHMtPml0ZW0oaSk7Ci0gICAgICAgICAgICB1aW50OF90IGEyID0gZGF0YS5waXhl
bHMtPml0ZW0oaSArIDEpOwotICAgICAgICAgICAgdWludDhfdCBhMyA9IGRhdGEucGl4ZWxzLT5p
dGVtKGkgKyAyKTsKLSAgICAgICAgICAgIC8vIGFscGhhIHNldCB0byBzZXQgdG8gbWF4KGExLCBh
MiwgYTMpCi0gICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGkgKyAzLCBhMSA+PSBhMiA/IChh
MSA+PSBhMyA/IGExIDogYTMpIDogKGEyID49IGEzID8gYTIgOiBhMykpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsK
IH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVz
dWx0KiBGRUxpZ2h0aW5nOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0
VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0
cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0K
LSAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgp
KTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIEludFJlY3QgZWZmZWN0
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5h
dGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwotICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEs
MSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCi0gICAgLy8gc3RhbmRhcmQgaGFzIG5v
IHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIGhh
cyBzdHJhbmdlCi0gICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBh
bmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KLSAgICAvLyBBbnl3YXksIGZlQ29u
dm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChh
dXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAKLSAgICBJbnRTaXplIGFic29sdXRlUGFpbnRTaXplID0gYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCk7Ci0gICAgZHJhd0xpZ2h0aW5nKGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkp
OworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiB9LCBudWxscHRyLCBnZW9t
ZXRyeSwgYm91bmRhcnlTZXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5o
CmluZGV4IDBmZmZjZDA2NDM5NmQ4ZjRiNjQwODIyNjljYzIwNzRmN2M5ZGJkYmMuLmI4OThhYzk3
ODg3YmNkZmYwMWRiNTZkZjM1MDI4ODM4ZWNiYzQxNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsMTM5ICszMSw1MSBAQAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgotCi0vLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVE
aWZmdXNlTGlnaHRpbmcgYW5kIEZFU3BlY3VsYXJMaWdodGluZwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0cnVjdCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbjsKLQogY2xhc3MgRkVM
aWdodGluZyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBjb25zdCBDb2xvciYgY29s
b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgYm9vbCBzZXRDb2xvcihjb25zdCBD
b2xvciYpOwogCiAgICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJm
YWNlU2NhbGU7IH0KICAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CiAKLSAgICBjb25z
dCBDb2xvciYgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsg
fQotICAgIGJvb2wgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIGZsb2F0IGRp
ZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9CisgICAg
Ym9vbCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQpOworCisgICAgZmxvYXQgc3BlY3VsYXJDb25z
dGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQorICAgIGJvb2wgc2V0
U3BlY3VsYXJDb25zdGFudChmbG9hdCk7CiAKKyAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9CisgICAgYm9vbCBzZXRTcGVjdWxh
ckV4cG9uZW50KGZsb2F0KTsKKyAgICAKICAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNv
bnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFg7IH0KICAgICBib29sIHNldEtlcm5lbFVu
aXRMZW5ndGhYKGZsb2F0KTsKIAogICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3Qg
eyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWTsgfQogICAgIGJvb2wgc2V0S2VybmVsVW5pdExl
bmd0aFkoZmxvYXQpOwogCi0gICAgY29uc3QgTGlnaHRTb3VyY2UmIGxpZ2h0U291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV9saWdodFNvdXJjZS5nZXQoKTsgfQorICAgIGNvbnN0IExpZ2h0U291cmNl
JiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6
Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAw
OyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIEZFTGlnaHRp
bmcoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3Vy
Y2U+JiYsIEZpbHRlckZ1bmN0aW9uOjpUeXBlKTsKIAotICAgIGVudW0gTGlnaHRpbmdUeXBlIHsK
LSAgICAgICAgRGlmZnVzZUxpZ2h0aW5nLAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nCi0gICAg
fTsKLSAgICAKLSAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cgewotICAgICAgICB1aW50OF90IGFscGhh
WzNdWzNdIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJl
IGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgotICAgICAgICB1aW50
OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsgfQot
ICAgICAgICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBo
YVsxXVswXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7
IHJldHVybiBhbHBoYVsyXVswXTsgfQotCi0gICAgICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAg
ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgY2Vu
dGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzFdOyB9Ci0gICAgICAg
IHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFd
OyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1ZSkgICAgICAgICAgeyBhbHBo
YVswXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUp
ICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldEJvdHRvbSh1
aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFsdWU7IH0KLQotICAgICAgICB2
b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFsdWU7
IH0KLSAgICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90IHZhbHVlKSAgICAgICAgeyBhbHBoYVsx
XVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhfdCB2YWx1
ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQotCi0gICAgICAgIHN0YXRpYyB2b2lkIHNoaWZ0
Um93KHVpbnQ4X3QgYWxwaGFbM10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFscGhhWzBdID0g
YWxwaGFbMV07Ci0gICAgICAgICAgICBhbHBoYVsxXSA9IGFscGhhWzJdOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hp
ZnRSb3coYWxwaGFbMF0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOwotICAgICAg
ICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0cnVj
dCBMaWdodGluZ0RhdGEgewotICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5
IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBp
eGVsczsKLSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOwotICAgICAgICBpbnQgd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOwotICAg
ICAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7Ci0KLSAgICAgICAgaW5saW5lIEludFNpemUg
dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUg
dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0
b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUg
bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNp
emUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKLSAgICAg
ICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0g
ICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkg
Y29uc3Q7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5k
IGNsYXNzIFBhcmFsbGVsSm9iczsKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
cmFtZXRlcnMgewotICAgICAgICBGRUxpZ2h0aW5nKiBmaWx0ZXI7Ci0gICAgICAgIExpZ2h0aW5n
RGF0YSBkYXRhOwotICAgICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0
YTsKLSAgICAgICAgaW50IHlTdGFydDsKLSAgICAgICAgaW50IHlFbmQ7Ci0gICAgfTsKLQotICAg
IHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBwbHlHZW5l
cmljUGFyYW1ldGVycyopOwotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uV29ya2Vy
KEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uKik7Ci0KLSAgICBGRUxpZ2h0aW5nKEZpbHRl
ciYsIExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwotCi0gICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUxpZ2h0aW5nIjsgfQot
Ci0gICAgYm9vbCBkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmLCBpbnQsIGludCk7Ci0K
LSAgICB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0
IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3Rvclgs
IGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yKTsKLSAgICB2b2lkIHNldFBpeGVs
SW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3Vy
Y2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFj
dG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IsIGZsb2F0IGFscGhhKTsKLQotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHko
Y29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRYLCBpbnQgc3RhcnRZ
KTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNv
bnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotI2lmIENQVShBUk1fTkVPTikgJiYg
Q1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElCTEUpCi0gICAgc3Rh
dGljIGludCBnZXRQb3dlckNvZWZmaWNpZW50cyhmbG9hdCBleHBvbmVudCk7Ci0gICAgaW5saW5l
IHZvaWQgcGxhdGZvcm1BcHBseU5lb24oY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYpOwotI2VuZGlmCi0KLSAgICBMaWdodGluZ1R5cGUgbV9saWdo
dGluZ1R5cGU7Ci0gICAgUmVmPExpZ2h0U291cmNlPiBtX2xpZ2h0U291cmNlOwotCi0gICAgQ29s
b3IgbV9saWdodGluZ0NvbG9yOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0
ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJl
KEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBDb2xvciBtX2NvbG9yOwogICAgIGZsb2F0IG1fc3VyZmFjZVNjYWxlOwogICAgIGZs
b2F0IG1fZGlmZnVzZUNvbnN0YW50OwogICAgIGZsb2F0IG1fc3BlY3VsYXJDb25zdGFudDsKICAg
ICBmbG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7CiAgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3Ro
WDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhZOworICAgIFJlZjxMaWdodFNvdXJjZT4g
bV9zb3VyY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDBh
MjAwMDFiMTczYmQ4ZmRmNmJiYTYzNmNkMjNjZTQ3MDI2ZTdiM2YuLmE2MDQyOWFjNTQ4MmRlOGY2
ZWIyMmE5NmM4OWFlOTFjY2IzZGRkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNTEgKzIzLDQ5IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNZXJnZS5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0Lmgi
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1GRU1lcmdlOjpGRU1lcmdlKEZpbHRlciYgZmlsdGVyKQotICAgIDogRmls
dGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TWVyZ2UpCitSZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3Jl
YXRlKHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKQogeworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFTWVyZ2UobnVtYmVyT2ZFZmZlY3RJbnB1dHMpKTsKIH0KIAotUmVmPEZFTWVyZ2U+
IEZFTWVyZ2U6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK0ZFTWVyZ2U6OkZFTWVyZ2UodW5zaWdu
ZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVNZXJn
ZSkKKyAgICAsIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMobnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShmaWx0ZXIpKTsKKyAgICBBU1NFUlQo
bV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKK2NvbnN0IEF0b21TdHJpbmcmIEZFTWVyZ2U6OmVmZmVjdE5hbWUoKQogewot
ICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChz
aXplID4gMCk7CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9t
U3RyaW5nPiBzX2VmZmVjdE5hbWUoIkZFTWVyZ2UiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKK30KKworRmlsdGVyUmVzdWx0KiBG
RU1lcmdlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0
IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc3Rh
Y2suc2l6ZSgpID09IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogCi0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3Vs
dEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPFJlZjxGaWx0ZXJSZXN1bHQ+PiBp
bnB1dHM7CisgICAgZm9yIChhdXRvIGlucHV0c1NpemUgPSBtX251bWJlck9mRWZmZWN0SW5wdXRz
OyBpbnB1dHNTaXplLS07ICkKKyAgICAgICAgaW5wdXRzLmFwcGVuZChzdGFjay50YWtlTGFzdCgp
KTsKIAorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMg
fSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRl
ckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KGkpOwotICAgICAgICBpZiAoSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVm
ZmVyUmVzdWx0KCkpCi0gICAgICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpKTsKLSAgICB9CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCBpbnB1dHMsIG51
bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFTWVyZ2U6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlw
ZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAog
ewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTWVyZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHVuc2lnbmVkIHNp
emUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7Ci0gICAg
dHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3Ry
ZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgaW5wdXRFZmZlY3QoaSktPmV4dGVybmFsUmVwcmVz
ZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIi
IDw8IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmgKaW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThmMjYwNy4uYTFj
MDc4ZTAzMGE1N2I5ZjcxYzk3OWY5YzE5MmQ0ZGJiMWRjODNlYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDE2ICsyOSwyMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZm
ZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZShGaWx0ZXImKTsK
KyAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZSh1bnNpZ25lZCBtX251bWJlck9mRWZmZWN0
SW5wdXRzKTsKKworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAK
IHByaXZhdGU6Ci0gICAgRkVNZXJnZShGaWx0ZXImKTsKKyAgICBGRU1lcmdlKHVuc2lnbmVkIG51
bWJlck9mRWZmZWN0SW5wdXRzKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiAiRkVNZXJnZSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVy
cmlkZTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX251bWJlck9mRWZmZWN0SW5wdXRzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDhhN2U1YjY2N2Fi
NzczYjkwYjg5MGUzODM4NjM5MzU2MmI5ZDhkZjUuLmRiODgwYjRmOTI2YzBiOWQwYWQ5MzNiZGNl
NGNlMzEyN2JiMzUwOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMTggQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjY1ICsyNSw2NCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgogCi0jaW5jbHVkZSAiQ29s
b3JDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgotI2luY2x1ZGUgIkZpbHRl
ci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9i
cy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5o
IgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9n
eShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRp
dXNYLCBmbG9hdCByYWRpdXNZKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TW9y
cGhvbG9neSkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAgICwgbV9yYWRpdXNYKHJhZGl1c1gpCi0g
ICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKK1JlZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6
Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9s
b2d5KG1vcnBob2xvZ3lPcGVyYXRvciwgcmFkaXVzWCwgcmFkaXVzWSkpOwogfQogCi1SZWY8RkVN
b3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQorRkVNb3Jw
aG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRv
ciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBl
OjpGRU1vcnBob2xvZ3kpCisgICAgLCBtX21vcnBob2xvZ3lPcGVyYXRvcihtb3JwaG9sb2d5T3Bl
cmF0b3IpCisgICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKKyAgICAsIG1fcmFkaXVzWShyYWRpdXNZ
KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTW9ycGhvbG9neShmaWx0ZXIsIHR5cGUs
IHJhZGl1c1gsIHJhZGl1c1kpKTsKIH0KIAotYm9vbCBGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xv
Z3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCitib29sIEZFTW9ycGhvbG9n
eTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3Bl
cmF0b3IpCiB7Ci0gICAgaWYgKG1fdHlwZSA9PSB0eXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgbV90eXBlID0gdHlwZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX21vcnBob2xvZ3lPcGVyYXRvciwgbW9ycGhvbG9neU9wZXJhdG9yKSAhPSBtb3Jw
aG9sb2d5T3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNYKGZsb2F0
IHJhZGl1c1gpCiB7Ci0gICAgaWYgKG1fcmFkaXVzWCA9PSByYWRpdXNYKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgbV9yYWRpdXNYID0gcmFkaXVzWDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3JhZGl1c1gsIHJhZGl1c1gpICE9IG1fcmFkaXVzWDsK
IH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1koZmxvYXQgcmFkaXVzWSkKIHsKLSAg
ICBpZiAobV9yYWRpdXNZID09IHJhZGl1c1kpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X3JhZGl1c1kgPSByYWRpdXNZOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEZFTW9ycGhv
bG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewotICAgIEZsb2F0UmVjdCBwYWlu
dFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGaWx0ZXIm
IGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIHBhaW50UmVjdC5pbmZsYXRlKGZpbHRlci5z
Y2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAg
aWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZl
Y3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJl
Y3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJl
Y3QpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQg
eSwgaW50IHdpZHRoKQotewotICAgIHJldHVybiAoeSAqIHdpZHRoICsgeCkgKiA0OwotfQotCi1p
bmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9t
UGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkKLXsKLSAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOwotfQotCi1pbmxpbmUgUGFja2VkQ29sb3I6OlJH
QkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKLXsKLSAgICByZXR1cm4gUGFja2VkQ29sb3I6OlJH
QkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMpIH07Ci19
Ci0KLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiKQot
ewotICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAg
cmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKLQotICAgIHJldHVybiBwZXJDb21wb25lbnRN
YXgoYSwgYik7Ci19Ci0KLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFM
V0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwg
aW50IHlFbmQsIGludCB3aWR0aCkKLXsKLSAgICBhdXRvIGV4dHJlbXVtID0gbWFrZUNvbG9yQ29t
cG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRl
eCh4LCB5U3RhcnQsIHdpZHRoKSkgfSk7Ci0KLSAgICBmb3IgKGludCB5ID0geVN0YXJ0ICsgMTsg
eSA8IHlFbmQ7ICsreSkgewotICAgICAgICBhdXRvIHBpeGVsID0gbWFrZUNvbG9yQ29tcG9uZW50
c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5
LCB3aWR0aCkpIH0pOwotICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PHR5cGU+KGV4dHJlbXVt
LCBwaXhlbCk7Ci0gICAgfQotICAgIHJldHVybiBleHRyZW11bTsKLX0KLQotQUxXQVlTX0lOTElO
RSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwg
aW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUg
PT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4gY29sdW1uRXh0
cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihzcmNQaXhlbEFycmF5LCB4LCB5U3Rh
cnQsIHlFbmQsIHdpZHRoKTsKLQotICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRElMQVRFPihzcmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRo
KTsKLX0KLQotdXNpbmcgQ29sdW1uRXh0cmVtYSA9IFZlY3RvcjxDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4sIDE2PjsKLQotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgot
QUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0o
Y29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsKQotewotICAgIGF1dG8gZXh0cmVtdW0gPSBrZXJu
ZWxbMF07Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBrZXJuZWwuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVtdW0sIGtlcm5lbFtpXSk7Ci0K
LSAgICByZXR1cm4gZXh0cmVtdW07Ci19Ci0KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwg
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlID09IEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9S
UEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsKLQotICAgIHJldHVybiBrZXJuZWxFeHRy
ZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihrZXJuZWwpOwotfQotCi12b2lkIEZF
TW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIGludCBzdGFydFksIGludCBlbmRZKQotewotICAgIEFTU0VSVChlbmRZID4gc3Rh
cnRZKTsKLQotICAgIGNvbnN0IGF1dG8mIHNyY1BpeGVsQXJyYXkgPSAqcGFpbnRpbmdEYXRhLnNy
Y1BpeGVsQXJyYXk7Ci0gICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuZHN0
UGl4ZWxBcnJheTsKLQotICAgIGNvbnN0IGludCByYWRpdXNYID0gcGFpbnRpbmdEYXRhLnJhZGl1
c1g7Ci0gICAgY29uc3QgaW50IHJhZGl1c1kgPSBwYWludGluZ0RhdGEucmFkaXVzWTsKLSAgICBj
b25zdCBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgY29uc3QgaW50IGhlaWdo
dCA9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0KLSAgICBBU1NFUlQocmFkaXVzWCA8PSB3aWR0aCB8
fCByYWRpdXNZIDw9IGhlaWdodCk7Ci0gICAgQVNTRVJUKHN0YXJ0WSA+PSAwICYmIGVuZFkgPD0g
aGVpZ2h0ICYmIHN0YXJ0WSA8IGVuZFkpOwotCi0gICAgQ29sdW1uRXh0cmVtYSBleHRyZW1hOwot
ICAgIGV4dHJlbWEucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyICogcmFkaXVzWCArIDEpOwotCi0g
ICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgeVJh
ZGl1c1N0YXJ0ID0gc3RkOjptYXgoMCwgeSAtIHJhZGl1c1kpOwotICAgICAgICBpbnQgeVJhZGl1
c0VuZCA9IHN0ZDo6bWluKGhlaWdodCwgeSArIHJhZGl1c1kgKyAxKTsKLQotICAgICAgICBleHRy
ZW1hLnNocmluaygwKTsKLQotICAgICAgICAvLyBXZSBzdGFydCBhdCB0aGUgbGVmdCBlZGdlLCBz
byBjb21wdXRlIGV4dHJlbWUgZm9yIHRoZSByYWRpdXNYIGNvbHVtbnMuCi0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgcmFkaXVzWDsgKyt4KQotICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQo
Y29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5k
LCB3aWR0aCwgbV90eXBlKSk7Ci0KLSAgICAgICAgLy8gS2VybmVsIGlzIGZpbGxlZCwgZ2V0IGV4
dHJlbWEgb2YgbmV4dCBjb2x1bW4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
Kyt4KSB7Ci0gICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVzWCkKLSAgICAgICAgICAg
ICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4ICsgcmFk
aXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgbV90eXBlKSk7Ci0KLSAgICAg
ICAgICAgIGlmICh4ID4gcmFkaXVzWCkKLSAgICAgICAgICAgICAgICBleHRyZW1hLnJlbW92ZSgw
KTsKLQotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQqPihkc3RQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3
aWR0aCkpOwotICAgICAgICAgICAgKmRlc3RQaXhlbCA9IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9y
Q29tcG9uZW50cyhrZXJuZWxFeHRyZW11bShleHRyZW1hLCBtX3R5cGUpKS52YWx1ZTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIo
UGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtKQotewotICAgIHBhcmFtLT5maWx0ZXItPnBs
YXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBw
YXJhbS0+ZW5kWSk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9yYWRpdXNZLCByYWRpdXNZ
KSAhPSBtX3JhZGl1c1k7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNv
bnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorRmxvYXRSZWN0IEZFTW9ycGhvbG9neTo6
ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVseSBs
aW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQg
MC42NS4KLSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNY
ICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUo
KSA9PSAxKTsKKyAgICBhdXRvIGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgp
OwogCi0gICAgc3RhdGljIGNvbnN0IGludCBtaW5pbWFsQXJlYSA9ICgxNjAgKiAxNjApOyAvLyBF
bXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotICAgIAotICAgIHVuc2lnbmVk
IG1heE51bVRocmVhZHMgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gODsKLSAgICB1bnNpZ25lZCBv
cHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KChwYWludGluZ0RhdGEud2lk
dGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICoga2VybmVsRmFjdG9yKSAvIG1pbmltYWxBcmVhLCBt
YXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAg
ICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9i
cygmV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFsVGhy
ZWFkTnVtYmVyKTsKLSAgICAgICAgYXV0byBudW1PZlRocmVhZHMgPSBwYXJhbGxlbEpvYnMubnVt
YmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChudW1PZlRocmVhZHMgPiAxKSB7Ci0gICAgICAgICAg
ICAvLyBTcGxpdCB0aGUgam9iIGludG8gImpvYlNpemUiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEg
ZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQotICAgICAgICAg
ICAgLy8gam9iU2l6ZSAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRs
ZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAgICBpbnQgam9i
U2l6ZSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyBudW1PZlRocmVhZHM7Ci0gICAgICAgICAgICBp
bnQgam9ic1dpdGhFeHRyYSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgJSBudW1PZlRocmVhZHM7Ci0g
ICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0g
bnVtT2ZUaHJlYWRzIC0gMTsgam9iID49IDA7IC0tam9iKSB7Ci0gICAgICAgICAgICAgICAgUGxh
dGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2Ip
OwotICAgICAgICAgICAgICAgIHBhcmFtLmZpbHRlciA9IHRoaXM7Ci0gICAgICAgICAgICAgICAg
cGFyYW0uc3RhcnRZID0gY3VycmVudFk7Ci0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9i
IDwgam9ic1dpdGhFeHRyYSA/IGpvYlNpemUgKyAxIDogam9iU2l6ZTsKLSAgICAgICAgICAgICAg
ICBwYXJhbS5lbmRZID0gY3VycmVudFk7Ci0gICAgICAgICAgICAgICAgcGFyYW0ucGFpbnRpbmdE
YXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhcmFsbGVs
Sm9icy5leGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZCBtb2RlbAotICAgIH0KKyAgICBkcmF3aW5nUmVj
dC5pbmZsYXRlKGdlb21ldHJ5LnJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzKHsgbV9yYWRpdXNY
LCBtX3JhZGl1c1kgfSkpOwogCi0gICAgcGxhdGZvcm1BcHBseUdlbmVyaWMocGFpbnRpbmdEYXRh
LCAwLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsKLX0KLQotYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRm
b3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25z
dCBJbnRSZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKLXsKLSAgICBp
ZiAocmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKSkg
ewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgICAgIGlu
LT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBpbWFnZVJlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihk
cmF3aW5nUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFTW9ycGhvbG9neTo6YXBw
bHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdl
QnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3Vu
ZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGlu
ID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRw
dXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+
ZGF0YSgpOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAg
ICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVs
QnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLQotICAgIEludFNpemUgcmFkaXVzID0g
Zmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7Ci0gICAgaWYg
KHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJh
d2luZ1JlY3QsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGF1dG8gc291
cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKLSAgICBpbnQg
cmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMu
d2lkdGgoKSk7Ci0gICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5o
ZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7Ci0KLSAgICBpZiAocGxhdGZvcm1BcHBseURl
Z2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVz
WCwgcmFkaXVzWSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBQYWludGluZ0RhdGEgcGFp
bnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxB
cnJheS5nZXQoKTsKLSAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlv
blBpeGVsQXJyYXk7Ci0gICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2lu
Z1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEu
aGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgKiBmaWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYICogZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2VpbGYocmFk
aXVzWSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIHBsYXRmb3JtQXBwbHkocGFpbnRp
bmdEYXRhKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0
ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUp
CitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9y
cGhvbG9neU9wZXJhdG9yJiBtb3JwaG9sb2d5T3BlcmF0b3IpCiB7Ci0gICAgc3dpdGNoICh0eXBl
KSB7CisgICAgc3dpdGNoIChtb3JwaG9sb2d5T3BlcmF0b3IpIHsKICAgICBjYXNlIEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICB0cyA8PCAiVU5LTk9XTiI7CiAgICAgICAg
IGJyZWFrOwpAQCAtMjk3LDE1ICs5NiwxMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSYgdHlwZQogICAg
IHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRU1vcnBob2xvZ3k6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlTW9ycGhvbG9neSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBvcGVyYXRv
cj1cIiIgPDwgbW9ycGhvbG9neU9wZXJhdG9yKCkgPDwgIlwiICIKICAgICAgICA8PCAicmFkaXVz
PVwiIiA8PCByYWRpdXNYKCkgPDwgIiwgIiA8PCByYWRpdXNZKCkgPDwgIlwiXVxuIjsKLQotICAg
IFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVj
dCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJl
dHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggNDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2Yx
NGVkZjA3NWRlMzljNWExMS4uMzAwYTVlOTYyM2UwZWY4NGI4ZjQwZDhkYzI2NDU4ODdmZjllN2Rk
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1vcnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMiwxMSArMjMsMTAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsKK2VudW0gTW9ycGhvbG9neU9w
ZXJhdG9yIHsKICAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTiA9IDAsCiAgICAgRkVN
T1JQSE9MT0dZX09QRVJBVE9SX0VST0RFID0gMSwKICAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1Jf
RElMQVRFID0gMgpAQCAtMzQsMTAgKzM0LDEwIEBAIGVudW0gTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSB7CiAKIGNsYXNzIEZFTW9ycGhvbG9neSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoRmlsdGVyJiwgTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CisgICAgc3RhdGlj
IFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3JwaG9s
b2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldE1vcnBo
b2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKKyAgICBNb3JwaG9sb2d5T3Bl
cmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9tb3JwaG9sb2d5T3Bl
cmF0b3I7IH0KKyAgICBib29sIHNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0
b3IpOwogCiAgICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWDsgfQog
ICAgIGJvb2wgc2V0UmFkaXVzWChmbG9hdCk7CkBAIC00Niw0MCArNDYsMTkgQEAgcHVibGljOgog
ICAgIGJvb2wgc2V0UmFkaXVzWShmbG9hdCk7CiAKIHByaXZhdGU6Ci0gICAgRkVNb3JwaG9sb2d5
KEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJh
ZGl1c1kpOworICAgIEZFTW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuICJGRU1vcnBob2xvZ3kiOyB9CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0
KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91
bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25z
dCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBwbGF0Zm9y
bUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3Qg
SW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdHJ1Y3QgUGFpbnRpbmdE
YXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0g
ICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lk
dGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGludCByYWRpdXNYOwotICAgICAgICBp
bnQgcmFkaXVzWTsKLSAgICB9OwotCi0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJz
IHsKLSAgICAgICAgRkVNb3JwaG9sb2d5KiBmaWx0ZXI7Ci0gICAgICAgIGludCBzdGFydFk7Ci0g
ICAgICAgIGludCBlbmRZOwotICAgICAgICBjb25zdCBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0
YTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9y
bUFwcGx5UGFyYW1ldGVycyopOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50
aW5nRGF0YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdE
YXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwotCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSBtX3R5cGU7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1fbW9ycGhvbG9neU9wZXJhdG9yOwog
ICAgIGZsb2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBtX3JhZGl1c1k7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApp
bmRleCAwMjcwZGI5MjQ4MWEzMzkyZDNkNWExZTkxN2MyZDY1YWE0MTQwZjY5Li5kZGE2NjVkNzUy
ZmI1MDBkNmIwODZiNjQ5YTdmODBhNWFjOGIwOWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtNCw2ICs0LDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcxICsyNSw0OCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRkVPZmZzZXQ6OkZFT2Zmc2V0KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBkeCwgZmxvYXQg
ZHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpPZmZzZXQpCitGRU9mZnNldDo6
RkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZF
T2Zmc2V0KQogICAgICwgbV9keChkeCkKICAgICAsIG1fZHkoZHkpCiB7CiB9CiAKLVJlZjxGRU9m
ZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5
KQorUmVmPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChmaWx0ZXIsIGR4LCBkeSkpOworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGR4LCBkeSkpOwogfQogCi12b2lkIEZFT2Zm
c2V0OjpzZXREeChmbG9hdCBkeCkKK0Zsb2F0UmVjdCBGRU9mZnNldDo6ZHJhd2luZ1JlY3QoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9t
ZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAg
bV9keCA9IGR4OwotfQorICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8g
ZHJhd2luZ1JlY3QgPSBpbnB1dHNbMF0tPmRyYXdpbmdSZWN0KCk7CiAKLXZvaWQgRkVPZmZzZXQ6
OnNldER5KGZsb2F0IGR5KQotewotICAgIG1fZHkgPSBkeTsKLX0KKyAgICBkcmF3aW5nUmVjdC5t
b3ZlKGdlb21ldHJ5LnJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzKHsgbV9keCwgbV9keSB9KSk7
CiAKLXZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICBG
bG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7
Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBwYWludFJlY3QubW92
ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KSk7Ci0gICAg
aWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZl
Y3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJl
Y3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJl
Y3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGRyYXdp
bmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZFT2Zmc2V0OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRU9mZnNldDo6YXBwbHkoRmlsdGVyT3V0
cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwgY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91
bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwor
ICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxh
c3QoKTsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIGlm
IChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5z
Y2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24pOwor
ICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiB9LCBudWxscHRyLCBnZW9tZXRy
eSwgYm91bmRhcnlTZXQpOwogfQogCi1UZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0
aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8
IGluZGVudCA8PCAiW2ZlT2Zmc2V0IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIGR4PVwiIiA8PCBkeCgp
IDw8ICJcIiBkeT1cIiIgPDwgZHkoKSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5k
ZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmgKaW5kZXggNjVhYmRhOTBhNDdiMWJmZTc2YWU1Yzc0YWFiNWFhMTY3ZmIxZTY5ZS4uODFiNGFk
MWFhMDkwYTZmYzVkODRmMDg3ZWY5NTA4YzAzZjkyNjk2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAtMiw2ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMzQgKzIzLDY0IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZp
bHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFT2Zmc2V0IDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRl
KEZpbHRlciYsIGZsb2F0IGR4LCBmbG9hdCBkeSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSk7CiAKICAgICBmbG9hdCBk
eCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7IH0KLSAgICB2b2lkIHNldER4KGZsb2F0KTsKKyAgICB2
b2lkIHNldER4KGZsb2F0IGR4KSB7IG1fZHggPSBkeDsgfQogCiAgICAgZmxvYXQgZHkoKSBjb25z
dCB7IHJldHVybiBtX2R5OyB9Ci0gICAgdm9pZCBzZXREeShmbG9hdCk7CisgICAgdm9pZCBzZXRE
eShmbG9hdCBkeSkgeyBtX2R5ID0gZHk7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVPZmZzZXQ+PiBkZWNvZGUoRGVjb2RlciYpOwog
CiBwcml2YXRlOgotICAgIEZFT2Zmc2V0KEZpbHRlciYsIGZsb2F0IGR4LCBmbG9hdCBkeSk7Cisg
ICAgRkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVPZmZzZXQiOyB9CiAKLSAgICB2b2lkIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIAotICAgIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3Qo
Y29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jiwg
Y29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jiwg
Y29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0
ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1f
ZHg7CiAgICAgZmxvYXQgbV9keTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lk
IEZFT2Zmc2V0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVy
IDw8IG1fZHg7CisgICAgZW5jb2RlciA8PCBtX2R5OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVPZmZzZXQ+PiBGRU9mZnNldDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHg7CisgICAgZGVjb2Rl
ciA+PiBkeDsKKyAgICBpZiAoIWR4KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHk7CisgICAgZGVjb2RlciA+PiBkeTsKKyAgICBpZiAo
IWR5KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFT2Zmc2V0
OjpjcmVhdGUoKmR4LCAqZHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVPZmZzZXQpCisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBl
ZmZlY3QudHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU9mZnNldDsg
fQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcu
Y3BwCmluZGV4IDU5OTcyMzA2ODg2YTYzZmE0MTJiNWI3MTQxZjc0ZjljNDg3YTE0NGMuLjY5OTI0
NDMzZjkzZmU0ZjIxZmViYmFiZjQ4NDQ1ODc2NmVlZTZjOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTIyLDQ5ICsyMywyNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFU3BlY3VsYXJMaWdodGluZy5oIgogCi0jaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVT
cGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFy
Q29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNl
KQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIsIFNwZWN1bGFyTGlnaHRpbmcsIGxpZ2h0aW5nQ29s
b3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwg
a2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNl
KSwgVHlwZTo6U3BlY3VsYXJMaWdodGluZykKK1JlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3Bl
Y3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNj
YWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNv
dXJjZT4mJiBzb3VyY2UpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxp
Z2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhw
b25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShzb3Vy
Y2UpKSk7CiB9CiAKLVJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGluZzo6
Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQg
c3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9u
ZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJl
ZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK0ZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVj
dWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9h
dCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBz
b3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFy
Q29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0
TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpLCBUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGZpbHRlciwgbGlnaHRp
bmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50
LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3Vy
Y2UpKSk7CiB9CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6fkZFU3BlY3VsYXJMaWdodGluZygpID0g
ZGVmYXVsdDsKLQotYm9vbCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyQ29uc3RhbnQo
ZmxvYXQgc3BlY3VsYXJDb25zdGFudCkKLXsKLSAgICBpZiAobV9zcGVjdWxhckNvbnN0YW50ID09
IHNwZWN1bGFyQ29uc3RhbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NwZWN1bGFy
Q29uc3RhbnQgPSBzcGVjdWxhckNvbnN0YW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCBzcGVjdWxhckV4
cG9uZW50KQotewotICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gc3BlY3VsYXJFeHBvbmVu
dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3BlY3VsYXJFeHBvbmVudCA9IHNwZWN1
bGFyRXhwb25lbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVRleHRTdHJlYW0mIEZFU3BlY3Vs
YXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVTcGVjdWxh
ckxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVNwZWN1bGFy
TGlnaHRpbmciOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
cmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZh
Y2VTY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJzcGVjdWFsQ29uc3RhbnQ9XCIiIDw8IG1fc3Bl
Y3VsYXJDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8ICJzcGVjdWxhckV4cG9uZW50PVwiIiA8
PCBtX3NwZWN1bGFyRXhwb25lbnQgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVu
dFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1
bGFyTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmgKaW5kZXggZTk5OGE3NjA1ZDFlNDczNWQ5ZjQ5Nzk4ZDM5ODE4
YmYzYjI0OTU4YS4uY2FlNWI4MmZiZWJjNWFiNjM0MzU2OTA1ZTliZTdlNmYzZjAzMmY3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1
bGFyTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNywyMCArMjgsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBGRVNwZWN1bGFyTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBj
b25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0
U291cmNlPiYmKTsKLSAgICB2aXJ0dWFsIH5GRVNwZWN1bGFyTGlnaHRpbmcoKTsKKyAgICBzdGF0
aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxM
aWdodFNvdXJjZT4mJik7CiAKLSAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9zcGVjdWxhckNvbnN0YW50OyB9Ci0gICAgYm9vbCBzZXRTcGVjdWxhckNvbnN0YW50
KGZsb2F0KTsKLQotICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBt
X3NwZWN1bGFyRXhwb25lbnQ7IH0KLSAgICBib29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQp
OworcHJpdmF0ZToKKyAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCBz
dXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmKTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biAiRkVTcGVjdWxhckxpZ2h0aW5nIjsgfQogCi1wcml2YXRlOgotICAgIEZFU3BlY3VsYXJMaWdo
dGluZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNv
bnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXgg
MzVjNTFjYmIyMjlkZWU5NjQyZGMxZTdkY2EwYzVkYjJmY2FjMjBhZC4uOTM2YTk4MTI0NGQ1ODM0
NGNlYjc0MTkxMmNmYjIwNjEyNTdlMTE5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdt
YWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSw4MCArMjIsNDEgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRVRpbGUuaCIKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5j
bHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZFVGlsZTo6RkVUaWxlKEZpbHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6VGlsZSkKK1JlZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKCkKIHsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoKSk7CiB9CiAKLVJlZjxGRVRpbGU+IEZFVGlsZTo6
Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVUaWxlOjpGRVRpbGUoKQorICAgIDogRmlsdGVyRWZm
ZWN0KFR5cGU6OkZFVGlsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoZmls
dGVyKSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRS
ZWN0IEZFVGlsZTo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3QKIHsKLS8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFy
b3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhlcndp
c2UuCi0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFn
ZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJl
c3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBo
YUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMg
bW9yZSBhdHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBn
aXZlcyB0aGUKLSAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhp
cyBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCi0gICAgRmxv
YXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IGlu
TWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwotICAgIEZsb2F0UG9pbnQg
bWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKLSAgICBpZiAo
aW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQpIHsK
LSAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICAgICAgdGlsZVJl
Y3QgPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAgICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRl
ci5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5o
ZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOwotICAgIGlmICghdGls
ZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJbWFn
ZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LnRy
YW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9uLnko
KSk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi0+
YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKLQotICAgIGF1dG8gdGlsZUltYWdlQ29w
eSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdlKSk7
Ci0gICAgaWYgKCF0aWxlSW1hZ2VDb3B5KQotICAgICAgICByZXR1cm47CisgICAgLy8gRG9uJ3Qg
dXNlIHRoZSBpbnB1dCdzIGRyYXdpbmdSZWN0IGZvciA8ZmVUaWxlPi4KKyAgICByZXR1cm4gcHJp
bWl0aXZlU3VicmVnaW9uOworfQogCi0gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zv
cm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUoaW5NYXhFZmZlY3RMb2NhdGlvbiAt
IG1heEVmZmVjdExvY2F0aW9uKTsKK0ZpbHRlclJlc3VsdCogRkVUaWxlOjphcHBseShGaWx0ZXJP
dXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBi
b3VuZGFyeVNldCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAg
YXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJu
OjpjcmVhdGUodGlsZUltYWdlQ29weS5yZWxlYXNlTm9uTnVsbCgpLCB7IHRydWUsIHRydWUsIHBh
dHRlcm5UcmFuc2Zvcm0gfSk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMo
KS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEdyYXBoaWNz
Q29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmls
dGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJD
b250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51
bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFVGlsZTo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBl
IHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVUaWxlOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
LSAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVRpbGUiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICJdXG4iOwot
Ci0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0
RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0K
KyAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVRpbGVdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgK
aW5kZXggNDliZDk5ZjA5NDQ3ZGFlMWNmMDlhZjEyMzU4YzZkZTg0MDY4NzcxNC4uYzcwZGFjMTdk
OGFkYzVhM2IyODBiZDc5MmY3MjI0YjcwYjc5ZTNhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCkBAIC0yLDYgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwyNyArMjMsMjUgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNsYXNzIEZFVGlsZSA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoRmlsdGVy
Jik7CisgICAgc3RhdGljIFJlZjxGRVRpbGU+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgotICAgIEZF
VGlsZShGaWx0ZXImKTsKKyAgICBGRVRpbGUoKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVUaWxlIjsgfQogCi0gICAgRmlsdGVyRWZmZWN0
VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmlsdGVyRWZm
ZWN0VHlwZVRpbGU7IH0KKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRl
ck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBv
dmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CmluZGV4IGFjMjM0NmU4YTRiYTU4YWFhOTI0YTZkNjdiZDVlNGI3N2RkMjI2OGYuLjRkOTk3NmNi
YmQ2MDQxMWUzYzM2YTY5NDdjMzk5MWUxOTk3NWFlYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAg
LTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5m
LnUtc3plZ2VkLmh1PgogICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Vi
a2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYs
MzEgKzI2LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUdXJidWxlbmNl
LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8qCi0gICAgUHJvZHVjZXMgcmVzdWx0cyBp
biB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0gMl0uIEFsZ29yaXRobSBpczoKLSAgICByID0gKGEgKiBy
KSBtb2QgbSB3aGVyZSBhID0gcmFuZEFtcGxpdHVkZSA9IDE2ODA3IGFuZAotICAgIG0gPSByYW5k
TWF4aW11bSA9IDIqKjMxIC0gMSA9IDIxNDc0ODM2NDcsIHIgPSBzZWVkLgotICAgIFNlZSBbUGFy
ayAmIE1pbGxlcl0sIENBQ00gdm9sLiAzMSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4Ci0gICAg
VG8gdGVzdDogdGhlIGFsZ29yaXRobSBzaG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgw
NjUKLSAgICBhcyB0aGUgMTAsMDAwdGggZ2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwg
c2VlZCBpcyAxLgotKi8KLXN0YXRpYyBjb25zdCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7Ci1z
dGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAx
Ci1zdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmlt
aXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0g
LyBhCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFIgPSAyODM2OyAvLyBtICUgYQorUmVmPEZFVHVy
YnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxv
YXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3Rh
dmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOworfQogCi1GRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5j
ZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9v
bCBzdGl0Y2hUaWxlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlR1cmJ1bGVu
Y2UpCi0gICAgLCBtX3R5cGUodHlwZSkKK0ZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1
bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVz
KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFVHVyYnVsZW5jZSkKKyAgICAsIG1fdHVyYnVs
ZW5jZVR5cGUodHVyYnVsZW5jZVR5cGUpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVx
dWVuY3lYKQogICAgICwgbV9iYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKICAgICAsIG1f
bnVtT2N0YXZlcyhudW1PY3RhdmVzKQpAQCAtNTksNDA1ICs0Nyw0NyBAQCBGRVR1cmJ1bGVuY2U6
OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQg
YmFzZUZyZXF1ZQogewogfQogCi1SZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0
ZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9v
bCBzdGl0Y2hUaWxlcykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2Uo
ZmlsdGVyLCB0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMs
IHNlZWQsIHN0aXRjaFRpbGVzKSk7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRUeXBlKFR1
cmJ1bGVuY2VUeXBlIHR5cGUpCitib29sIEZFVHVyYnVsZW5jZTo6c2V0VHVyYnVsZW5jZVR5cGUo
VHVyYnVsZW5jZVR5cGUgdHVyYnVsZW5jZVR5cGUpCiB7Ci0gICAgaWYgKG1fdHlwZSA9PSB0eXBl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV90eXBlID0gdHlwZTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKGZsb2F0IGJh
c2VGcmVxdWVuY3lZKQotewotICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lZID09IGJhc2VGcmVxdWVu
Y3lZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYXNlRnJlcXVlbmN5WSA9IGJhc2VG
cmVxdWVuY3lZOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1f
dHVyYnVsZW5jZVR5cGUsIHR1cmJ1bGVuY2VUeXBlKSAhPSBtX3R1cmJ1bGVuY2VUeXBlOwogfQog
CiBib29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVgoZmxvYXQgYmFzZUZyZXF1ZW5j
eVgpCiB7Ci0gICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVggPT0gYmFzZUZyZXF1ZW5jeVgpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Jhc2VGcmVxdWVuY3lYID0gYmFzZUZyZXF1ZW5jeVg7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9iYXNlRnJlcXVl
bmN5WCwgYmFzZUZyZXF1ZW5jeVgpICE9IG1fYmFzZUZyZXF1ZW5jeVg7CiB9CiAKLWJvb2wgRkVU
dXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNlZWQpCitib29sIEZFVHVyYnVsZW5jZTo6c2V0QmFz
ZUZyZXF1ZW5jeVkoZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCiB7Ci0gICAgaWYgKG1fc2VlZCA9PSBz
ZWVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zZWVkID0gc2VlZDsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Jhc2VGcmVxdWVuY3lZLCBiYXNl
RnJlcXVlbmN5WSkgIT0gbV9iYXNlRnJlcXVlbmN5WTsKIH0KIAogYm9vbCBGRVR1cmJ1bGVuY2U6
OnNldE51bU9jdGF2ZXMoaW50IG51bU9jdGF2ZXMpCiB7Ci0gICAgaWYgKG1fbnVtT2N0YXZlcyA9
PSBudW1PY3RhdmVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9udW1PY3RhdmVzID0g
bnVtT2N0YXZlczsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNl
dFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoKQotewotICAgIGlmIChtX3N0aXRjaFRpbGVzID09IHN0
aXRjaCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3RpdGNoVGlsZXMgPSBzdGl0Y2g7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRoZSB0dXJidWxlbmNlIGNhbGN1bGF0aW9uIGNv
ZGUgaXMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9mIHdoYXQgYXBwZWFycyBpbiB0aGUgU1ZHIDEuMSBz
cGVjaWZpY2F0aW9uOgotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1s
I2ZlVHVyYnVsZW5jZQotCi0vLyBDb21wdXRlIHBzZXVkbyByYW5kb20gbnVtYmVyLgotaW5saW5l
IGxvbmcgRkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSgpCi17Ci0gICAgbG9uZyBy
ZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAqIChz
ZWVkIC8gc19yYW5kUSk7Ci0gICAgaWYgKHJlc3VsdCA8PSAwKQotICAgICAgICByZXN1bHQgKz0g
c19yYW5kTWF4aW11bTsKLSAgICBzZWVkID0gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLWlubGluZSBmbG9hdCBzbW9vdGhDdXJ2ZShmbG9hdCB0KQotewotICAgIHJldHVybiB0ICog
dCAqICgzIC0gMiAqIHQpOwotfQotCi1pbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihm
bG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhICsgdCAqIChiIC0gYSk7
Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEpCi17Ci0gICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvcjsKLQotICAgIC8vIFRoZSBz
ZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwgc19yYW5kTWF4aW11bSAtIDFdLgotICAg
IGlmIChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQotICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9
IC0ocGFpbnRpbmdEYXRhLnNlZWQgJSAoc19yYW5kTWF4aW11bSAtIDEpKSArIDE7Ci0gICAgaWYg
KHBhaW50aW5nRGF0YS5zZWVkID4gc19yYW5kTWF4aW11bSAtIDEpCi0gICAgICAgIHBhaW50aW5n
RGF0YS5zZWVkID0gc19yYW5kTWF4aW11bSAtIDE7Ci0KLSAgICBmbG9hdCogZ3JhZGllbnQ7Ci0g
ICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBw
YWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gaTsKLSAgICAgICAgICAgIGdyYWRpZW50
ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldOwotICAgICAgICAgICAgZG8gewot
ICAgICAgICAgICAgICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGlu
Z0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Js
b2NrU2l6ZTsKLSAgICAgICAgICAgICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0
PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1Np
emUpIC8gc19ibG9ja1NpemU7Ci0gICAgICAgICAgICB9IHdoaWxlICghZ3JhZGllbnRbMF0gJiYg
IWdyYWRpZW50WzFdKTsKLSAgICAgICAgICAgIG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5
cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBncmFkaWVudFswXSAv
PSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAgICAgICAgZ3JhZGllbnRbMV0gLz0gbm9ybWFs
aXphdGlvbkZhY3RvcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSBzX2Js
b2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgaW50IGsgPSBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBpbnQgaiA9IHBhaW50aW5nRGF0YS5yYW5kb20o
KSAlIHNfYmxvY2tTaXplOwotICAgICAgICBBU1NFUlQoaiA+PSAwKTsKLSAgICAgICAgQVNTRVJU
KGogPCAyICogc19ibG9ja1NpemUgKyAyKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VT
ZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal07Ci0gICAgICAgIHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal0gPSBrOwotICAgIH0KLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc19ibG9ja1NpemUgKyAyOyArK2kpIHsKLSAgICAgICAgcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltzX2Jsb2NrU2l6ZSArIGldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VT
ZWxlY3RvcltpXTsKLSAgICAgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyAr
K2NoYW5uZWwpIHsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtz
X2Jsb2NrU2l6ZSArIGldWzBdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzBd
OwotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXpl
ICsgaV1bMV0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMV07Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLUZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2U6OmNv
bXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBm
bG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3N0aXRjaFRpbGVzKQot
ICAgICAgICByZXR1cm4geyB9OwotCi0gICAgZmxvYXQgdGlsZVdpZHRoID0gdGlsZVNpemUud2lk
dGgoKTsKLSAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gdGlsZVNpemUuaGVpZ2h0KCk7Ci0gICAgQVNT
RVJUKHRpbGVXaWR0aCA+IDAgJiYgdGlsZUhlaWdodCA+IDApOwotCi0gICAgLy8gV2hlbiBzdGl0
Y2hpbmcgdGlsZWQgdHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQK
LSAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgotICAg
IGlmIChiYXNlRnJlcXVlbmN5WCkgewotICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9v
cmYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOwotICAgICAgICBmbG9h
dCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGls
ZVdpZHRoOwotICAgICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUg
YWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KLSAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lYIC8g
bG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAg
ICAgYmFzZUZyZXF1ZW5jeVggPSBsb3dGcmVxdWVuY3k7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGJhc2VGcmVxdWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsKLSAgICB9Ci0gICAgaWYgKGJhc2VG
cmVxdWVuY3lZKSB7Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlSGVp
Z2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKLSAgICAgICAgZmxvYXQgaGlnaEZy
ZXF1ZW5jeSA9IGNlaWxmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0
OwotICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVl
bmN5IC8gYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGxvd0Zy
ZXF1ZW5jeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBoaWdo
RnJlcXVlbmN5OwotICAgIH0KLQotICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKLSAgICBzdGl0
Y2hEYXRhLndpZHRoID0gcm91bmRmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKTsKLSAgICBz
dGl0Y2hEYXRhLndyYXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7Ci0gICAg
c3RpdGNoRGF0YS5oZWlnaHQgPSByb3VuZGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsK
LSAgICBzdGl0Y2hEYXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0
OwotCi0gICAgcmV0dXJuIHN0aXRjaERhdGE7Ci19Ci0KLS8vIFRoaXMgaXMgdGFrZW4gMToxIGZy
b20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1
cmJ1bGVuY2VFbGVtZW50LgotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6
Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERh
dGEmIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKSBjb25zdAotewot
ICAgIHN0cnVjdCBOb2lzZVBvc2l0aW9uIHsKLSAgICAgICAgaW50IGluZGV4OyAvLyBieDAsIGJ5
MCBpbiB0aGUgc3BlYyB0ZXh0LgotICAgICAgICBpbnQgbmV4dEluZGV4OyAvLyBieDEsIGJ5MSBp
biB0aGUgc3BlYyB0ZXh0LgotICAgICAgICBmbG9hdCBmcmFjdGlvbjsgLy8gcngwLCByeTAgaW4g
dGhlIHNwZWMgdGV4dC4KLQotICAgICAgICBOb2lzZVBvc2l0aW9uKGZsb2F0IGNvbXBvbmVudCkK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gIHQgPSB2ZWNbMF0gKyBQZXJsaW5OOwotICAgICAg
ICAgICAgLy8gIGJ4MCA9IChpbnQpdDsKLSAgICAgICAgICAgIC8vICBieDEgPSBieDArMTsKLSAg
ICAgICAgICAgIC8vICByeDAgPSB0IC0gKGludCl0OwotICAgICAgICAgICAgZmxvYXQgcG9zaXRp
b24gPSBjb21wb25lbnQgKyBzX3Blcmxpbk5vaXNlOwotICAgICAgICAgICAgaW5kZXggPSBzdGF0
aWNfY2FzdDxpbnQ+KHBvc2l0aW9uKTsKLSAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4ICsg
MTsKLSAgICAgICAgICAgIGZyYWN0aW9uID0gcG9zaXRpb24gLSBpbmRleDsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgdm9pZCBzdGl0Y2goaW50IHNpemUsIGludCB3cmFwU2l6ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gaWYgKGJ4MCA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQot
ICAgICAgICAgICAgLy8gICBieDAgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKLSAgICAgICAgICAg
IGlmIChpbmRleCA+PSB3cmFwU2l6ZSkKLSAgICAgICAgICAgICAgICBpbmRleCAtPSBzaXplOwot
Ci0gICAgICAgICAgICAvLyBpZiAoYngxID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAg
ICAgICAvLyAgIGJ4MSAtPSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAgICAgICAgICAgaWYgKG5l
eHRJbmRleCA+PSB3cmFwU2l6ZSkKLSAgICAgICAgICAgICAgICBuZXh0SW5kZXggLT0gc2l6ZTsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWChub2lzZVZlY3Rv
ci54KCkpOwotICAgIE5vaXNlUG9zaXRpb24gbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7Ci0KLSAg
ICAvLyBJZiBzdGl0Y2hpbmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KLSAg
ICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICBub2lzZVguc3RpdGNoKHN0aXRjaERhdGEu
d2lkdGgsIHN0aXRjaERhdGEud3JhcFgpOwotICAgICAgICBub2lzZVkuc3RpdGNoKHN0aXRjaERh
dGEuaGVpZ2h0LCBzdGl0Y2hEYXRhLndyYXBZKTsKLSAgICB9Ci0KLSAgICAvLyBieDAgJj0gQk07
Ci0gICAgLy8gYngxICY9IEJNOwotICAgIC8vIGJ5MCAmPSBCTTsKLSAgICAvLyBieTEgJj0gQk07
Ci0gICAgbm9pc2VYLmluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWC5uZXh0SW5kZXgg
Jj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLmluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5v
aXNlWS5uZXh0SW5kZXggJj0gc19ibG9ja01hc2s7Ci0KLSAgICAvLyBpID0gdUxhdHRpY2VTZWxl
Y3RvcltieDBdOwotICAgIC8vIGogPSB1TGF0dGljZVNlbGVjdG9yW2J4MV07Ci0gICAgaW50IGxh
dHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLmluZGV4XTsK
LSAgICBpbnQgbmV4dExhdHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jb
bm9pc2VYLm5leHRJbmRleF07Ci0KLSAgICAvLyBzeCA9IGRvdWJsZShzX2N1cnZlKHJ4MCkpOwot
ICAgIC8vIHN5ID0gZG91YmxlKHNfY3VydmUocnkwKSk7Ci0gICAgZmxvYXQgc3ggPSBzbW9vdGhD
dXJ2ZShub2lzZVguZnJhY3Rpb24pOwotICAgIGZsb2F0IHN5ID0gc21vb3RoQ3VydmUobm9pc2VZ
LmZyYWN0aW9uKTsKLQotICAgIGF1dG8gbm9pc2VGb3JDaGFubmVsID0gWyZdKGludCBjaGFubmVs
KSB7Ci0gICAgICAgIC8vIGIwMCA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MF0KLSAgICAgICAg
aW50IGIwMCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9p
c2VZLmluZGV4XTsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMDBd
OyB1ID0gcngwICogcVswXSArIHJ5MCAqIHFbMV07Ci0gICAgICAgIGNvbnN0IGZsb2F0KiBxID0g
cGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IwMF07Ci0gICAgICAgIGZsb2F0IHUgPSBu
b2lzZVguZnJhY3Rpb24gKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9uICogcVsxXTsKLQotICAgICAg
ICAvLyBiMTAgPSB1TGF0dGljZVNlbGVjdG9yW2ogKyBieTBdOwotICAgICAgICBpbnQgYjEwID0g
cGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLmlu
ZGV4XTsKLSAgICAgICAgLy8gcngxID0gcngwIC0gMS4wZjsKLSAgICAgICAgLy8gcSA9IGZHcmFk
aWVudFtuQ29sb3JDaGFubmVsXVtiMTBdOyB2ID0gcngxICogcVswXSArIHJ5MCAqIHFbMV07Ci0g
ICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjEwXTsKLSAgICAgICAg
ZmxvYXQgdiA9IChub2lzZVguZnJhY3Rpb24gLSAxKSAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24g
KiBxWzFdOwotICAgICAgICAvLyBhID0gbGVycChzeCwgdSwgdik7Ci0gICAgICAgIGZsb2F0IGEg
PSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKLQotICAgICAgICAvLyBiMDEgPSB1TGF0
dGljZVNlbGVjdG9yW2kgKyBieTFdOwotICAgICAgICBpbnQgYjAxID0gcGFpbnRpbmdEYXRhLmxh
dHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkubmV4dEluZGV4XTsKLSAgICAgICAg
Ly8gcnkxID0gcnkwIC0gMS4wZjsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFu
bmVsXVtiMDFdOyB1ID0gcngwICogcVswXSArIHJ5MSAqIHFbMV07Ci0gICAgICAgIHEgPSBwYWlu
dGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjAxXTsKLSAgICAgICAgdSA9IG5vaXNlWC5mcmFj
dGlvbiAqIHFbMF0gKyAobm9pc2VZLmZyYWN0aW9uIC0gMSkgKiBxWzFdOwotCi0gICAgICAgIC8v
IGIxMSA9IHVMYXR0aWNlU2VsZWN0b3JbaiArIGJ5MV07Ci0gICAgICAgIGludCBiMTEgPSBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubmV4dElu
ZGV4XTsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMTFdOyB2ID0g
cngxICogcVswXSArIHJ5MSAqIHFbMV07Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1bYjExXTsKLSAgICAgICAgdiA9IChub2lzZVguZnJhY3Rpb24gLSAxKSAqIHFb
MF0gKyAobm9pc2VZLmZyYWN0aW9uIC0gMSkgKiBxWzFdOwotICAgICAgICAvLyBiID0gbGVycChz
eCwgdSwgdik7Ci0gICAgICAgIGZsb2F0IGIgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2
KTsKLQotICAgICAgICAvLyByZXR1cm4gbGVycChzeSwgYSwgYik7Ci0gICAgICAgIHJldHVybiBs
aW5lYXJJbnRlcnBvbGF0aW9uKHN5LCBhLCBiKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIHsKLSAg
ICAgICAgbm9pc2VGb3JDaGFubmVsKDApLAotICAgICAgICBub2lzZUZvckNoYW5uZWwoMSksCi0g
ICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgyKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDMpCi0g
ICAgfTsKLX0KLQotLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVU
dXJidWxlbmNlRWxlbWVudCBkZXNjcmliZXMgdGhpcyBjb252ZXJzaW9uIHRvIGNvbG9yIGNvbXBv
bmVudHMuCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yQ29udmVydDxTUkdCQTx1aW50
OD4+KFNSR0JBPGZsb2F0PikgdG8gZ2V0IHRoZSBzYW1lIGJlaGF2aW9yLgotc3RhdGljIGlubGlu
ZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyhj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpCi17Ci0gICAg
cmV0dXJuIHsKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZs
b2F0Q29tcG9uZW50c1swXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWlu
dDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMV0gKiAyNTUpLCAwLCAyNTUp
LAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21w
b25lbnRzWzJdICogMjU1KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90Pihz
dGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1szXSAqIDI1NSksIDAsIDI1NSksCi0gICAg
fTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX251bU9jdGF2ZXMsIG51bU9jdGF2ZXMpICE9
IG1fbnVtT2N0YXZlczsKIH0KIAotQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVs
ZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0Citib29sIEZFVHVyYnVsZW5jZTo6c2V0U2VlZChmbG9hdCBzZWVkKQogewot
ICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0Owot
ICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3IocG9pbnQueCgpICogcGFpbnRpbmdEYXRhLmJhc2VG
cmVxdWVuY3lYLCBwb2ludC55KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVkpOwotICAg
IGZsb2F0IHJhdGlvID0gMTsKLSAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBtX251
bU9jdGF2ZXM7ICsrb2N0YXZlKSB7Ci0gICAgICAgIGlmIChtX3R5cGUgPT0gVHVyYnVsZW5jZVR5
cGU6OkZyYWN0YWxOb2lzZSkKLSAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAr
PSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBu
b2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpLmFicygpIC8gcmF0
aW87Ci0KLSAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKLSAg
ICAgICAgbm9pc2VWZWN0b3Iuc2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsKLSAgICAgICAgcmF0
aW8gKj0gMjsKLQotICAgICAgICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICAgICAgLy8g
VXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2UgYmVmb3JlIHRo
ZSBtdWx0aXBsaWNhdGlvbiBhbmQKLSAgICAgICAgICAgIC8vIGFkZGluZyBpdCBhZnRlcndhcmQg
c2ltcGxpZmllcyB0byBzdWJ0cmFjdGluZyBpdCBvbmNlLgotICAgICAgICAgICAgc3RpdGNoRGF0
YS53aWR0aCAqPSAyOwotICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hE
YXRhLndyYXBYIC0gc19wZXJsaW5Ob2lzZTsKLSAgICAgICAgICAgIHN0aXRjaERhdGEuaGVpZ2h0
ICo9IDI7Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0aXRjaERhdGEud3Jh
cFkgLSBzX3Blcmxpbk5vaXNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHZhbHVl
IG9mIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCBjb21lcyBmcm9tICgodHVyYnVsZW5jZUZ1bmN0
aW9uUmVzdWx0ICogMjU1KSArIDI1NSkgLyAyIGJ5IGZyYWN0YWxOb2lzZQotICAgIC8vIGFuZCAo
dHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSBieSB0dXJidWxlbmNlLgotICAgIGlmICht
X3R5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKLSAgICAgICAgdHVyYnVsZW5j
ZUZ1bmN0aW9uUmVzdWx0ID0gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMC41ZiArIDAuNWY7
Ci0KLSAgICByZXR1cm4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyh0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2VlZCwgc2VlZCkgIT0gbV9z
ZWVkOwogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihVaW50OENsYW1wZWRBcnJh
eSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERh
dGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0Citib29sIEZFVHVyYnVs
ZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0Y2hUaWxlcykKIHsKLSAgICBBU1NFUlQoZW5k
WSA+IHN0YXJ0WSk7Ci0KLSAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgZmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwot
ICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7Ci0gICAg
aW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkg
PDwgMik7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGludmVyc2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5h
YnNvbHV0ZVRyYW5zZm9ybSgpLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7
Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIHBv
aW50LnNldFkocG9pbnQueSgpICsgMSk7Ci0gICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9u
LngoKSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7
ICsreCkgewotICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKLSAgICAgICAg
ICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGludmVyc2VUcmFuc2Zyb20ubWFwUG9pbnQocG9p
bnQpOwotICAgICAgICAgICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVG
b3JQb2ludChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQpOwotICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4
T2ZQaXhlbENoYW5uZWwpOwotICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0Owot
ICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc3RpdGNoVGlsZXMs
IHN0aXRjaFRpbGVzKSAhPSBtX3N0aXRjaFRpbGVzOwogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6
ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyogcGFyYW1ldGVycykKK0Zsb2F0
UmVjdCBGRVR1cmJ1bGVuY2U6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0CiB7Ci0gICAgcGFyYW1ldGVycy0+ZmlsdGVyLT5maWxsUmVnaW9uKCpwYXJhbWV0
ZXJzLT5waXhlbEFycmF5LCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5z
dGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOworICAgIHJl
dHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRl
ck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5k
YXJ5U2V0KSBjb25zdAogewotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5
ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50U2l6ZSByZXN1bHRT
aXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKGZp
bHRlcigpLmZpbHRlclNjYWxlKCkpOwotCi0gICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgSW50U2l6ZSB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7Ci0KLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5
WCA9IG1fYmFzZUZyZXF1ZW5jeVg7Ci0gICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVkgPSBtX2Jhc2VG
cmVxdWVuY3lZOwotICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YSA9IGNvbXB1dGVTdGl0Y2hpbmco
dGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0KLSAgICBQYWludGlu
Z0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgdGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNl
RnJlcXVlbmN5WSk7Ci0gICAgaW5pdFBhaW50KHBhaW50aW5nRGF0YSk7Ci0KLSAgICBhdXRvIGFy
ZWEgPSByZXN1bHRTaXplLmFyZWEoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGludCBoZWlnaHQgPSByZXN1bHRTaXplLmhlaWdodCgpOwot
Ci0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGhlaWdodCAvIDg7Ci0gICAgdW5zaWduZWQg
b3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPihhcmVhIC8gc19taW5pbWFs
UmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7Ci0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1i
ZXIgPiAxKSB7Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2JzPEZpbGxSZWdpb25QYXJhbWV0ZXJz
PiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlciwg
b3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFy
cmF5Ci0gICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsK
LSAgICAgICAgaWYgKG51bUpvYnMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9i
IGludG8gInN0ZXBZIi1zaXplZCBqb2JzLCBkaXN0cmlidXRpbmcgdGhlIGV4dHJhIHJvd3MgaW50
byB0aGUgZmlyc3QgImpvYnNXaXRoRXh0cmEiIGpvYnMuCi0gICAgICAgICAgICB1bnNpZ25lZCBz
dGVwWSA9IGhlaWdodCAvIG51bUpvYnM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBqb2JzV2l0aEV4
dHJhID0gaGVpZ2h0ICUgbnVtSm9iczsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0WSA9IDA7
Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxK
b2JzLnBhcmFtZXRlcihpKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsK
LSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJy
YXk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0aXRjaERhdGEgPSBzdGl0Y2hEYXRhOwotICAgICAg
ICAgICAgICAgIHBhcmFtcy5zdGFydFkgPSBzdGFydFk7Ci0KLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBqb2JIZWlnaHQgPSAoaSA8IGpvYnNXaXRoRXh0cmEpID8gc3RlcFkgKyAxIDogc3RlcFk7
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmVuZFkgPSBwYXJhbXMuc3RhcnRZICsgam9iSGVpZ2h0
OwotICAgICAgICAgICAgICAgIHN0YXJ0WSArPSBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMo
KS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIC8vIEZhbGxi
YWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJlIGlzIG5vIHJvb20gZm9yIGEgbmV3
IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21hbGwuCi0gICAgZmlsbFJlZ2lvbihk
ZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0
KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgfSwgbnVsbHB0ciwgZ2VvbWV0
cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBlIHR5cGUpCkBAIC00NzYsMTEgKzEwNiwxMCBAQCBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVHVyYnVsZW5jZVR5
cGUgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBl
IHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNlOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29u
c3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVR1cmJ1bGVuY2UiOwotICAgIEZpbHRlckVm
ZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRz
IDw8ICIgdHlwZT1cIiIgPDwgdHlwZSgpIDw8ICJcIiAiCisgICAgdHMgPDwgIiB0eXBlPVwiIiA8
PCB0dXJidWxlbmNlVHlwZSgpIDw8ICJcIiAiCiAgICAgICAgPDwgImJhc2VGcmVxdWVuY3k9XCIi
IDw8IGJhc2VGcmVxdWVuY3lYKCkgPDwgIiwgIiA8PCBiYXNlRnJlcXVlbmN5WSgpIDw8ICJcIiAi
CiAgICAgICAgPDwgInNlZWQ9XCIiIDw8IHNlZWQoKSA8PCAiXCIgIgogICAgICAgIDw8ICJudW1P
Y3RhdmVzPVwiIiA8PCBudW1PY3RhdmVzKCkgPDwgIlwiICIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IDRk
NTM2YjM3YTgwYWFkZjkxMWViZmNlODk3NzRjZDNjY2VjYjVjZmIuLjAwMzU1MzRhYTEzZTM0MWQ5
NjBkMDU3ZGU4NjJjMTlkYzBlMjI0MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNCw3ICs0LDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDkgKzI0LDcgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0zOCwxMCArMzYsMTAgQEAgZW51bSBjbGFzcyBUdXJidWxlbmNlVHlwZSB7CiAKIGNsYXNz
IEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0
LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgc3RhdGljIFJlZjxGRVR1cmJ1bGVuY2U+
IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VG
cmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7
CiAKLSAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0g
ICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKKyAgICBUdXJidWxlbmNlVHlwZSB0dXJi
dWxlbmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHVyYnVsZW5jZVR5cGU7IH0KKyAgICBib29s
IHNldFR1cmJ1bGVuY2VUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKIAogICAgIGZsb2F0IGJhc2VGcmVx
dWVuY3lYKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlRnJlcXVlbmN5WDsgfQogICAgIGJvb2wgc2V0
QmFzZUZyZXF1ZW5jeVgoZmxvYXQpOwpAQCAtNTksNzAgKzU3LDE5IEBAIHB1YmxpYzoKICAgICBi
b29sIHNldFN0aXRjaFRpbGVzKGJvb2wpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBp
bnQgc19ibG9ja1NpemUgPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9
IHNfYmxvY2tTaXplIC0gMTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERp
bWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxs
ZWwgam9icy4KLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWludGluZ0Rh
dGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgOiBzZWVk
KHBhaW50aW5nU2VlZCkKLSAgICAgICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1NpemUpCi0g
ICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAgICAg
LCBiYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAgICB9Ci0K
LSAgICAgICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Js
b2NrU2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1NpemUg
KyAyXVsyXTsKLSAgICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9hdCBiYXNl
RnJlcXVlbmN5WDsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAgICAgaW5s
aW5lIGxvbmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAg
ICAgICAgU3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGggeyAwIH07
IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAgICAgICAg
aW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAgIGludCBo
ZWlnaHQgeyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwotCi0g
ICAgc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxlbmNlKiBm
aWx0ZXI7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwotICAgICAgICBQ
YWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRh
OwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICB9OwotCi0gICAg
c3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyopOwotCi0g
ICAgRkVUdXJidWxlbmNlKEZpbHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGlu
dCwgZmxvYXQsIGJvb2wpOworICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxv
YXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludChQ
YWludGluZ0RhdGEmKTsKLSAgICBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0
aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNv
bnN0OwotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBQYWludGlu
Z0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAg
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQ
b2ludChjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7Ci0gICAgdm9pZCBmaWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgUGFp
bnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0OworICAg
IEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNv
bnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9p
ZCBmaWxsUmVnaW9uV29ya2VyKHZvaWQqKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVy
UmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0
IG92ZXJyaWRlOworCisgICAgVHVyYnVsZW5jZVR5cGUgbV90dXJidWxlbmNlVHlwZTsKICAgICBm
bG9hdCBtX2Jhc2VGcmVxdWVuY3lYOwogICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVk7CiAgICAg
aW50IG1fbnVtT2N0YXZlczsKQEAgLTEzMSw0ICs3OCwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTljOTE3ZTRmYzAxY2M5YTZl
YmM4NDNkMmI1YzYzNmZmNDM0MmZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zp
bHRlcjo6RmlsdGVyKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgVHlwZSB0eXBlKQorICAg
IDogRmlsdGVyRnVuY3Rpb24odHlwZSkKKyAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdN
b2RlKQoreworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4g
RmlsdGVyOjphcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxG
aWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBGaWx0ZXJSZXN1bHRWZWN0
b3Igc3RhY2s7CisgICAgRmlsdGVyT3V0cHV0IG91dHB1dChtX3JlbmRlcmluZ01vZGUpOworCisg
ICAgYXV0byByZXN1bHQgPSBhcHBseShvdXRwdXQsIHN0YWNrLCBzb3VyY2VJbWFnZSwgKmdlb21l
dHJ5KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEFTU0VS
VChzdGFjay5pc0VtcHR5KCkpOworICAgIHJlc3VsdC0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICByZXR1cm4geyByZXN1bHQtPmltYWdl
QnVmZmVyKCksIGdlb21ldHJ5LT5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHJlc3VsdC0+
ZHJhd2luZ1JlY3QoKSkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggYTJk
OTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEwYmMxZi4uMDFhZDdkMTM2NTVmOGI2NWIw
YWM3YjViYWFhYTI0NGFkMzgzMTE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTIwLDU5ICsyMSwyNCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJH
ZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVy
RnVuY3Rpb24geworICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9uOjphcHBseTsKIAotY2xhc3MgRmls
dGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxl
ID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQot
ICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmlydHVh
bCB+RmlsdGVyKCkgPSBkZWZhdWx0OwotCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8
SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291
cmNlSW1hZ2UpOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9z
b3VyY2VJbWFnZS5nZXQoKTsgfQotCi0gICAgRmxvYXRTaXplIGZpbHRlclJlc29sdXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICB2b2lkIHNldEZpbHRlclJl
c29sdXRpb24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7IG1fZmlsdGVyUmVz
b2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KLQotICAgIGZsb2F0IGZpbHRlclNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQotICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUo
ZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxlOyB9Ci0KLSAgICBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0
ZVRyYW5zZm9ybTsgfQotCiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdN
b2RlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKLSAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclJlc29sdXRpb24o
RmxvYXRTaXplIHNpemUpIGNvbnN0IHsgcmV0dXJuIHNpemUgKiBtX2ZpbHRlclJlc29sdXRpb247
IH0KLSAgICAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgPSAwOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6dHVwbGU8UmVmUHRyPEltYWdlQnVmZmVyPiwgRmxvYXRS
ZWN0PiBhcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0
ZXJHZW9tZXRyeT4mJikgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIo
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVz
b2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQotICAgIHsKLSAgICB9CisgICAgRmlsdGVyKFJlbmRl
cmluZ01vZGUsIFR5cGUpOwogCi1wcml2YXRlOgotICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9z
b3VyY2VJbWFnZTsKLSAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwotICAgIEFmZmlu
ZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5k
ZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwotICAgIGZsb2F0IG1f
ZmlsdGVyU2NhbGUgeyAxIH07CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjg2NzAxMWM0OTQ5OTI1YjdhZWY4M2Q2NmJlMDA3MDcxNTliNzNhNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
Qm91bmRhcnlTZXQuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZpbHRlckJvdW5kYXJ5U2V0IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEZsYWdz
IHsKKyAgICAgICAgSGFzWCAgICAgID0gMSA8PCAwLAorICAgICAgICBIYXNZICAgICAgPSAxIDw8
IDEsCisgICAgICAgIEhhc1dpZHRoICA9IDEgPDwgMiwKKyAgICAgICAgSGFzSGVpZ2h0ID0gMSA8
PCAzCisgICAgfTsKKworICAgIEZpbHRlckJvdW5kYXJ5U2V0KCkgPSBkZWZhdWx0OworCisgICAg
RmlsdGVyQm91bmRhcnlTZXQoY29uc3QgRmxvYXRSZWN0JiBib3VuZGFyaWVzLCBPcHRpb25TZXQ8
RmxhZ3M+IGZsYWdzKQorICAgICAgICA6IG1fYm91bmRhcmllcyhib3VuZGFyaWVzKQorICAgICAg
ICAsIG1fZmxhZ3MoZmxhZ3MpCisgICAgeworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8Zmxv
YXQ+IHgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6
Okhhc1gpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmllcy54KCk7CisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4geSgp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzWSkp
CisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVzLnkoKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiB3aWR0aCgpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzV2lkdGgp
KQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmllcy53aWR0aCgpOworICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGhlaWdo
dCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFz
SGVpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMuaGVpZ2h0KCk7CisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIEZsb2F0UmVj
dCBtX2JvdW5kYXJpZXM7CisgICAgT3B0aW9uU2V0PEZsYWdzPiBtX2ZsYWdzOworfTsKKyAgICAK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRm
YzViYmNhNTFjMzQ4ZWM3ZjYzZTRjYzkyN2RiMTA4Li42ZjQ3NDVjZWQ5MzM5NjM3ZDA1ODVlODlj
YjQ2Y2YwZjE0N2UzNjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNCw2NjAgKzI0LDg4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRp
bGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91
dHB1dC5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdFZlY3Rvci5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5l
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotI2lmIEhBVkUoQVJNX05F
T05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1fbmVvbi5oPgotI2VuZGlmCi0KLSNpZiBVU0Uo
QUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRl
ciYgZmlsdGVyLCBUeXBlIHR5cGUpCi0gICAgOiBtX2ZpbHRlcihmaWx0ZXIpCi0gICAgLCBtX2Zp
bHRlckVmZmVjdENsYXNzVHlwZSh0eXBlKQotewotfQotCi1GaWx0ZXJFZmZlY3Q6On5GaWx0ZXJF
ZmZlY3QoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpCi17Ci0gICAgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKLSAg
ICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQotICAgICAgICBtX2Fic29sdXRl
UGFpbnRSZWN0LnVuaXRlKGVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgY2xpcEFi
c29sdXRlUGFpbnRSZWN0KCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQ
YWludFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6cHJpbWl0aXZlU3VicmVnaW9uKGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAg
ICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1pdGl2ZSBzdWJyZWdpb24sIHdoaWxlIENT
UyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3VuZHMpCi0gICAgICAgIG1fYWJzb2x1dGVQ
YWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJl
Y3QobV9tYXhFZmZlY3RSZWN0KSk7Ci19Ci0KLUZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0OjptYXBQ
b2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50KSBjb25z
dAotewotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludCA9IG1hcFBvaW50KHVzZXJTcGFjZVBv
aW50LCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJl
Z2lvbik7Ci0gICAgYWJzb2x1dGVQb2ludC5tb3ZlQnkoLW1fYWJzb2x1dGVQYWludFJlY3QubG9j
YXRpb24oKSk7Ci0gICAgcmV0dXJuIGFic29sdXRlUG9pbnQ7Ci19Ci0KLUludFJlY3QgRmlsdGVy
RWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYg
ZWZmZWN0UmVjdCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBsb2NhdGlvbiA9IG1fYWJzb2x1dGVQ
YWludFJlY3QubG9jYXRpb24oKTsKLSAgICBsb2NhdGlvbi5tb3ZlQnkoLWVmZmVjdFJlY3QubG9j
YXRpb24oKSk7Ci0gICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAotewotICAgIEFTU0VSVCho
YXNSZXN1bHQoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgSW1hZ2VCdWZmZXI6OmNs
YW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBzY2FsZSk7CisgICAgRmxvYXRS
ZWN0IGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb247CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtOwotICAgIHRyYW5zZm9ybS5zY2FsZShzY2FsZSkudHJhbnNsYXRlKC1tX2Fic29sdXRl
UGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiB0cmFuc2Zvcm0ubWFwUmVjdChzcmNS
ZWN0KTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCkKLXsKLSAgICAvLyBGRVRpbGUsIEZFVHVyYnVsZW5jZSwgRkVGbG9vZCBk
b24ndCBoYXZlIGlucHV0IGVmZmVjdHMsIHRha2UgdGhlIGZpbHRlciByZWdpb24gYXMgdW5pdGUg
cmVjdC4KLSAgICBGbG9hdFJlY3Qgc3VicmVnaW9uOwotICAgIGlmICh1bnNpZ25lZCBudW1iZXJP
ZklucHV0RWZmZWN0cyA9IGlucHV0RWZmZWN0cygpLnNpemUoKSkgewotICAgICAgICBzdWJyZWdp
b24gPSBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBudW1iZXJPZklucHV0RWZmZWN0czsg
KytpKSB7Ci0gICAgICAgICAgICBhdXRvIGlucHV0UHJpbWl0aXZlU3VicmVnaW9uID0gaW5wdXRF
ZmZlY3QoaSktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgICAgICAg
ICAgc3VicmVnaW9uLnVuaXRlKGlucHV0UHJpbWl0aXZlU3VicmVnaW9uKTsKLSAgICAgICAgfQor
ICAgIC8vIERvbid0IHVzZSB0aGUgaW5wdXQncyBzdWJyZWdpb24gZm9yIDxmZVRpbGU+LgorICAg
IGlmICghaW5wdXRzLmlzRW1wdHkoKSAmJiB0eXBlKCkgIT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpG
RVRpbGUpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlucHV0cykKKyAgICAgICAgICAg
IGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24udW5pdGUoaW5wdXQtPnByaW1pdGl2ZVN1YnJlZ2lv
bigpKTsKICAgICB9IGVsc2UKLSAgICAgICAgc3VicmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVn
aW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIC8vIEFmdGVyIGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0YXJnZXQgZWZmZWN0LCByZXNldCB0aGUgc3VicmVn
aW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KLSAgICBpZiAoZmlsdGVyRWZmZWN0VHlwZSgpID09IEZp
bHRlckVmZmVjdFR5cGVUaWxlKQotICAgICAgICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJS
ZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAgYXV0byBib3VuZGFyaWVzID0gZWZmZWN0Qm91bmRh
cmllcygpOwotICAgIGlmIChoYXNYKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJp
ZXMueCgpKTsKLSAgICBpZiAoaGFzWSgpKQotICAgICAgICBzdWJyZWdpb24uc2V0WShib3VuZGFy
aWVzLnkoKSk7Ci0gICAgaWYgKGhhc1dpZHRoKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRXaWR0
aChib3VuZGFyaWVzLndpZHRoKCkpOwotICAgIGlmIChoYXNIZWlnaHQoKSkKLSAgICAgICAgc3Vi
cmVnaW9uLnNldEhlaWdodChib3VuZGFyaWVzLmhlaWdodCgpKTsKKyAgICAgICAgZGVmYXVsdFBy
aW1pdGl2ZVN1YnJlZ2lvbiA9IGdlb21ldHJ5LmZpbHRlclJlZ2lvbigpOwogCi0gICAgc2V0Rmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7CisgICAgRmxvYXRSZWN0IHByaW1pdGl2
ZVN1YnJlZ2lvbjsKIAotICAgIGF1dG8gYWJzb2x1dGVTdWJyZWdpb24gPSBtX2ZpbHRlci5hYnNv
bHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qoc3VicmVnaW9uKTsKLSAgICBhdXRvIGZpbHRlclJlc29s
dXRpb24gPSBtX2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCk7Ci0gICAgYWJzb2x1dGVTdWJyZWdp
b24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAgLy8gU2F2ZSB0aGlzIGJlZm9yZSBjbGlw
cGluZyBzbyB3ZSBjYW4gdXNlIGl0IHRvIG1hcCBsaWdodGluZyBwb2ludHMgZnJvbSB1c2VyIHNw
YWNlIHRvIGJ1ZmZlciBjb29yZGluYXRlcy4KLSAgICBzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJl
Z2lvbihhYnNvbHV0ZVN1YnJlZ2lvbik7CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFgoYm91
bmRhcnlTZXQueCgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24ueCgpKSk7Cisg
ICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFkoYm91bmRhcnlTZXQueSgpLnZhbHVlX29yKGRlZmF1
bHRQcmltaXRpdmVTdWJyZWdpb24ueSgpKSk7CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFdp
ZHRoKGJvdW5kYXJ5U2V0LndpZHRoKCkudmFsdWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lv
bi53aWR0aCgpKSk7CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldEhlaWdodChib3VuZGFyeVNl
dC5oZWlnaHQoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLmhlaWdodCgpKSk7
CiAKLSAgICAvLyBDbGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhlIGZpbHRlciByZWdpb24u
Ci0gICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJl
Z2lvbigpOwotICAgIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlclJlc29s
dXRpb24pOwotICAgIGFic29sdXRlU3VicmVnaW9uLmludGVyc2VjdChhYnNvbHV0ZVNjYWxlZEZp
bHRlclJlZ2lvbik7Ci0KLSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29sdXRlU3VicmVnaW9uKTsK
LSAgICByZXR1cm4gc3VicmVnaW9uOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5pbnRlcnNlY3Qo
Z2VvbWV0cnkuZmlsdGVyUmVnaW9uKCkpOworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247
CiB9CiAKLUZpbHRlckVmZmVjdCogRmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBu
dW1iZXIpIGNvbnN0CitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihudW1iZXIgPCBtX2lucHV0RWZmZWN0cy5zaXpl
KCkpOwotICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIpLmdldCgpOwotfQotCi1z
dGF0aWMgdW5zaWduZWQgY29sbGVjdEVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0KmVmZmVjdCwg
SGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3QqPiYgYWxsRWZmZWN0cykKLXsKLSAgICBhbGxFZmZl
Y3RzLmFkZChlZmZlY3QpOwotICAgIHVuc2lnbmVkIHNpemUgPSBlZmZlY3QtPm51bWJlck9mRWZm
ZWN0SW5wdXRzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gZWZmZWN0LT5pbnB1dEVmZmVjdChpKTsKLSAgICAg
ICAgY29sbGVjdEVmZmVjdHMoaW4sIGFsbEVmZmVjdHMpOwotICAgIH0KLSAgICByZXR1cm4gYWxs
RWZmZWN0cy5zaXplKCk7Ci19CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0OworICAgIGZvciAo
YXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVuaXRlKGlucHV0LT5k
cmF3aW5nUmVjdCgpKTsKIAotdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51bWJlck9mRWZm
ZWN0SW5wdXRzKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+IGFs
bEVmZmVjdHM7Ci0gICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFsbEVmZmVjdHMpOwor
ICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9QcmltaXRpdmVTdWJyZWdpb24oZHJhd2luZ1JlY3Qs
IHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCitG
aWx0ZXJSZXN1bHQqIEZpbHRlckVmZmVjdDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZp
bHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChoYXNSZXN1bHQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXpl
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCk7Ci0gICAgICAgIGlu
LT5hcHBseSgpOwotICAgICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAvLyBDb252ZXJ0IGlucHV0IHJlc3VsdHMgdG8gdGhlIGN1cnJlbnQg
ZWZmZWN0J3MgY29sb3Igc3BhY2UuCi0gICAgICAgIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uo
aW4sIGkpOwotICAgIH0KLQotICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAg
c2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotCi0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFt
ZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZlY3RCb3VuZGFy
aWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNsaXBwZWRTdWJy
ZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAgYWJzb2x1dGVQ
YWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAi
IDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZp
bHRlclNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmlsdGVyLmZpbHRl
clJlc29sdXRpb24oKSk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkg
fHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKLSAgICAgICAgICAgIGlucHV0RWZmZWN0KGkpLT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVk
ZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1
bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4KLSAgICBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKTsKKyAgICByZXR1cm4gYXBwbHkob3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2UsIGdlb21l
dHJ5LCBGaWx0ZXJCb3VuZGFyeVNldCgpKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNl
VmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKK0ZpbHRlclJlc3VsdCogRmlsdGVyRWZmZWN0Ojph
cHBseVBsYXRmb3JtKEZpbHRlck91dHB1dCYgb3V0cHV0LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QK
IHsKLSAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIg
Zm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KLSAgICBpZiAoIW1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5
ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhl
bERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKLSAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGlt
YWdlQXJyYXkubGVuZ3RoKCk7CisgICAgYXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSB0aGlzLT5w
cmltaXRpdmVTdWJyZWdpb24oaW5wdXRzLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOworICAgIGF1
dG8gZHJhd2luZ1JlY3QgPSB0aGlzLT5kcmF3aW5nUmVjdChpbnB1dHMsIGdlb21ldHJ5LCBwcmlt
aXRpdmVTdWJyZWdpb24pOworICAgIGF1dG8gYWJzb2x1dGVEcmF3aW5nUmVjdCA9IGdlb21ldHJ5
LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoZHJhd2luZ1JlY3QpOworICAgIGF1dG8gcmVz
dWx0Q29sb3JTcGFjZSA9IHRoaXMtPnJlc3VsdENvbG9yU3BhY2UoaW5wdXRzKTsKIAotICAgIC8v
IFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscwot
ICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7Ci0KLSNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKLSAgICAgICAg
dWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgz
Zik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5
IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChw
aXhlbERhdGEpOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChz
aXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAg
c2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4
dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2
bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAg
ICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKLSAgICAgICAgICAg
IHBpeGVsRGF0YSArPSA2NDsKLSAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVs
KTsKLQotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7Ci0gICAgICAgIGlmICghcGl4
ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKLQotICAgIC8vIEl0ZXJhdGUg
b3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBv
bmVudHMgaWYgbmVjZXNzYXJ5Ci0gICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKLSAgICAg
ICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKLSAgICAgICAgdWludDhfdCBh
ID0gKihwaXhlbERhdGEgKyAzKTsKLSAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8g
YWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCi0g
ICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7Ci0gICAgICAgICAgICArK3BpeGVsRGF0YTsK
LSAgICAgICAgfQotICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCi0gICAgICAgICsrcGl4
ZWxEYXRhOwotICAgIH0KLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KCkKLXsK
LSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gc3RkOjpudWxsb3B0OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVj
dXJzaXZlKCkKLXsKLSAgICAvLyBDbGVhciBhbGwgcmVzdWx0cywgcmVnYXJkbGVzcyB0aGF0IHRo
ZSBjdXJyZW50IGVmZmVjdCBoYXMKLSAgICAvLyBhIHJlc3VsdC4gQ2FuIGJlIHVzZWQgaWYgYW4g
ZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4KLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0g
ICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVj
dHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAg
ICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsK
LX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQotewot
ICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8
IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4
aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyUmVzdWx0LmdldCgpOwotCi0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVyLnJlbmRlcmlu
Z01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhl
bEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgp
LCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgaWYgKG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigq
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZl
clJlc3VsdC5nZXQoKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZl
Y3Q6OnVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFs
PERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBJbnRTaXplIHNjYWxl
ZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwotICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3Jk
T3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBl
ZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBp
eGVsQXJyYXkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlVbm11bHRpcGxpZWRS
ZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFy
cmF5OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVs
dGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUocmVj
dC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNj
YWxlZFNpemUpKTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+
KCkgKiA0OwotICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkp
CisgICAgYXV0byByZXN1bHQgPSBvdXRwdXQuY3JlYXRlRmlsdGVyUmVzdWx0KHByaW1pdGl2ZVN1
YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGFic29sdXRlRHJhd2luZ1JlY3Quc2l6ZSgpLCByZXN1bHRD
b2xvclNwYWNlKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2Up
OwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUlt
YWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIEludFJl
Y3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0LnNjYWxlKG1fZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVu
dCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBpZiAo
c2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1h
eFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2Nh
bGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgp
LCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhl
IHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVk
UmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3Qu
eCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxl
ZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHhPcmlnaW4g
PSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAgIGlmICh4T3JpZ2luIDwg
MCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4T3JpZ2luID0gMDsKLSAg
ICB9Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNj
YWxlZFBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndp
ZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOwotICAgIGludCB5RGVz
dCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47
Ci0gICAgICAgIHlPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3Qu
bWF4WSgpOwotICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAg
ICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVu
ZCAtIHhPcmlnaW4pICogNDsKLSAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJl
Y3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXpl
LndpZHRoKCkgKiA0OwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlv
bi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0g
ICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2lu
ICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OwogCi0gICAgd2hpbGUg
KHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3Vy
Y2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25T
Y2FubGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAg
ICsreU9yaWdpbjsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0Fs
cGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVS
QVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAg
IHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwot
ICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0g
cm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2Uu
ZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5w
dXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0g
ICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBs
eURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAg
Y29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25z
dCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQp
LnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlv
bi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAg
IGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAv
IDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBo
YSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAg
ICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9
IDQ7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQorICAgICAgICA8PCAiRmls
dGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHlQbGF0
Zm9ybSgpOiIKKyAgICAgICAgPDwgIlxuICBwcmltaXRpdmVTdWJyZWdpb24gIiA8PCBwcmltaXRp
dmVTdWJyZWdpb24KKyAgICAgICAgPDwgIlxuICBkcmF3aW5nUmVjdCAiIDw8IGRyYXdpbmdSZWN0
CisgICAgICAgIDw8ICJcbiAgYWJzb2x1dGVEcmF3aW5nUmVjdCAiIDw8IGFic29sdXRlRHJhd2lu
Z1JlY3QKKyAgICAgICAgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IGdlb21ldHJ5LnJl
c29sdXRpb24oKSk7CisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBpZiAob3V0cHV0LnJlbmRl
cmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgeworICAgICAgICBpZiAo
YXBwbHlDb3JlSW1hZ2UoKnJlc3VsdCwgaW5wdXRzLCBzb3VyY2VJbWFnZSkpCisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9CiAjZW5kaWYKLX0KIAotc3RhdGljIHZv
aWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0
U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1
dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lk
dGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdo
dCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRl
c3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0
ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAg
ICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkp
OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50
ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25l
bnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGlu
YXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0gICAgd2hpbGUgKHNvdXJjZUNv
bXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107
Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
MF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsK
LSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihz
b3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1
NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOwot
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOwotICAgICAgICB9Ci0gICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBv
bmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNl
bmRpZgotfQorICAgIGlmIChhcHBseVNvZnR3YXJlKCpyZXN1bHQsIGlucHV0cywgc291cmNlSW1h
Z2UsIGdlb21ldHJ5KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7CiAKLXN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9D
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwg
UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKQotewotICAgIC8vIEZJWE1FOiBVc2luZyBhbiBJbWFn
ZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIHVubmVjZXNz
YXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0bHkuCi0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVj
dChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXplKCkpOwotICAgIGRlc3RpbmF0aW9uUmVjdC5z
Y2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRT
aXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGRlc3RpbmF0aW9uUmVjdC5zaXplKCkpOwot
ICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZl
cgotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9m
aWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBvcGVyYXRpbmdD
b2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhl
bEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gY29udmVydEltYWdlQnVmZmVy
VG9Db2xvclNwYWNlKHRhcmdldENvbG9yU3BhY2UsICpidWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwg
cGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxwaGFGb3JtYXQpOworICAgIHJldHVybiBudWxscHRyOwog
fQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFn
ZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENv
bG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgcmVjdCwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1hdCkKK1RleHRTdHJlYW0mIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVy
UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFRo
aXMgY2FuIGJlIGRvbmUgbW9yZSBkaXJlY3RseSB1c2luZyBQaXhlbEJ1ZmZlckNvbnZlcnNpb24u
Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
cmVjdC5zaXplKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNv
cnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNv
bnZlcnNpb24KLSAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2Nh
bGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNv
bnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIC8vIENv
bG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9t
IG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4
dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxC
dWZmZXJGb3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgdGFyZ2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBp
eGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29u
dmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0g
ICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFu
ZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNv
bnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJl
c3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRG
b3JtYXQpOwotICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5h
dGlvbiwgZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBp
eGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBp
eGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xv
clNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUg
ZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCwKLSAgICAvLyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVz
dGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVm
ZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVsQnVmZmVyKTsKLSAgICBpZiAoIWNvbnZl
cnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29u
dmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQot
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkp
OwotICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVm
ZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxp
ZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3Vs
dC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2Ug
YnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAg
aWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkg
ewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24o
ZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9
PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9y
bWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1h
dCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAg
ICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5z
Y2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
QVNTRVJUKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09
IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3Jt
YXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0
OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7
Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBj
b3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRh
dGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVBy
ZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JT
cGFjZSkKLXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFN
KEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIg
IiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2Ug
YnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0g
ICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVm
ZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1h
Z2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29u
dmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9pbWFn
ZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAg
ICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9
OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAg
ICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6
ZSkpOwotICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotCi0gICAgICAgICAgICBBU1NFUlQobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0
KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxC
dWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAg
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3Jt
YXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBs
eWluZ0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFj
ZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0
aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi1JbWFnZUJ1
ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0gICAgTE9H
KEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQgJWR4
JWQiLCBmaWx0ZXJOYW1lKCksIHRoaXMsIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLndpZHRo
KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIC8vIE9ubHkg
b25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0g
ICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVk
U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3Vs
dCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01v
ZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotfQot
Ci1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMg
JXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwot
Ci0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhh
c1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0g
ICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0
Q29sb3JTcGFjZSB9OwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZl
cjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJF
ZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRl
cnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Iiwg
ZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFs
bG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIElu
dFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJU
KCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3Vs
dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3Jt
YXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxG
b3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXplKTsK
LSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLWJvb2wgRmlsdGVy
RWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsKLSNp
ZiBVU0UoQ0cpCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVl
ZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgLy8gV2Ug
b25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBk
aWZmZXJlbnQgaW4gdGhlIGlucHV0Ci0gICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1
bGF0aW5nIHJhdyBwaXhlbHMKLSAgICByZXR1cm4gZGVzdGluYXRpb25Db2xvclNwYWNlICYmIHJl
c3VsdENvbG9yU3BhY2UoKSAhPSAqZGVzdGluYXRpb25Db2xvclNwYWNlOwotI2Vsc2UKLSAgICAv
LyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24t
Q0cKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0
bWVudHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNl
KTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQoKSB8fCBkZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
PT0gbV9yZXN1bHRDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTog
V2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29u
dmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBm
b3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1bHQo
KS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0KLSAgICBt
X3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5hdGlvbkNvbG9yU3BhY2U7Ci0KLSAgICBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotI2VuZGlmCi19Ci0KLVRleHRTdHJlYW0mIEZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGR1bXAgdGhlIHN1YlJlZ2lvbnMgb2YgdGhlIGZpbHRlciBwcmltaXRpdmVzIGhlcmUg
bGF0ZXIuIFRoaXMgaXNuJ3QKLSAgICAvLyBwb3NzaWJsZSBhdCB0aGUgbW9tZW50LCBiZWNhdXNl
IHdlIG5lZWQgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgdGFyZ2V0IG9iamVj
dC4KLSAgICAKLSAgICBpZiAocmVwcmVzZW50YXRpb25UeXBlID09IFJlcHJlc2VudGF0aW9uVHlw
ZTo6RGVidWdnaW5nKSB7CisgICAgaWYgKHJlcHJlc2VudGF0aW9uID09IEZpbHRlclJlcHJlc2Vu
dGF0aW9uOjpEZWJ1Z2dpbmcpIHsKICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5k
ZW50U2NvcGUodHMpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImFscGhhIGltYWdlIiwgbV9h
bHBoYUltYWdlKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGVyYXRpbmcgY29sb3JzcGFj
ZSIsIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVz
dWx0IGNvbG9yc3BhY2UiLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwogICAgICAgICB0cyA8PCAiXG4i
IDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlcikKLXsKLSAg
ICAvLyBVc2UgYSBuZXcgc3RyZWFtIGJlY2F1c2Ugd2Ugd2FudCBtdWx0aWxpbmUgbW9kZSBmb3Ig
bG9nZ2luZyBmaWx0ZXJzLgotICAgIFRleHRTdHJlYW0gZmlsdGVyU3RyZWFtOwotICAgIGZpbHRl
ci5leHRlcm5hbFJlcHJlc2VudGF0aW9uKGZpbHRlclN0cmVhbSwgRmlsdGVyRWZmZWN0OjpSZXBy
ZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZyk7Ci0gICAgCi0gICAgcmV0dXJuIHRzIDw8IGZpbHRl
clN0cmVhbS5yZWxlYXNlKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCmluZGV4IDEyZGVkMjY1YTY1NWMzN2U3N2UyY2YwNWI1Mjc3M2YyYjk2YjQ3MWMuLmRlOGEx
MzM3MDE0OGM4OTQ0YWUyYzA0ZTVhYTU2ZGQ1OWM2NzRlODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAt
MjIsMjM3ICsyMiw0OSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFscGhhUHJlbXVs
dGlwbGljYXRpb24uaCIKLSNpbmNsdWRlICJEZXN0aW5hdGlvbkNvbG9yU3BhY2UuaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVj
dEV4dGVudC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19CisjaW5j
bHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlcjsKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNs
YXNzIEltYWdlQnVmZmVyOwotCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4g
RmlsdGVyRWZmZWN0VmVjdG9yOwotCi1lbnVtIEZpbHRlckVmZmVjdFR5cGUgewotICAgIEZpbHRl
ckVmZmVjdFR5cGVVbmtub3duLAotICAgIEZpbHRlckVmZmVjdFR5cGVJbWFnZSwKLSAgICBGaWx0
ZXJFZmZlY3RUeXBlVGlsZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQKLX07Citj
bGFzcyBGaWx0ZXJCb3VuZGFyeVNldDsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OwogCi1jbGFzcyBG
aWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJFZmZlY3Q+IHsKK2NsYXNzIEZp
bHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6Ci0gICAgZW51bSBj
bGFzcyBUeXBlIDogdWludDhfdCB7Ci0gICAgICAgIEJsZW5kLAotICAgICAgICBDb2xvck1hdHJp
eCwKLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXIsCi0gICAgICAgIENvbXBvc2l0ZSwKLSAgICAg
ICAgQ29udm9sdmVNYXRyaXgsCi0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAgICAgRGlz
cGxhY2VtZW50TWFwLAotICAgICAgICBEcm9wU2hhZG93LAotICAgICAgICBGbG9vZCwKLSAgICAg
ICAgR2F1c3NpYW5CbHVyLAotICAgICAgICBJbWFnZSwKLSAgICAgICAgTGlnaHRpbmcsCi0gICAg
ICAgIE1lcmdlLAotICAgICAgICBNb3JwaG9sb2d5LAotICAgICAgICBPZmZzZXQsCi0gICAgICAg
IFNwZWN1bGFyTGlnaHRpbmcsCi0gICAgICAgIFRpbGUsCi0gICAgICAgIFR1cmJ1bGVuY2UsCi0g
ICAgICAgIFNvdXJjZUFscGhhLAotICAgICAgICBTb3VyY2VHcmFwaGljCi0gICAgfTsKLSAgICB2
aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKLQotICAgIHZvaWQgY2xlYXJSZXN1bHQoKTsKLSAgICB2
b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwotCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB1bm11bHRpcGxpZWRS
ZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0
aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVVubXVsdGlwbGllZFJlc3Vs
dChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQg
Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3Rk
OjpudWxsb3B0KTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0
dXJuIG1faW5wdXRFZmZlY3RzOyB9Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNp
Z25lZCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7
IHJldHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7IH0KLSAgICB1bnNpZ25lZCB0b3RhbE51bWJl
ck9mRWZmZWN0SW5wdXRzKCkgY29uc3Q7Ci0gICAgCi0gICAgaW5saW5lIGJvb2wgaGFzUmVzdWx0
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgcGxhdGZvcm0g
c3BlY2lmaWMgY2hlY2tzLCBpZiB0aGUgbWVtb3J5IG1hbmFnbWVudCBpcyBub3QgZG9uZSBieSBG
aWx0ZXJFZmZlY3QuCi0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0Ci0gICAgICAg
ICAgICB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0Ci0gICAgICAgICAgICB8fCBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgSW50UmVjdCByZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIAot
ICAgIC8vIFJlY3Vyc2VzIG9uIGlucHV0cy4KLSAgICBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KLSAgICAvLyBTb2xpZCBibGFjayBpbWFnZSB3aXRoIGRp
ZmZlcmVudCBhbHBoYSB2YWx1ZXMuCi0gICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2FscGhhSW1hZ2U7IH0KLSAgICB2b2lkIHNldElzQWxwaGFJbWFnZShib29sIGFscGhh
SW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFnZTsgfQotCi0gICAgSW50UmVjdCBhYnNv
bHV0ZVBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVQYWludFJlY3Q7IH0KLSAg
ICB2b2lkIHNldEFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIGFic29sdXRlUGFpbnRS
ZWN0KSB7IG1fYWJzb2x1dGVQYWludFJlY3QgPSBhYnNvbHV0ZVBhaW50UmVjdDsgfQotCi0gICAg
RmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX21heEVmZmVjdFJlY3Q7
IH0KLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RS
ZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7IH0gCi0KLSAgICB2b2lkIGFw
cGx5KCk7Ci0KLSAgICAvLyBDb3JyZWN0IGFueSBpbnZhbGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5
LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVyIG9wZXJhdGlvbi4KLSAgICAvLyBUaGlzIG1ldGhv
ZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBwaXhlbCB2YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBh
bmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAvLyBPbmx5IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0
ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3JtIGNvcnJlY3Rpb24uCi0gICAgdmlydHVhbCB2
b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0KLSAgICB2aXJ0dWFsIEZpbHRlckVmZmVj
dFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVV
bmtub3duOyB9Ci0KLSAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0
dXJuIEludE91dHNldHMoKTsgfQotCi0gICAgZW51bSBjbGFzcyBSZXByZXNlbnRhdGlvblR5cGUg
eyBUZXN0T3V0cHV0LCBEZWJ1Z2dpbmcgfTsKLSAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5
cGUgPSBSZXByZXNlbnRhdGlvblR5cGU6OlRlc3RPdXRwdXQpIGNvbnN0OwotCi0gICAgLy8gVGhl
IGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIFNWRyBzcGVjaWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgotICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NjE0LgotICAgIGJvb2wgaGFzWCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzWDsgfQotICAgIHZvaWQgc2V0SGFzWChib29sIHZhbHVlKSB7IG1f
aGFzWCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1koKSBjb25zdCB7IHJldHVybiBtX2hhc1k7
IH0KLSAgICB2b2lkIHNldEhhc1koYm9vbCB2YWx1ZSkgeyBtX2hhc1kgPSB2YWx1ZTsgfQotCi0g
ICAgYm9vbCBoYXNXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzV2lkdGg7IH0KLSAgICB2b2lk
IHNldEhhc1dpZHRoKGJvb2wgdmFsdWUpIHsgbV9oYXNXaWR0aCA9IHZhbHVlOyB9Ci0KLSAgICBi
b29sIGhhc0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSGVpZ2h0OyB9Ci0gICAgdm9pZCBz
ZXRIYXNIZWlnaHQoYm9vbCB2YWx1ZSkgeyBtX2hhc0hlaWdodCA9IHZhbHVlOyB9Ci0KLSAgICBG
bG9hdFJlY3QgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0
ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KLSAgICB2b2lkIHNldEZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbikgeyBtX2ZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIHZp
cnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKIAotICAgIEZsb2F0UmVj
dCBlZmZlY3RCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9
Ci0gICAgdm9pZCBzZXRFZmZlY3RCb3VuZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91
bmRhcmllcykgeyBtX2VmZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9CisgICAg
dmlydHVhbCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJikgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNw
YWNlOyB9CiAgICAgCi0gICAgdm9pZCBzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihjb25z
dCBGbG9hdFJlY3QmIHIpIHsgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiA9IHI7IH0KLSAg
ICAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9p
bnQpIGNvbnN0OwotICAgIAotICAgIFR5cGUgZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0KLQotICAgIEZpbHRlciYgZmlsdGVy
KCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBjb25zdCBGaWx0ZXImIGZpbHRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KLSAgICBib29sIGNsaXBzVG9Cb3VuZHMoKSBjb25zdCB7
IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KLSAgICB2b2lkIHNldENsaXBzVG9Cb3VuZHMoYm9v
bCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1ZTsgfQotCiAgICAgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9v
cGVyYXRpbmdDb2xvclNwYWNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0
aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KLSAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdENvbG9yU3Bh
Y2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9yZXN1bHRDb2xvclNwYWNlID0gY29sb3JT
cGFjZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmls
dGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLSAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7Ci0gICAgCi0gICAgc3RhdGljIFZl
Y3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMp
Ci0gICAgewotICAgICAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNp
emUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1
ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9ybWFsaXplZFZhbHVlczsKLSAgICB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyJiwgVHlwZSk7Ci0gICAgCi0gICAgdmlydHVh
bCBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgPSAwOwotCi0gICAgSW1hZ2VCdWZmZXIq
IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4mIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogCi0gICAgLy8g
UmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3aWxsIG9ubHkgb3BlcmF0ZSBjb3JyZWN0bHkgb24g
dmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKLSAgICAvLyBhbHBoYSBpbiBbMCwyNTVdIGFuZCBlYWNo
IGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxwaGFdLgotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJv
dW5kYXJ5U2V0JikgY29uc3QgPSAwOwogCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFn
ZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2Fy
eS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7CisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgY2xpcEFic29sdXRl
UGFpbnRSZWN0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6Rmls
dGVyRnVuY3Rpb247CiAKLSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5h
dGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGNvcHlDb252
ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBQaXhlbEJ1
ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlv
bmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0UGl4ZWxCdWZmZXJU
b0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUGl4ZWxCdWZmZXImKTsK
LSAgICAKKyAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5k
YXJ5U2V0JikgY29uc3Q7CiAKLSAgICBGaWx0ZXImIG1fZmlsdGVyOwotICAgIEZpbHRlckVmZmVj
dFZlY3RvciBtX2lucHV0RWZmZWN0czsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkcmF3aW5nUmVj
dChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Q7CiAKLSAgICBSZWZQ
dHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBGaWx0ZXJSZXN1
bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBmaW5hbDsK
IAotICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAgICAKLSAgICAvLyBUaGUgbWF4
aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZHIHRoaXMgaXMgdGhlIHByaW1p
dGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAvLyBUaGUg
YWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmlnZ2VyIHRoYW4gbV9tYXhFZmZl
Y3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7Ci0gICAgCi0gICAgLy8gVGhl
IHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBTVkcgRmls
dGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8gVGhpcyBpcyBT
Vkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOworICAg
IEZpbHRlclJlc3VsdCogYXBwbHlQbGF0Zm9ybShGaWx0ZXJPdXRwdXQmLCBjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Q7CiAKLSAgICAvLyB4
LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBhY3R1YWwgU1ZHRkUqRWxlbWVudC4gSXMgbmVl
ZGVkIHRvIGRldGVybWluZSB0aGUgc3VicmVnaW9uIG9mIHRoZQotICAgIC8vIGZpbHRlciBwcmlt
aXRpdmUgb24gYSBsYXRlciBzdGVwLgotICAgIEZsb2F0UmVjdCBtX2VmZmVjdEJvdW5kYXJpZXM7
CisgICAgdmlydHVhbCBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmKSBjb25zdCA9IDA7CiAgICAgCi0gICAgLy8gZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uIG1hcHBlZCB0byBhYnNvbHV0ZSBjb29yZGluYXRlcyBiZWZvcmUgY2xpcHBpbmcu
Ci0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb247Ci0KLSAgICBib29s
IG1fYWxwaGFJbWFnZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1ggeyBmYWxzZSB9OwotICAg
IGJvb2wgbV9oYXNZIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzV2lkdGggeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9oYXNIZWlnaHQgeyBmYWxzZSB9OwotCi0gICAgLy8gU2hvdWxkIHRoZSBlZmZl
Y3QgY2xpcCB0byBpdHMgcHJpbWl0aXZlIHJlZ2lvbiwgb3IgZXhwYW5kIHRvIHVzZSB0aGUgY29t
YmluZWQgcmVnaW9uIG9mIGl0cyBpbnB1dHMuCi0gICAgYm9vbCBtX2NsaXBzVG9Cb3VuZHMgeyB0
cnVlIH07Ci0KLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0Ip
Ci0gICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIH07Ci0jZWxzZQotICAgIERlc3RpbmF0aW9u
Q29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSB9OworI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIHZpcnR1YWwgYm9vbCBhcHBseUNv
cmVJbWFnZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1
ZmZlciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKLSAgICBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgbV9yZXN1bHRDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCkgfTsKICAgICAKLSAgICBjb25zdCBUeXBlIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlOworICAg
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSB9OwogfTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEZpbHRlckVmZmVjdCYpOwot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4o
V2ViQ29yZTo6RmlsdGVyRWZmZWN0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLnR5cGUoKSA+
PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNaW5pbXVtICYmIGZ1bmN0aW9uLnR5
cGUoKSA8PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNYXhpbXVtOyB9CitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGE4NTVjZGI5NjMxN2I4MmRlMzU2N2Zj
MzFlNWI5ZTlhOWVjNjA1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0q
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0q
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0
UmVuZGVyZXIuaCIKLQotI2lmIFVTRShDT1JFX0lNQUdFKQotI2luY2x1ZGUgIkZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IEZpbHRlckVmZmVjdFJlbmRlcmVy
Ojp0cnlDcmVhdGUoYm9vbCBhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQsIEZpbHRl
ckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSNpZiBVU0UoQ09SRV9JTUFHRSkKLSAgICBpZiAoYWNj
ZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKQotICAgICAgICByZXR1cm4gRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnRyeUNyZWF0ZShsYXN0RWZmZWN0KTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKGFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGxhc3RFZmZlY3QpOwotI2VuZGlmCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LQotfSAvLyBuYW1zcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUyNDczNjFmNTNiM2MwOWVjYjU3MTMyMmI3
NWE3NTczZTljYzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RS
ZW5kZXJlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlciB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxG
aWx0ZXJFZmZlY3RSZW5kZXJlcj4gdHJ5Q3JlYXRlKGJvb2wsIEZpbHRlckVmZmVjdCYpOwotICAg
IHZpcnR1YWwgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JikgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBJbWFnZUJ1ZmZlciog
b3V0cHV0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0
IEZpbHRlckVmZmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZXN1bHQo
KSA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1
bHQ7Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1
bHQ7Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0Jikg
PSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0VmVjdG9y
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzVmNGM4MzJjZTNhZTE2ZDllYTkyMDljZjg3MmVkYjc4YzBjYjc5Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0VmVjdG9yLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJFZmZl
Y3Q7CisKK3VzaW5nIEZpbHRlckVmZmVjdFZlY3RvciA9IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iN2Q1NTc2NWEzOTZkOTlhYjAyMTBiM2IxODBiYThmOWUyMGNhMmQwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5j
dGlvbi5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyUmVwcmVzZW50
YXRpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0RXh0
ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdURiB7Citj
bGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRl
ckdlb21ldHJ5OworY2xhc3MgRmlsdGVyT3V0cHV0OworCitjbGFzcyBGaWx0ZXJGdW5jdGlvbiA6
IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckZ1bmN0aW9uPiB7CitwdWJsaWM6CisgICAgZW51bSBj
bGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIENTU0ZpbHRlciwKKyAgICAgICAgU1ZHRmls
dGVyLAorCisgICAgICAgIEZFTWluaW11bSwKKworICAgICAgICBGRUJsZW5kID0gRkVNaW5pbXVt
LAorICAgICAgICBGRUNvbG9yTWF0cml4LAorICAgICAgICBGRUNvbXBvbmVudFRyYW5zZmVyLAor
ICAgICAgICBGRUNvbXBvc2l0ZSwKKyAgICAgICAgRkVDb252b2x2ZU1hdHJpeCwKKyAgICAgICAg
RkVEaWZmdXNlTGlnaHRpbmcsCisgICAgICAgIEZFRGlzcGxhY2VtZW50TWFwLAorICAgICAgICBG
RURyb3BTaGFkb3csCisgICAgICAgIEZFRmxvb2QsCisgICAgICAgIEZFR2F1c3NpYW5CbHVyLAor
ICAgICAgICBGRUltYWdlLAorICAgICAgICBGRU1lcmdlLAorICAgICAgICBGRU1vcnBob2xvZ3ks
CisgICAgICAgIEZFT2Zmc2V0LAorICAgICAgICBGRVNwZWN1bGFyTGlnaHRpbmcsCisgICAgICAg
IEZFVGlsZSwKKyAgICAgICAgRkVUdXJidWxlbmNlLAorICAgICAgICBTb3VyY2VBbHBoYSwKKyAg
ICAgICAgU291cmNlR3JhcGhpYywKKworICAgICAgICBGRU1heGltdW0gPSBTb3VyY2VHcmFwaGlj
CisgICAgfTsKKworICAgIEZpbHRlckZ1bmN0aW9uKFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5
cGUodHlwZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9
IGRlZmF1bHQ7CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKwor
ICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisK
KyAgICB2aXJ0dWFsIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbiA9IEZpbHRlclJlcHJlc2VudGF0aW9uOjpUZXN0T3V0cHV0KSBjb25zdCA9IDA7CisgICAg
Citwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1
ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRUZsb29kLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVHYXVzc2lhbkJsdXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBl
OjpGRUltYWdlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJn
ZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAg
ICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLAorICAgICAgICBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljCisgICAgPjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1YzY2MGVhNzk5ODNhMDdh
MTcyYzBiMjdkYTE4YjJkY2M0YTA4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmgKQEAgLTAsMCArMSw4
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckJvdW5kYXJ5U2V0LmgiCisjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlv
blNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRy
eShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QpCisgICAgICAgIDogbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQorICAgICAg
ICAsIG1fc291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB+RmlsdGVyR2VvbWV0cnkoKSA9IGRlZmF1bHQ7CisKKyAgICBGbG9hdFJlY3Qg
ZmlsdGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KKyAgICBGbG9h
dFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZVJlY3Q7
IH0KKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4geyB9OyB9CisgICAgdmlydHVhbCBGbG9hdFNpemUgcmVzb2x1dGlvbigpIGNv
bnN0IHsgcmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwgRmlsdGVyQm91bmRhcnlTZXQgYm91bmRh
cnlTZXQoRmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25lZCkgY29uc3QgeyByZXR1cm4geyB9OyB9
CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGNv
bnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QpIGNvbnN0IHsgcmV0dXJuIGRyYXdpbmdSZWN0OyB9
CisgICAgdmlydHVhbCBGbG9hdFNpemUgY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhjb25z
dCBGbG9hdFNpemUmIGRyYXdpbmdTaXplKSBjb25zdCB7IHJldHVybiBkcmF3aW5nU2l6ZTsgfQor
CisgICAgRmxvYXRSZWN0IGNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoY29uc3Qg
RmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgY29uc3QgRmxvYXRSZWN0JiByZXN1bHRSZWN0KSBjb25z
dAorICAgIHsKKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBkcmF3aW5nUmVjdDsKKyAgICAgICAg
aW1hZ2VSZWN0Lm1vdmVCeSgtcmVzdWx0UmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW1hZ2VSZWN0KTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIEZsb2F0U2l6ZSByZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyhjb25zdCBGbG9hdFNp
emUmIGRyYXdpbmdTaXplKSBjb25zdCB7IHJldHVybiBkcmF3aW5nU2l6ZTsgfQorICAgIAorICAg
IHZpcnR1YWwgRmxvYXRTaXplIHJlc29sdmVUb0Fic29sdXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxv
YXRTaXplJiBkcmF3aW5nU2l6ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x2ZWRE
cmF3aW5nUmVjdCA9IHJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzKGRyYXdpbmdTaXplKTsKKyAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMocmVzb2x2ZWREcmF3aW5n
UmVjdCk7CisgICAgfQorCisgICAgdmlydHVhbCBGbG9hdFJlY3QgY2xpcFRvUHJpbWl0aXZlU3Vi
cmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBjbGlwcGVkRHJhd2lu
Z1JlY3QgPSBkcmF3aW5nUmVjdDsKKyAgICAgICAgY2xpcHBlZERyYXdpbmdSZWN0LmludGVyc2Vj
dChwcmltaXRpdmVTdWJyZWdpb24pOworICAgICAgICByZXR1cm4gY2xpcHBlZERyYXdpbmdSZWN0
OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKKyAg
ICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlck91dHB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck91dHB1dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRlYzgwYzI2Yzk3NWUyYTdhZmU2YzQ2
NTk5ZGE4NTA2N2JjN2NkYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcApAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKKworI2luY2x1ZGUgIkZpbHRlckdl
b21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKQorICAgIDogbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCit7Cit9CisKK1JlZlB0
cjxGaWx0ZXJSZXN1bHQ+IEZpbHRlck91dHB1dDo6Y3JlYXRlRmlsdGVyUmVzdWx0KGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0
LCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJuIEZpbHRlclJlc3VsdDo6Y3JlYXRlKHByaW1p
dGl2ZVN1YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGxvZ2ljYWxTaXplLCBtX3JlbmRlcmluZ01vZGUs
IDEsIGNvbG9yU3BhY2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45YWEwZGYzMzI0M2ExNzA0NDAzN2EyNmNlMTk2YzQ5YjQwNjk5OTc2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPdXRwdXQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVuZGVy
aW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRmlsdGVyR2VvbWV0cnk7CitjbGFzcyBGaWx0ZXJSZXN1bHQ7CitjbGFzcyBG
aWx0ZXJGdW5jdGlvbjsKKworY2xhc3MgRmlsdGVyT3V0cHV0IHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBSZXN1bHRzID0gSGFzaE1hcDxSZWY8Y29uc3QgRmlsdGVyRnVuY3Rpb24+LCBSZWY8RmlsdGVy
UmVzdWx0Pj47CisKKyAgICBGaWx0ZXJPdXRwdXQoUmVuZGVyaW5nTW9kZSk7CisKKyAgICBSZXN1
bHRzJiByZXN1bHRzKCkgeyByZXR1cm4gbV9yZXN1bHRzOyB9CisgICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisKKyAgICBS
ZWZQdHI8RmlsdGVyUmVzdWx0PiBjcmVhdGVGaWx0ZXJSZXN1bHQoY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCitw
cml2YXRlOgorICAgIFJlc3VsdHMgbV9yZXN1bHRzOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5k
ZXJpbmdNb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXBy
ZXNlbnRhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkYmZmN2Q4MDQ3Y2VmOWVmNjNhMzZlY2MzNWU1ZTli
MjAxMWNlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmgKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgRmlsdGVyUmVwcmVzZW50YXRpb24g
OiB1aW50OF90IHsKKyAgICBUZXN0T3V0cHV0LAorICAgIERlYnVnZ2luZworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0YTI1NGRhMDhm
M2VjMTIxZTQ4MjhjZGE3Yjg1NmZiMDU5YThmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKQEAgLTAs
MCArMSwzOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorCisjaW5j
bHVkZSAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisK
KyNpZiBVU0UoQ09SRV9JTUFHRSkKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIK
KyNlbmRpZgorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2luY2x1ZGUgPGFybV9u
ZW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJh
dGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRy
PEZpbHRlclJlc3VsdD4gRmlsdGVyUmVzdWx0OjpjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7
CisgICAgaWYgKHByaW1pdGl2ZVN1YnJlZ2lvbi5pc0VtcHR5KCkgfHwgZHJhd2luZ1JlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKGxvZ2ljYWxTaXplKSk7CisjaWYgVVNFKENPUkVfSU1BR0Up
CisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRlclJlc3VsdENvcmVJbWFnZShwcmltaXRp
dmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0LCBsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKSk7CisjZW5kaWYKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGaWx0ZXJSZXN1bHRTb2Z0d2FyZShwcmltaXRpdmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0
LCBsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
KSk7Cit9CisKK0ZpbHRlclJlc3VsdDo6RmlsdGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQor
ICAgIDogbV9wcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKQorICAgICwgbV9k
cmF3aW5nUmVjdChkcmF3aW5nUmVjdCkKKyAgICAsIG1fbG9naWNhbFNpemUobG9naWNhbFNpemUp
CisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fcmVzb2x1dGlv
blNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQor
eworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qg
cm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNy
YzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0g
aW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNy
Yy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwor
ICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMg
PSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0
aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZz
cmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0g
c291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKKyAg
ICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKwor
ICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0g
c291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9u
ZW50WzFdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9
IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21w
b25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9Cisj
ZW5kaWYKK30KKworc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBz
aXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVm
ZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwor
ICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisK
KyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0
aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93
Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdC
QTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWlu
dDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90
KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdl
dCgpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0
YSgpOworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFs
cGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21w
b25lbnRbMF0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhh
OworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzJdID0gMDsKKyAgICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFs
cGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4mIEZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIHJldHVybiBhbHBoYUZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgPyBtX3VucHJlbXVsdGlwbGllZFBpeGVs
QnVmZmVyIDogbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9CisKK1BpeGVsQnVmZmVyKiBG
aWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3Jt
YXQpCit7CisgICAgYXV0byYgcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhh
Rm9ybWF0KTsKKyAgICBpZiAocGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZm
ZXIudmFsdWUoKTsKKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0
LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fY29sb3JTcGFjZSB9OworCisgICAgaWYgKGF1dG8gaW1h
Z2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgcGl4ZWxCdWZmZXIg
PSBpbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIEludFNp
emUobV9sb2dpY2FsU2l6ZSkgfSk7CisgICAgICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgp
OworICAgIH0KKyAgICAKKyAgICBJbnRTaXplIHNjYWxlZFNpemUobV9sb2dpY2FsU2l6ZSk7Cisg
ICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwor
ICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgcGl4ZWxCdWZm
ZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgc2NhbGVkU2l6ZSk7CisgICAgaWYg
KCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAocGl4ZWxC
dWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQor
ICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCktPmRhdGEoKSwgcGl4ZWxCdWZmZXIt
PmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgY29weVVucHJl
bXVsdGlwbHlpbmdBbHBoYShwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQpLT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCksIHNjYWxlZFNp
emUpOworCisgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworfQorCitSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IEZpbHRlclJlc3VsdDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgSW50U2l6ZSBzY2Fs
ZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHND
bGFtcGluZyhzY2FsZWRTaXplKSk7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSk7CisKKyAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92
ZXJmbG93PigpICogNDsKKyAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gVWludDhD
bGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOworICAgIGlm
ICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29weVBpeGVs
QnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOworICAg
IHJldHVybiBwaXhlbEJ1ZmZlcjsKK30KKworYm9vbCBGaWx0ZXJSZXN1bHQ6OnJlcXVpcmVzUGl4
ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gY29sb3JTcGFjZSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gVGhpcyBm
dW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBj
b2xvciBzcGFjZSBjb252ZXJzaW9uCisgICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNv
bnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0Cisg
ICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKKyAgICBy
ZXR1cm4gY29sb3JTcGFjZSAmJiBtX2NvbG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7CisjZWxzZQor
ICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9u
IG5vbi1DRworICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVj
dCk7CisgICAgc2NhbGVkUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRT
aXplIHNjYWxlZFBhaW50U2l6ZShtX2xvZ2ljYWxTaXplKTsKKyAgICBzY2FsZWRQYWludFNpemUu
c2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGlu
YXRpb24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRo
ZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8
IDAgfHwgc2NhbGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2Fs
ZWRSZWN0Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0
KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRpb24ubGVuZ3RoKCkpOworCisgICAgLy8g
RWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3Vy
Y2UuCisgICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkg
PD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2Fs
ZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGludCB4T3JpZ2luID0gc2NhbGVkUmVjdC54KCk7CisgICAgaW50IHhEZXN0ID0gMDsK
KyAgICBpZiAoeE9yaWdpbiA8IDApIHsKKyAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKKyAgICAg
ICAgeE9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7
CisgICAgaWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkKKyAgICAgICAgeEVuZCA9
IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpOworCisgICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0
LnkoKTsKKyAgICBpbnQgeURlc3QgPSAwOworICAgIGlmICh5T3JpZ2luIDwgMCkgeworICAgICAg
ICB5RGVzdCA9IC15T3JpZ2luOworICAgICAgICB5T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50
IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFkoKTsKKyAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6
ZS5oZWlnaHQoKSkKKyAgICAgICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKKwor
ICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7CisgICAgaW50IGRlc3RpbmF0aW9u
U2NhbmxpbmUgPSBzY2FsZWRSZWN0LndpZHRoKCkgKiA0OworICAgIGludCBzb3VyY2VTY2FubGlu
ZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlv
blBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgo
KSkgKyB4RGVzdCkgKiA0OworICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNl
LmRhdGEoKSArICgoeU9yaWdpbiAqIHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4p
ICogNDsKKworICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgeworICAgICAgICBtZW1jcHkoZGVz
dGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOworICAgICAgICBkZXN0aW5hdGlvblBp
eGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7CisgICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJj
ZVNjYW5saW5lOworICAgICAgICArK3lPcmlnaW47CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyKEltYWdl
QnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNv
bnN0Cit7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRT
aXplKHJlY3Quc2l6ZSgpKTsKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUg
Y29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2Ug
Y29udmVyc2lvbgorICAgIGF1dG8gY29udmVydGVkSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWNv
bnZlcnRlZEltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIC8v
IENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBm
cm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVy
LT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCByZWN0KTsKKyAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBj
b2xvclNwYWNlIH07CisgICAgcmV0dXJuIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1
ZmZlcihmb3JtYXQsIHJlY3QpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0
ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZl
ciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNw
YWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0KEludFBvaW50KCksIHBp
eGVsQnVmZmVyLnNpemUoKSk7CisgICAgcmVjdC5zY2FsZSgxIC8gbV9yZXNvbHV0aW9uU2NhbGUp
OworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShy
ZWN0LnNpemUoKSk7CisKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5j
b21pbmcgUGl4ZWxCdWZmZXIKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0
aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWlt
YWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaW1hZ2VCdWZm
ZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gZ2V0Q29u
dmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JT
cGFjZSk7Cit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojpjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBhdXRvKiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVy
SWZFeGlzdHMoYWxwaGFGb3JtYXQpID8gJnBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQp
LnZhbHVlKCkgOiBudWxscHRyOworCisgICAgaWYgKCFwaXhlbEJ1ZmZlcikgeworICAgICAgICBp
ZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7
CisgICAgICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1
ZmZlci4KKyAgICAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4
aXN0cygpKSB7CisgICAgICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8o
KSwgSW50U2l6ZShtX2xvZ2ljYWxTaXplKSB9OworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNv
bnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVy
LCBhbHBoYUZvcm1hdCwgcmVjdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAgICAgICAgICBj
b3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwg
c3JjUmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSB0aGlzLT5waXhlbEJ1ZmZlcihhbHBoYUZvcm1h
dCk7CisgICAgfQorCisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNl
KSkgeworICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGdldENvbnZlcnRl
ZFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQsICpjb2xvclNwYWNlKSkKKyAg
ICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRl
c3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvcHlJ
bWFnZUJ5dGVzKHBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKK30K
Kwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKQor
eworICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBm
b3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgorICAgIGlmICghbV9wcmVtdWx0aXBs
aWVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFVpbnQ4Q2xhbXBlZEFycmF5
JiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1
aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKKyAgICBpbnQgcGl4ZWxBcnJh
eUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CisKKyAgICAvLyBXZSBtdXN0IGhhdmUgZm91
ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKKyAgICBBU1NFUlQoIShwaXhl
bEFycmF5TGVuZ3RoICUgNCkpOworCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAg
IGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7CisgICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhl
bCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOworICAgICAgICBkbyB7
CisgICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVsRGF0YSBieSA2NC4KKyAgICAgICAgICAg
IHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0gdmxkNHFfdTgocGl4ZWxEYXRhKTsKKyAgICAg
ICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxb
MF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFs
WzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNd
KTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBp
eGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHZzdDRxX3U4
KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7CisgICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7
CisgICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8IGxhc3RQaXhlbCk7CisKKyAgICAgICAgcGl4
ZWxBcnJheUxlbmd0aCAmPSAweDNmOworICAgICAgICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBpbnQgbnVtUGl4ZWxzID0g
cGl4ZWxBcnJheUxlbmd0aCAvIDQ7CisKKyAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwg
Y2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2Fy
eQorICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAwKSB7CisgICAgICAgIC8vIEFscGhhIGlzIHRo
ZSA0dGggYnl0ZSBpbiBhIHBpeGVsCisgICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsg
Myk7CisgICAgICAgIC8vIENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVt
ZW50IHRoZSBwaXhlbCBsb2NhdGlvbgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsr
aSkgeworICAgICAgICAgICAgaWYgKCpwaXhlbERhdGEgPiBhKQorICAgICAgICAgICAgICAgICpw
aXhlbERhdGEgPSBhOworICAgICAgICAgICAgKytwaXhlbERhdGE7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQorICAgICAgICArK3BpeGVsRGF0YTsKKyAgICB9Cit9
CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25D
b2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisjaWYgVVNFKENHKQorICAgIC8vIENHIGhhbmRsZXMg
Y29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KKyAgICBVTlVTRURfUEFSQU0oY29s
b3JTcGFjZSk7CisjZWxzZQorICAgIGlmIChjb2xvclNwYWNlID09IG1fY29sb3JTcGFjZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlh
bGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCisgICAgLy8g
Y29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQg
YXJyYXlzLgorICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKSkK
KyAgICAgICAgaW1hZ2VCdWZmZXItPnRyYW5zZm9ybUNvbG9yU3BhY2UobV9jb2xvclNwYWNlLCBj
b2xvclNwYWNlKTsKKworICAgIG1fY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CisgICAgbV91bnBy
ZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyAgICBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlc3VsdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGRkNmM5NDQwNmRhOWFhMjZjMzIx
MjMxNTZhNDViOWU5MjBmMDYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaApAQCAtMCwwICsxLDkxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVsQnVmZmVyOworCitjbGFzcyBGaWx0ZXJS
ZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJSZXN1bHQ+IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmUHRyPEZpbHRlclJlc3VsdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgdmlydHVhbCB+RmlsdGVyUmVzdWx0
KCkgPSBkZWZhdWx0OworCisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9CisgICAgRmxvYXRSZWN0IGRyYXdpbmdS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nUmVjdDsgfQorCisgICAgRmxvYXRTaXplIGxv
Z2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQorICAgIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQor
ICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2FscGhhSW1hZ2U7IH0KKyAgICB2b2lkIHNldElzQWxwaGFJbWFnZShib29sIGFscGhh
SW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFnZTsgfQorCisgICAgdmlydHVhbCBSZWZQ
dHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgPSAwOworICAgIHZpcnR1YWwg
SW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgPSAwOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhl
bEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Cisg
ICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisg
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxv
cHQpOworICAgIAorICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOwor
ICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisK
K3Byb3RlY3RlZDoKKyAgICBGaWx0ZXJSZXN1bHQoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4p
IGNvbnN0OworICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxC
dWZmZXIoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0
JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisKKyAgICBGbG9hdFJl
Y3QgbV9wcmltaXRpdmVTdWJyZWdpb247CisgICAgRmxvYXRSZWN0IG1fZHJhd2luZ1JlY3Q7CisK
KyAgICBGbG9hdFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVy
aW5nTW9kZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKKyAgICBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgbV9jb2xvclNwYWNlOworCisgICAgYm9vbCBtX2FscGhhSW1hZ2UgeyBmYWxzZSB9
OworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bnByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcjsKK307CisKK3VzaW5nIEZpbHRlclJlc3VsdFZlY3RvciA9IFZlY3RvcjxSZWY8
RmlsdGVyUmVzdWx0Pj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0VmVjdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3Vs
dFZlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4MzE1MWI5ODI0ZjYyMjlmZGI0OWZiMDU2NzJmODNjNzZm
NWNhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlclJlc3VsdFZlY3Rvci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmls
dGVyUmVzdWx0OworCit1c2luZyBGaWx0ZXJSZXN1bHRWZWN0b3IgPSBWZWN0b3I8UmVmPEZpbHRl
clJlc3VsdD4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcAppbmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2YTc1MDM4NzkxMjhmNTRiNDRiLi40YmM2
YmM3MWM4NWRmYjFhZTM5MWRlYjI0M2RjODE0NTc1ZGIwYzFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNv
dXJjZS5jcHAKQEAgLTM2LDEyICszNiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3Qm
IGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5p
dFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKQogewotICAg
IG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFj
ZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOwotICAgIC8vIFRvIHNjYWxlIFos
IG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGly
ZWN0aW9uIGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBv
aW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7Ci0gICAgbV9i
dWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOwor
Ly8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisvLyAgICAvLyBUbyBz
Y2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRo
ZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZm
ZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54
KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7
CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0
aW9uLngoKSk7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBQb2ludExp
Z2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAK
aW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkwOTBhZDZjZjNhMy4uNGM4ZDUyOGEy
NGMyNDk1YmU4MWEyZTY0Mjc0ZjQzMDRiM2FkMzFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDYwICsyMSw0NCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCiAKLSNpbmNsdWRlICJDb2xv
ci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
U3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxTb3VyY2VB
bHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKK1Jl
ZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU291cmNlQWxwaGEoKSk7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIFNvdXJjZUFscGhh
OjplZmZlY3ROYW1lKCkKK1NvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSgpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoVHlwZTo6U291cmNlQWxwaGEpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIlNvdXJjZUFscGhhIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBzX2VmZmVjdE5hbWU7
CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK2Nv
bnN0IEF0b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKIHsKLSAgICBpbnB1dEVm
ZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBzZXRBYnNvbHV0ZVBh
aW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgc3RhdGlj
IE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUo
IlNvdXJjZUFscGhhIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHJl
dHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIFNvdXJjZUFscGhhOjphcHBseShGaWx0ZXJPdXRwdXQm
IG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFy
eVNldCkgY29uc3QKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFn
ZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4
dCgpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2su
dGFrZUxhc3QoKTsKIAotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGlucHV0RWZmZWN0
KDApLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0
aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgRmxvYXRSZWN0IGltYWdlUmVj
dChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBmaWx0ZXJD
b250ZXh0LmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6OmJsYWNrKTsKLSAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIEludFBvaW50KCksIENvbXBvc2l0ZU9w
ZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAotVGV4dFN0cmVh
bSYgU291cmNlQWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3QKK1RleHRTdHJlYW0mIFNvdXJjZUFscGhhOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29u
c3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltTb3VyY2VBbHBoYV1cbiI7CiAgICAgcmV0dXJu
IHRzOwogfQogCi1Tb3VyY2VBbHBoYTo6U291cmNlQWxwaGEoRmlsdGVyRWZmZWN0JiBzb3VyY2VF
ZmZlY3QpCi0gICAgOiBGaWx0ZXJFZmZlY3Qoc291cmNlRWZmZWN0LmZpbHRlcigpLCBUeXBlOjpT
b3VyY2VBbHBoYSkKLXsKLSAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKHNvdXJjZUVmZmVjdC5v
cGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlucHV0RWZmZWN0cygpLmFwcGVuZCgmc291cmNl
RWZmZWN0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCmluZGV4IDY2
MjlhMzY3ZmQ0MzI0MmQxYzRhYWRlNjRjNTYxZTg2NGEzOTQ5MGYuLjM4OWVjYjNiZmNkNjQ0NWY1
NmU2N2IyNThiYzY0ZTViMWZiMjUxMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE3LDggKzE4LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU291cmNlQWxwaGFfaAotI2RlZmluZSBTb3VyY2VB
bHBoYV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCkBAIC0y
NiwyMSArMjYsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb3VyY2VBbHBoYSA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOiAgICAgICAgCi0gICAgc3RhdGljIFJlZjxT
b3VyY2VBbHBoYT4gY3JlYXRlKEZpbHRlckVmZmVjdCYpOworICAgIHN0YXRpYyBSZWY8U291cmNl
QWxwaGE+IGNyZWF0ZSgpOwogCiAgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVmZmVjdE5h
bWUoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBTb3VyY2VBbHBoYShGaWx0ZXJFZmZlY3Qm
KTsKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQ7IH0KKyAgICBTb3VyY2VBbHBo
YSgpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
ICJTb3VyY2VBbHBoYSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwot
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZpbHRlclJlc3Vs
dCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJv
dW5kYXJ5U2V0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmls
dGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNvdXJjZUFscGhhX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMu
Y3BwCmluZGV4IDg4YTM2YTQxMDI2YmQzYTU4NTQ0NzgyMDI3NGMxMTA3ZDc4MzkyZTkuLjhiZGZj
YjgxZGI5Y2EzOTFhZGY3MTVmZGE3MGUyOTUyYTg0ODVlZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNw
cApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTggKzIxLDIxIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgogCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
RmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUdyYXBoaWM+IFNv
dXJjZUdyYXBoaWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxTb3VyY2VHcmFwaGljPiBT
b3VyY2VHcmFwaGljOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJj
ZUdyYXBoaWMoKSk7Cit9CisKK1NvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMoKQorICAgIDog
RmlsdGVyRWZmZWN0KFR5cGU6OlNvdXJjZUdyYXBoaWMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU291cmNlR3JhcGhpYyhmaWx0ZXIpKTsKIH0KIAogY29uc3QgQXRvbVN0cmluZyYgU291
cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCkBAIC00MCwyNyArNDQsMjAgQEAgY29uc3QgQXRvbVN0
cmluZyYgU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCiAgICAgcmV0dXJuIHNfZWZmZWN0TmFt
ZTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
CitGbG9hdFJlY3QgU291cmNlR3JhcGhpYzo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3Qm
KSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxv
YXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBwYWludFJl
Y3Quc2NhbGUoZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIuZmlsdGVy
UmVzb2x1dGlvbigpLmhlaWdodCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgIHJldHVybiBnZW9tZXRyeS5zb3VyY2VJbWFnZVJl
Y3QoKTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQor
RmlsdGVyUmVzdWx0KiBTb3VyY2VHcmFwaGljOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwg
RmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNl
dCkgY29uc3QKIHsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotCi0gICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAg
ICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKLSAgICBp
ZiAoIXJlc3VsdEltYWdlIHx8ICFzb3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1
ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIHJldHVybiBhcHBseVBsYXRmb3Jt
KG91dHB1dCwgeyB9LCBzb3VyY2VJbWFnZSwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAot
VGV4dFN0cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNlR3Jh
cGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVz
ZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbU291cmNlR3JhcGhpY11c
biI7CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCAzMGNkNTRmMjQ1M2JiYThh
Mzc3NjMyMTMyOGVmMjEwNmI3ZmNhNWJmLi5mYWZjNmZlZjk3ZWYzOTgyMDFhMjdkNDk1NTc1NTc1
ZjRhNzhiY2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNv
bT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE4LDQxICsxOSwzNCBAQAogICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291
cmNlR3JhcGhpY19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJj
ZUdyYXBoaWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0
YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8
U291cmNlR3JhcGhpYz4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYg
ZWZmZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIFNvdXJjZUdyYXBoaWMoRmlsdGVyJiBmaWx0
ZXIpCi0gICAgICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6U291cmNlR3JhcGhpYykK
LSAgICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkpOwotICAgIH0KKyAgICBTb3VyY2VHcmFwaGljKCk7CiAKICAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUdyYXBoaWMiOyB9
CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3Qg
RmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRmls
dGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
RmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0OyB9Ci19OworICAgIEZpbHRlclJlc3VsdCogYXBw
bHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5
U2V0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLX0gLy9uYW1lc3BhY2UgV2ViQ29yZQorICAgIGJvb2wg
YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0IG92ZXJyaWRlOwogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNv
dXJjZUdyYXBoaWMpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRl
ckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkg
PT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOyB9Ci1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgYm9vbCBhcHBs
eUNvcmVJbWFnZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgogCisg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKK307CiAKLSNlbmRpZiAv
LyBTb3VyY2VHcmFwaGljX2gKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291
cmNlLmNwcAppbmRleCA3MTYwN2FiMDBmZjlkNmE2ZDAxNjkxZDliYmI4NTUzZDFmMzQ4ZDAwLi5k
MWJlYzEyMDIwNmE1MzZlMTBiMTBiZjJjMTEzMGY0ZjM0MmJiYTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRT
b3VyY2UuY3BwCkBAIC00MSwzNiArNDEsMzYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gYWNj
b3JkaW5nIHRvIHRoZSBTVkcgMS4xIFNFIGxpZ2h0IHJlZ3Jlc3Npb24gdGVzdHMKIHN0YXRpYyBj
b25zdCBmbG9hdCBhbnRpQWxpYXNUcmVzaG9sZCA9IDAuMDE2ZjsKIAotdm9pZCBTcG90TGlnaHRT
b3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3Qs
IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQordm9pZCBTcG90TGlnaHRTb3VyY2U6OmluaXRQ
YWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikKIHsKLSAgICBt
X2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VU
b0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpKTsKLSAgICAvLyBUbyBzY2FsZSBaLCBt
YXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVj
dGlvbiBieSB6LgotICAgIEZsb2F0UG9pbnQgbWFwcGVkWiA9IGZpbHRlckVmZmVjdC5tYXBQb2lu
dEZyb21Vc2VyU3BhY2VUb0J1ZmZlcih7IG1fdXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91c2Vy
U3BhY2VQb3NpdGlvbi56KCksIG1fdXNlclNwYWNlUG9zaXRpb24ueSgpIH0pOwotICAgIG1fYnVm
ZmVyUG9zaXRpb24uc2V0WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKLSAg
ICAKLSAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yID0gbV91c2VyU3BhY2VQb2ludHNB
dCAtIG1fdXNlclNwYWNlUG9zaXRpb247Ci0gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rv
ci5ub3JtYWxpemUoKTsKLQotICAgIGlmICghbV9saW1pdGluZ0NvbmVBbmdsZSkgewotICAgICAg
ICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsKLSAgICAgICAgcGFpbnRpbmdE
YXRhLmNvbmVGdWxsTGlnaHQgPSAtYW50aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29uZUFuZ2xlOwotICAg
ICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPCAwLjBmKQotICAgICAgICAgICAgbGltaXRpbmdD
b25lQW5nbGUgPSAtbGltaXRpbmdDb25lQW5nbGU7Ci0gICAgICAgIGlmIChsaW1pdGluZ0NvbmVB
bmdsZSA+IDkwLjBmKQotICAgICAgICAgICAgbGltaXRpbmdDb25lQW5nbGUgPSA5MC4wZjsKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IGNvc2YoZGVnMnJhZCgxODAuMGYg
LSBsaW1pdGluZ0NvbmVBbmdsZSkpOwotICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdo
dCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9sZDsKLSAg
ICB9Ci0KLSAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZh
bHVlcwotICAgIGlmICghbV9zcGVjdWxhckV4cG9uZW50KQotICAgICAgICBwYWludGluZ0RhdGEu
c3BlY3VsYXJFeHBvbmVudCA9IDA7Ci0gICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09
IDEuMGYpCi0gICAgICAgIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMTsKLSAgICBl
bHNlIC8vIEl0IGlzIG5laXRoZXIgMC4wZiBub3IgMS4wZgotICAgICAgICBwYWludGluZ0RhdGEu
c3BlY3VsYXJFeHBvbmVudCA9IDI7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRl
ckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9u
Lnh5KCkpKTsKKy8vICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1f
dXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCisvLyAgICBGbG9hdFBv
aW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
eyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKKy8vICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WihtYXBw
ZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKKy8vCisvLyAgICBwYWludGluZ0RhdGEu
ZGlyZWN0aW9uVmVjdG9yID0gbV91c2VyU3BhY2VQb2ludHNBdCAtIG1fdXNlclNwYWNlUG9zaXRp
b247CisvLyAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLm5vcm1hbGl6ZSgpOworLy8K
Ky8vICAgIGlmICghbV9saW1pdGluZ0NvbmVBbmdsZSkgeworLy8gICAgICAgIHBhaW50aW5nRGF0
YS5jb25lQ3V0T2ZmTGltaXQgPSAwLjBmOworLy8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVs
bExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xkOworLy8gICAgfSBlbHNlIHsKKy8vICAgICAgICBm
bG9hdCBsaW1pdGluZ0NvbmVBbmdsZSA9IG1fbGltaXRpbmdDb25lQW5nbGU7CisvLyAgICAgICAg
aWYgKGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKKy8vICAgICAgICAgICAgbGltaXRpbmdDb25l
QW5nbGUgPSAtbGltaXRpbmdDb25lQW5nbGU7CisvLyAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFu
Z2xlID4gOTAuMGYpCisvLyAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7Cisv
LyAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IGNvc2YoZGVnMnJhZCgxODAu
MGYgLSBsaW1pdGluZ0NvbmVBbmdsZSkpOworLy8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVs
bExpZ2h0ID0gcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCAtIGFudGlBbGlhc1RyZXNob2xk
OworLy8gICAgfQorLy8KKy8vICAgIC8vIE9wdGltaXphdGlvbiBmb3IgY29tbW9uIHNwZWN1bGFy
RXhwb25lbnQgdmFsdWVzCisvLyAgICBpZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKKy8vICAgICAg
ICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDA7CisvLyAgICBlbHNlIGlmIChtX3Nw
ZWN1bGFyRXhwb25lbnQgPT0gMS4wZikKKy8vICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJF
eHBvbmVudCA9IDE7CisvLyAgICBlbHNlIC8vIEl0IGlzIG5laXRoZXIgMC4wZiBub3IgMS4wZgor
Ly8gICAgICAgIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMjsKIH0KIAogTGlnaHRT
b3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIFNwb3RMaWdodFNvdXJjZTo6Y29tcHV0ZVBpeGVs
TGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50
IHksIGZsb2F0IHopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzMxNTdhMGVkOTk4ZWMzNDBmMjMxMzkzM2Q4YmY2MzAxZTUwZWY5Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1z
IEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRkVCbGVuZC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIUhBVkUo
QVJNX05FT05fSU5UUklOU0lDUykKK2Jvb2wgRkVCbGVuZDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJS
ZXN1bHQmIHJlc3VsdCwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVm
ZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMu
c2l6ZSgpID09IDIpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworICAgIGF1dG8m
IGluMiA9IGlucHV0c1sxXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5pbWFn
ZUJ1ZmZlcigpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIyID0gaW4yLmltYWdlQnVmZmVyKCk7Cisg
ICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAg
aWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisvLyAgICBHcmFwaGlj
c0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworLy8gICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKy8vICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNh
bFNpemUoKSB9LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBtX21vZGUgfSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzczMmUzMGFiZWQ0M2IwMzYyZjQwNjY2ZTlkZDhlODkzZDhiM2FhZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKKwor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgor
CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgdm9pZCBtYXRyaXgoZmxv
YXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBn
ID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisgICAgZmxvYXQgYSA9IGFscGhhOworCisg
ICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJd
ICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKKyAgICBncmVlbiAgID0g
dmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlc1sgN10gKiBiICsgdmFsdWVz
WyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OworICAgIGJsdWUgICAgPSB2YWx1ZXNbMTBdICog
ciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNdICogYSArIHZh
bHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsgdmFsdWVzWzE2
XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1
NTsKK30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxv
YXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMpCit7CisgICAg
ZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7
CisKKyAgICByZWQgICAgID0gciAqIGNvbXBvbmVudHNbMF0gKyBnICogY29tcG9uZW50c1sxXSAr
IGIgKiBjb21wb25lbnRzWzJdOworICAgIGdyZWVuICAgPSByICogY29tcG9uZW50c1szXSArIGcg
KiBjb21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVudHNbNV07CisgICAgYmx1ZSAgICA9IHIgKiBj
b21wb25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNbN10gKyBiICogY29tcG9uZW50c1s4XTsKK30K
KworLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24g
aW4gQ29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBm
bG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEpCit7CisgICAgYWxwaGEgPSAw
LjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAuMDcyMSAqIGJsdWU7CisgICAgcmVkID0g
MDsKKyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9IDA7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFU
RSkKK3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgorYm9vbCBlZmZlY3RBcHBs
eUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNbOV0sIEludFNpemUgYnVmZmVyU2l6ZSkK
K3sKKyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAq
IDQpOworICAgIAorICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRS
SVgpIHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0
eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9y
TWF0cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBu
b24tdkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2YWx1ZXNbNF0gfHwgdmFsdWVzWzldIHx8IHZh
bHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7CisgICAgdWludDhfdCogZGF0YSA9
IHBpeGVsQXJyYXkuZGF0YSgpOworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndp
ZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBidWZmZXJTaXplLmhl
aWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAg
c3JjLmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0
LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gYnVmZmVyU2l6
ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsK
KyAgICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7CisgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAgIGNvbnN0IGludDE2X3Qg
bWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAorCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3Ip
KSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICog
ZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVl
c1sxMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29y
KSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNd
ICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZh
bHVlc1sgOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAorICAgICAgICB9OworICAgICAg
ICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZp
c29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAgICBjb25zdCBpbnQxNl90IG1h
dHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
Y29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCisgICAgICAg
ICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9u
ZW50c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCisgICAgICAgICAgICAw
LAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sy
XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihj
b21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICBkaXZpc29yLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdC
ODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdklt
YWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4
WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZp
c29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjcxNTQgKiBkaXZpc29y
KSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjA3MjEgKiBkaXZpc29yKSks
CisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4
ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1h
Z2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlw
ZT4KK3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1ZmZlclNpemUpCit7CisgICAgZmxvYXQg
Y29tcG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21w
b25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisgICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9
PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQorICAgICAgICBGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisKKyAg
ICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKKworI2lm
IFVTRShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5
cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCisgICAgICAg
IHJldHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOworI2VuZGlmCisK
KyAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9N
QVRSSVg6CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxC
eXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAg
ICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwor
ICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0
ZU9mZnNldCArIDIpOworICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0o
cGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgICAgICBtYXRyaXgocmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQg
KyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQg
KyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCAr
IDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJP
VEFURToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5
dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAg
ICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Cisg
ICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQg
KyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShw
aXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJl
ZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5
dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgorICAgICAgICBmb3IgKHVu
c2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlM
ZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBw
aXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVu
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxv
YXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAg
ICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwor
ICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOworICAgICAgICAgICAgcGl4
ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworVmVjdG9yPGZsb2F0PiBGRUNvbG9yTWF0cml4Ojpub3Jt
YWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKK3sKKyAgICBWZWN0b3I8
ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNb
aV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKKyAgICByZXR1cm4gbm9ybWFsaXplZFZh
bHVlczsKK30KKworYm9vbCBGRUNvbG9yTWF0cml4OjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlu
cHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAg
ICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1
bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGltYWdlQnVmZmVy
ID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgYXV0
byBpbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZVJlc3VsdENvb3JkaW5hdGVz
KGluLmRyYXdpbmdSZWN0KCksIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICAgICAgcmVzdWx0
SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbWFnZVJlY3Qp
OworICAgIH0KKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHQuY29s
b3JTcGFjZSgpIH07CisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1h
Z2UtPmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+
Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOworICAgIGlmICghcGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVs
QnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBpeGVsQnVm
ZmVyLT5zaXplKCk7CisKKyAgICBhdXRvIHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1
ZXMpOworCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9VTktOT1dOOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9N
QVRSSVg6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4
ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgICAgICBlZmZlY3RUeXBl
PEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFy
cmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX0hVRVJPVEFURToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVF
Uk9UQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToK
KyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4o
cGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIHJlc3Vs
dC5zZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
c3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBv
bmVudFRyYW5zZmVyU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY3NDMxNTQxMWQyZWJkOGY3Mjc3ODllNTI0YzAyYjRmZTAwYjQyYmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RkVDb21wb25lbnRUcmFuc2Zlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVD
b21wb25lbnRUcmFuc2Zlcjo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YzI4OGZiNmQxZmMxNjRkZDZjMjA0ODA0MzU5MzcxNjhhODQ3MzQ3ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b21wb3NpdGVTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUo
aW50IGMpCit7CisgICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKKyAgICB1bnNpZ25lZCB1YyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihjKTsKKyAgICByZXR1cm4gYnVmZlshISh1YyAmIH4weGZmKSArICEhKHVjICYgfih+
MHUgPj4gMSkpXTsKK30KKwordGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgorc3RhdGljIGlubGlu
ZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5z
aWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwg
ZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9hdCBzY2FsZWRLMTsKKyAg
ICBmbG9hdCBzY2FsZWRLNDsKKyAgICBpZiAoYjEpCisgICAgICAgIHNjYWxlZEsxID0gazEgLyAy
NTUuMGY7CisgICAgaWYgKGI0KQorICAgICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOworCisg
ICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7CisgICAgICAgIHVuc2lnbmVkIGNo
YXIgaTEgPSAqc291cmNlOworICAgICAgICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9u
OworICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBpMjsKKyAgICAgICAgaWYg
KGIxKQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKKyAgICAgICAg
aWYgKGI0KQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0OworCisgICAgICAgICpkZXN0
aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOworICAgICAgICArK3NvdXJjZTsKKyAgICAgICAg
KytkZXN0aW5hdGlvbjsKKyAgICB9Cit9CisKKy8vIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5j
bGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHMgZm9y
IHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZworLy8gaXMgbm90IG5lY2Vzc2FyeS4gVGhp
cyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgYXV0by12
ZWN0b3JpemF0aW9uLgordGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgorc3RhdGljIGlubGluZSB2
b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJj
ZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9h
dCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9hdCBzY2FsZWRL
MTsKKyAgICBmbG9hdCBzY2FsZWRLNDsKKyAgICBpZiAoYjEpCisgICAgICAgIHNjYWxlZEsxID0g
azEgLyAyNTUuMGY7CisgICAgaWYgKGI0KQorICAgICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBm
OworCisgICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7CisgICAgICAgIHVuc2ln
bmVkIGNoYXIgaTEgPSAqc291cmNlOworICAgICAgICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3Rp
bmF0aW9uOworICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBpMjsKKyAgICAg
ICAgaWYgKGIxKQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKKyAg
ICAgICAgaWYgKGI0KQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0OworCisgICAgICAg
ICpkZXN0aW5hdGlvbiA9IHJlc3VsdDsKKyAgICAgICAgKytzb3VyY2U7CisgICAgICAgICsrZGVz
dGluYXRpb247CisgICAgfQorfQorCisjaWYgIUhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKK3N0
YXRpYyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWduZWQgY2hhciogc291cmNl
LCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0
IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQoreworICAgIGZsb2F0IHVwcGVyTGlt
aXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6Om1heCgwLjBmLCBrMikgKyBzdGQ6Om1heCgw
LjBmLCBrMykgKyBrNDsKKyAgICBmbG9hdCBsb3dlckxpbWl0ID0gc3RkOjptaW4oMC4wZiwgazEp
ICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjptaW4oMC4wZiwgazMpICsgazQ7CisgICAgaWYg
KChrNCA+PSAwLjBmICYmIGs0IDw9IDEuMGYpICYmICh1cHBlckxpbWl0ID49IDAuMGYgJiYgdXBw
ZXJMaW1pdCA8PSAxLjBmKSAmJiAobG93ZXJMaW1pdCA+PSAwLjBmICYmIGxvd2VyTGltaXQgPD0g
MS4wZikpIHsKKyAgICAgICAgaWYgKGs0KSB7CisgICAgICAgICAgICBpZiAoazEpCisgICAgICAg
ICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMT4oc291cmNlLCBk
ZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVk
PDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMs
IGs0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAg
ICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwxLCAwPihzb3VyY2UsIGRlc3Rp
bmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwg
MD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQp
OworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoazQpIHsKKyAg
ICAgICAgaWYgKGsxKQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMT4o
c291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAxPihz
b3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGsxKQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0
aWNQaXhlbHM8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEs
IGsyLCBrMywgazQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRp
Y1BpeGVsczwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7CisgICAgfQorfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF0
Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQg
azMsIGZsb2F0IGs0KQoreworICAgIGludCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoKCk7CisgICAg
QVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RpbmF0aW9uLmxlbmd0aCgpKSk7
CisgICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5h
bWljYWxseS4KKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgQVNTRVJUKCEobGVu
Z3RoICYgMHgzKSk7CisgICAgcGxhdGZvcm1Bcml0aG1ldGljTmVvbihzb3VyY2UuZGF0YSgpLCBk
ZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOworI2Vsc2UKKyAgICBh
cml0aG1ldGljU29mdHdhcmUoc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKKyNlbmRpZgorfQorCitib29sIEZFQ29tcG9zaXRlOjphcHBs
eUFyaXRobWV0aWNTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAyKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0
c1swXS5nZXQoKTsKKyAgICBhdXRvJiBpbjIgPSBpbnB1dHNbMV0uZ2V0KCk7CisKKyAgICBhdXRv
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSByZXN1bHQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBl
ZmZlY3RBRHJhd2luZ1JlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZVJlc3VsdENvb3Jk
aW5hdGVzKGluLmRyYXdpbmdSZWN0KCksIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICBhdXRv
IHNvdXJjZVBpeGVsQXJyYXkgPSBpbi5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBlbmNsb3NpbmdJbnRSZWN0KGVmZmVjdEFEcmF3aW5nUmVjdCks
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGVmZmVjdEJEcmF3aW5nUmVjdCA9IGdlb21l
dHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW4yLmRyYXdpbmdSZWN0KCks
IHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICBpbjIuY29weVBpeGVsQnVmZmVyKGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZW5j
bG9zaW5nSW50UmVjdChlZmZlY3RCRHJhd2luZ1JlY3QpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OworCisgICAgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoKnNvdXJjZVBpeGVsQXJyYXksIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGU6OmFwcGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJl
KEZpbHRlclJlc3VsdCYgcmVzdWx0LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1
dHMuc2l6ZSgpID09IDIpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworICAgIGF1
dG8mIGluMiA9IGlucHV0c1sxXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5p
bWFnZUJ1ZmZlcigpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIyID0gaW4yLmltYWdlQnVmZmVyKCk7
CisgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7Cisg
ICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKworICAg
IGF1dG8gaW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRDb29yZGlu
YXRlcyhpbi5kcmF3aW5nUmVjdCgpLCByZXN1bHQuZHJhd2luZ1JlY3QoKSk7CisgICAgYXV0byBp
bWFnZVJlY3QyID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRDb29yZGluYXRlcyhp
bjIuZHJhd2luZ1JlY3QoKSwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOworICAgIAorICAgIHN3aXRj
aCAobV9jb21wb3NpdGVPcGVyYXRvcikgeworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
VU5LTk9XTjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKKyAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgaW1hZ2VSZWN0Mik7CisgICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogeworICAgICAg
ICAvLyBBcHBsaWVzIG9ubHkgdG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KKyAgICAgICAgYXV0
byBkcmF3aW5nUmVjdCA9IGluLmRyYXdpbmdSZWN0KCk7CisgICAgICAgIGF1dG8gZHJhd2luZ1Jl
Y3QyID0gaW4yLmRyYXdpbmdSZWN0KCk7CisgICAgICAgIGF1dG8gcmVzdWx0UmVjdCA9IHJlc3Vs
dC5kcmF3aW5nUmVjdCgpOworCisgICAgICAgIGF1dG8gZGVzdGluYXRpb25SZWN0ID0gZHJhd2lu
Z1JlY3Q7CisgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoZHJhd2luZ1JlY3QyKTsK
KyAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChyZXN1bHRSZWN0KTsKKyAgICAgICAg
aWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBhdXRvIGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZGVzdGluYXRpb25SZWN0OworICAg
ICAgICBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdC5tb3ZlQnkoLXJlc3VsdFJlY3QubG9jYXRpb24o
KSk7CisgICAgICAgIGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZ2VvbWV0cnkuY29udmVydFRv
QWJzb2x1dGVDb29yZGluYXRlcyhhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCk7CisKKyAgICAgICAg
YXV0byBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0OworICAgICAgICBzb3VyY2VSZWN0Lm1v
dmVCeSgtZHJhd2luZ1JlY3QubG9jYXRpb24oKSk7CisgICAgICAgIHNvdXJjZVJlY3QgPSBnZW9t
ZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHNvdXJjZVJlY3QpOworCisgICAgICAg
IGF1dG8gc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3Q7CisgICAgICAgIHNvdXJjZTJSZWN0
Lm1vdmVCeSgtZHJhd2luZ1JlY3QyLmxvY2F0aW9uKCkpOworICAgICAgICBzb3VyY2UyUmVjdCA9
IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoc291cmNlMlJlY3QpOworCisg
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGFkanVz
dGVkRGVzdGluYXRpb25SZWN0LCBzb3VyY2UyUmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QsIHNv
dXJjZVJlY3QsIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6CisgICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgaW1hZ2VS
ZWN0MiwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkpLCBD
b21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGltYWdlUmVjdDIpOworICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCwgSW50UmVjdChJ
bnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VBdG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9YT1I6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlcjIsIGltYWdlUmVjdDIpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09NUE9TSVRF
X09QRVJBVE9SX0xJR0hURVI6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlcjIsIGltYWdlUmVjdDIpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCwgSW50UmVjdChJbnRQb2ludCgpLCBp
bWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRl
cik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEZFQ29tcG9zaXRlOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYgcmVzdWx0LCBjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0b3IgPT0g
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICAgICAgcmV0dXJuIGFwcGx5QXJp
dGhtZXRpY1NvZnR3YXJlKHJlc3VsdCwgaW5wdXRzLCBnZW9tZXRyeSk7CisgICAgcmV0dXJuIGFw
cGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJlKHJlc3VsdCwgaW5wdXRzLCBnZW9tZXRyeSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmFlODcxYTkyOGRmYmY0ODRm
NDc1N2EwMDczNTBhYTFmMjQ1N2ZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdh
cmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworYm9vbCBGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYs
IGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9OyAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmI5NjdkMTgwOWNkMGQ4OWZiMzllZGRmNzM4NTJiOWNk
MjUwZWQ1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAKQEAgLTAs
MCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitib29sIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYs
IGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdAoreworLy8gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OworLy8gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKKy8vCisvLyAgICBB
U1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CisvLyAgICBBU1NF
UlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CisvLworLy8gICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworLy8gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQorLy8gICAgICAgIHJldHVy
bjsKKy8vCisvLyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLT5kYXRhKCk7CisvLworLy8gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOworLy8gICAgYXV0byBpbnB1dEltYWdlID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZm
ZWN0QURyYXdpbmdSZWN0KTsKKy8vCisvLyAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0
KCkpOworLy8gICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZy
b20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3Ig
dmFsdWVzLgorLy8gICAgYXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+dW5tdWx0aXBsaWVk
UmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CisvLyAgICAKKy8vICAgIGlmICghaW5wdXRJbWFn
ZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2UpCisvLyAgICAgICAgcmV0dXJuOworLy8KKy8vICAgIEFT
U0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFnZS0+bGVuZ3RoKCkp
OworLy8KKy8vICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisvLyAgICBJbnRT
aXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOworLy8gICAgcGFpbnRT
aXplLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKy8vCisvLyAgICBGbG9hdFNpemUgc2Nh
bGUgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9zY2FsZSwgbV9zY2FsZSB9
KTsKKy8vICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lkdGgoKSAvIDI1NS4wOwor
Ly8gICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWlnaHQoKSAvIDI1NS4wOworLy8g
ICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7CisvLyAg
ICBmbG9hdCBzY2FsZWRPZmZzZXRZID0gMC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAwLjU7CisvLyAg
ICAKKy8vICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWCA9IHhDaGFubmVsSW5kZXgoKTsKKy8v
ICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVsSW5kZXgoKTsKKy8vCisvLyAg
ICBpbnQgcm93Qnl0ZXMgPSBwYWludFNpemUud2lkdGgoKSAqIDQ7CisvLworLy8gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBwYWludFNpemUuaGVpZ2h0KCk7ICsreSkgeworLy8gICAgICAgIGludCBs
aW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7CisvLworLy8gICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsreCkgeworLy8gICAgICAgICAgICBpbnQgZGVz
dGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0OworLy8gICAgICAgICAgICAK
Ky8vICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNv
bG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFj
ZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKKy8vICAgICAgICAgICAgaW50IHNyY1kg
PSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdl
LT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRP
ZmZzZXRZKTsKKy8vCisvLyAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0aW5hdGlvblBpeGVsUHRy
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRh
KCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKKy8vICAgICAgICAgICAgaWYgKHNyY1ggPCAwIHx8IHNy
Y1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWludFNpemUu
aGVpZ2h0KCkpIHsKKy8vICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gMDsK
Ky8vICAgICAgICAgICAgICAgIGNvbnRpbnVlOworLy8gICAgICAgICAgICB9CisvLworLy8gICAg
ICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
Kj4oaW5wdXRJbWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93
Qnl0ZXMpKTsKKy8vICAgICAgICB9CisvLyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNo
YWRvd1NvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2FmZjBkZmUxNDMzNjhhY2Y4NzIyMzNhOGIx
YTRlYmU3MTZlMzJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAKQEAgLTAs
MCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGRURyb3BTaGFkb3cuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJT
aGFkb3dCbHVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRURyb3BTaGFkb3c6
OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRy
eSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBp
biA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5pbWFnZUJ1
ZmZlcigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJl
c3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGbG9hdFNpemUgYmx1clJh
ZGl1cyA9IDIgKiBnZW9tZXRyeS5yZXNvbHZlVG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHsgbV9zdGRY
LCBtX3N0ZFkgfSk7CisgICAgRmxvYXRTaXplIG9mZnNldCA9IGdlb21ldHJ5LnJlc29sdmVUb0Fi
c29sdXRlQ29vcmRpbmF0ZXMoeyBtX2R4LCBtX2R5IH0pOworCisgICAgYXV0byBpbWFnZVJlY3Qg
PSBpbi5kcmF3aW5nUmVjdCgpOworICAgIGltYWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fi
c29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW1hZ2VSZWN0LCByZXN1bHQuZHJhd2luZ1JlY3QoKSk7
CisKKyAgICBhdXRvIGltYWdlUmVjdFdpdGhPZmZzZXQgPSBpbWFnZVJlY3Q7CisgICAgaW1hZ2VS
ZWN0V2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIHJlc3Vs
dENvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIHJlc3VsdENvbnRleHQuc2V0
QWxwaGEobV9zaGFkb3dPcGFjaXR5KTsKKyAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdFdpdGhPZmZzZXQpOworICAgIHJlc3VsdENvbnRleHQu
c2V0QWxwaGEoMSk7CisKKyAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywg
b2Zmc2V0LCBtX3NoYWRvd0NvbG9yKTsKKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgcmVzdWx0LmNvbG9yU3BhY2UoKSB9OworICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2lu
dCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9
IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOworICAgIGlm
ICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgc291
cmNlUGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRvdy5i
bHVyTGF5ZXJJbWFnZShzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUo
KSwgNCAqIHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7CisKKyAgICByZXN1bHRJbWFnZS0+
cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsKKworICAgIHJlc3VsdENv
bnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7
CisgICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZXN1
bHQubG9naWNhbFNpemUoKSksIG1fc2hhZG93Q29sb3IpOworICAgIHJlc3VsdENvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXIpOwor
CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
LCBpbWFnZVJlY3QpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yMDYwZDQ0Y2NmYzFhMzZmYzk2NTcyYmIyYzIzYjg5ZDQzZTU0ZmYyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUZsb29kU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRmxvb2QuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgRkVGbG9vZDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnkpIGNvbnN0Cit7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZl
cigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8gY29sb3IgPSBtX2Zsb29kQ29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkobV9m
bG9vZE9wYWNpdHkpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJz
b2x1dGVDb29yZGluYXRlcyhyZXN1bHQuZHJhd2luZ1JlY3QoKSk7CisgICAgcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZVJlY3Quc2l6
ZSgpKSwgY29sb3IpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zNGZmYzBlNWY5MDM5NjViOTIyNzk5N2RjZmIwN2YzY2ZkOGUwNWYzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OmFwcGx5
U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VC
dWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVM
aWdodGluZ1NvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYTJmYTU2NDNmZWZhOTQzY2UzZmI5YTBh
MDE1MWQ4MDlkMDI0NzBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwCkBAIC0w
LDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVn
ZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZworICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVMaWdodGluZy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgRkVMaWdodGluZzo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21l
dHJ5JikgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODBiZGY3ZDI4NjU3OTM0ZDAzMzE0M2QzNGJkZDA5MGRmODEyNzFlOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVNZXJnZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVNZXJnZS5oIgorCisjaW5jbHVkZSAiRmls
dGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNZXJnZTo6YXBw
bHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBj
b25zdAoreworICAgIEFTU0VSVCghaW5wdXRzLmlzRW1wdHkoKSk7CisKKyAgICBhdXRvIHJlc3Vs
dEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0
ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1
dHMpIHsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGlucHV0LT5pbWFnZUJ1ZmZlcigpOwor
ICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGF1dG8gaW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRD
b29yZGluYXRlcyhpbnB1dC0+ZHJhd2luZ1JlY3QoKSwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOwor
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdl
UmVjdCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzRkNzkyMjY2ZmM1NzFkYmZhMWFkYTRiZmJjMjgwZjBiNmM4ZmQ5MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIw
MTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRkVNb3JwaG9sb2d5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRU1vcnBo
b2xvZ3k6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiwgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRT
b2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlNjFkMDliMDNhYzRmMGVl
ZGQ1NTEyNjQ2ZjVjOGYzODNjNjRkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3Bw
CkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU9mZnNldC5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2Vv
bWV0cnkuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVPZmZzZXQ6OmFwcGx5U29m
dHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0
c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOwor
ICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
cmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQuc2V0SXNBbHBoYUltYWdlKGlu
LmlzQWxwaGFJbWFnZSgpKTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW4uZHJhd2luZ1JlY3Qo
KTsKKyAgICBpbWFnZVJlY3QubW92ZShnZW9tZXRyeS5yZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRl
cyh7IG1fZHgsIG1fZHkgfSkpOworICAgIGltYWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fi
c29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW1hZ2VSZWN0LCByZXN1bHQuZHJhd2luZ1JlY3QoKSk7
CisKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWVhM2NmNzY0NzFiYmFjMTk5ODk0ZTcyNWRhYzk3YzNjMDllZTI4OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVU
aWxlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZFVGlsZS5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0
ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKHRhcmdl
dFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBhdXRv
IGxvZ2ljYWxSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdCh0YXJnZXRSZWN0KTsKKwor
ICAgIEZsb2F0U2l6ZSBzY2FsZTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUobG9naWNhbFJlY3Quc2l6ZSgpLCBzY2FsZSk7CisKKyAgICBhdXRv
IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVyaW5n
TW9kZSwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWltYWdl
QnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLnNjYWxlKHNjYWxlKS50cmFuc2xhdGUoLWxvZ2ljYWxS
ZWN0LmxvY2F0aW9uKCkpLm11bHRpcGx5KGFic29sdXRlVHJhbnNmb3JtKTsKKworICAgIEdyYXBo
aWNzQ29udGV4dCYgaW1hZ2VDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICBp
bWFnZUNvbnRleHQuY29uY2F0Q1RNKHRyYW5zZm9ybSk7CisKKyAgICByZXR1cm4gaW1hZ2VCdWZm
ZXI7Cit9CisKK2Jvb2wgRkVUaWxlOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYgcmVzdWx0
LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlt
YWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdl
QnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmVzdWx0LnNldElzQWxwaGFJbWFnZShpbi5pc0FscGhhSW1hZ2UoKSk7CisKKyAgICBh
dXRvIGltYWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW4u
ZHJhd2luZ1JlY3QoKSk7CisgICAgYXV0byByZXN1bHRJbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252
ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKworICAgIGF1
dG8gcHJpbWl0aXZlU3VicmVnaW9uID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVDb29yZGlu
YXRlcyhpbi5wcmltaXRpdmVTdWJyZWdpb24oKSk7CisgICAgYXV0byByZXN1bHRQcmltaXRpdmVT
dWJyZWdpb24gPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHJlc3VsdC5w
cmltaXRpdmVTdWJyZWdpb24oKSk7CisgICAgCisgICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1v
cmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2
ZXMgdGhlCisgICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMg
aXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgorICAgIEZsb2F0
UmVjdCB0aWxlUmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBGbG9hdFBvaW50IGluTWF4
RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOworICAgIEZsb2F0UG9pbnQgbWF4
RWZmZWN0TG9jYXRpb24gPSByZXN1bHRQcmltaXRpdmVTdWJyZWdpb24ubG9jYXRpb24oKTsKKy8v
ICAgIGlmIChpbi5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlu
cHV0KSB7CisvLyAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKy8vICAg
ICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKKy8vICAgICAgICB0aWxlUmVj
dC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJS
ZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOworLy8gICAgfQorCisgICAgYXV0byB0aWxlSW1hZ2VCdWZm
ZXIgPSBjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgZ2VvbWV0cnkuYWJzb2x1dGVUcmFuc2Zv
cm0oKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOworICAgIGlmICghdGlsZUltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIHRpbGVJbWFnZUNvbnRleHQudHJhbnNsYXRlKC1pbk1h
eEVmZmVjdExvY2F0aW9uLngoKSwgLWluTWF4RWZmZWN0TG9jYXRpb24ueSgpKTsKKyAgICB0aWxl
SW1hZ2VDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdC5sb2Nh
dGlvbigpKTsKKworICAgIGF1dG8gdGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0
aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2VCdWZmZXIpKTsKKyAgICBpZiAoIXRpbGVJbWFnZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRy
YW5zZm9ybTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0
aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOworCisgICAgYXV0byBwYXR0ZXJuID0gUGF0dGVybjo6
Y3JlYXRlKHRpbGVJbWFnZS5yZWxlYXNlTm9uTnVsbCgpLCB7IHRydWUsIHRydWUsIHBhdHRlcm5U
cmFuc2Zvcm0gfSk7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGZpbHRlckNvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RG
TW92ZShwYXR0ZXJuKSk7CisgICAgCisgICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCByZXN1bHRJbWFnZVJlY3Quc2l6ZSgpKSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0
d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZThkNDA5ZDZjMWFiOGQz
ZGI0YWZkMmM2YjkyODM1OTUwMWEwNWZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2Fy
ZS5jcHAKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
QXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgRkVUdXJidWxlbmNlOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBj
b25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNlMWNjZTI4YjNkYTYyNjYyMGUzNDIzNGM5NDY1ODIyNmU0NjY2YjYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0U29mdHdh
cmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlciogRmlsdGVyUmVzdWx0
U29mdHdhcmU6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShtX2xvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgp
OworICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1fbG9naWNhbFNpemUp
IH07CisKKyAgICBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIo
KnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCksIHJlY3QpOworICAgIGVsc2UgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0
UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2Fy
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
aWx0ZXJSZXN1bHRTb2Z0d2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzOGM0NTY4ZjUxYzM2MmI5ZmNhOTZi
NGFmYjQzNWI0MzNlOTkxMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmgKQEAg
LTAsMCArMSw0NyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0Ogor
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZp
bHRlclJlc3VsdFNvZnR3YXJlIDogcHVibGljIEZpbHRlclJlc3VsdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQ7CisgICAgCitwcml2YXRlOgorICAgIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMoKSBvdmVycmlkZSB7IHJldHVy
biBtX2ltYWdlQnVmZmVyOyB9CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJp
ZGU7CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29y
ZTo6RmlsdGVyUmVzdWx0U29mdHdhcmUpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OkZpbHRlclJlc3VsdCYgcmVzdWx0KSB7IHJldHVybiByZXN1bHQucmVuZGVyaW5nTW9k
ZSgpID09IFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhh
U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzYjVkNzMwMDVjNzg5NzYwYWQxYWU0MGFkOGM3MWQx
ZGNhNzIyNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIFNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlu
cHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAg
ICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVz
dWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byBpbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0
ZUNvb3JkaW5hdGVzKGluLmRyYXdpbmdSZWN0KCkpOworCisgICAgcmVzdWx0SW1hZ2UtPmNvbnRl
eHQoKS5maWxsUmVjdChGbG9hdFJlY3QgeyB7IH0sIGltYWdlUmVjdC5zaXplKCkgfSwgQ29sb3I6
OmJsYWNrKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIEludFBvaW50KCksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1Nv
dXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGUwMjhjNTI2ZWRhOWE4Y2YxY2UwNmU5OTBmMmM3M2QwZjlkZmM2ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291
cmNlR3JhcGhpY1NvZnR3YXJlLmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgU291cmNlR3JhcGhpYzo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNvdXJjZUltYWdlKTsKKwor
ICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJl
c3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIHJl
dHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IGY0NGFlMTI5ZDA3MzhkMzBjNzZlNzEwODViMmFlYzA1
YTdiNmYxZGEuLmFmZGUwMjQxNTI5N2UzNmJiZTEyZWI5ZWNmZThmZjU5YTFiNzFhNDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNDEyICsyOCwzMTQgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKIAotI2luY2x1ZGUgIkNhY2hl
ZFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIK
LSNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4Lmgi
CiAjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgogI2luY2x1ZGUgIkZFRHJvcFNoYWRv
dy5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCi0jaW5jbHVkZSAiRkVNZXJnZS5oIgot
I2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisj
aW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiUmVmZXJlbmNlZFNWR1Jlc291
cmNlcy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5o
IgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgi
Ci0jaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNs
dWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+Ci0KLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZDJkMS5oPgot
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPENTU0ZpbHRlcj4gQ1NTRmlsdGVy
OjpjcmVhdGUoKQorUmVmUHRyPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NG
aWx0ZXIpOworICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYobmV3IENTU0ZpbHRlcihvcGVyYXRp
b25zLCByZW5kZXJpbmdNb2RlKSk7CisKKyAgICBpZiAoIWZpbHRlci0+YnVpbGRGdW5jdGlvbnMo
cmVuZGVyZXIsIG9wZXJhdGlvbnMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBmaWx0ZXI7CiB9CiAKLUNTU0ZpbHRlcjo6Q1NTRmlsdGVyKCkKLSAgICA6IEZpbHRlcihG
bG9hdFNpemUgeyAxLCAxIH0pCi0gICAgLCBtX3NvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYzo6
Y3JlYXRlKCp0aGlzKSkKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKFZlY3Rv
cjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmIGZ1bmN0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTRmlsdGVyKFdURk1vdmUoZnVu
Y3Rpb25zKSwgcmVuZGVyaW5nTW9kZSkpOwogfQogCi1DU1NGaWx0ZXI6On5DU1NGaWx0ZXIoKSA9
IGRlZmF1bHQ7CitDU1NGaWx0ZXI6OkNTU0ZpbHRlcihjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBv
cGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCisgICAgOiBGaWx0ZXIocmVu
ZGVyaW5nTW9kZSwgVHlwZTo6Q1NTRmlsdGVyKQoreworICAgIG1faGFzRmlsdGVyVGhhdE1vdmVz
UGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKKyAgICBtX2hh
c0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3BlcmF0aW9u
cy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOworfQog
Ci1HcmFwaGljc0NvbnRleHQqIENTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KCkKK0NTU0ZpbHRlcjo6
Q1NTRmlsdGVyKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmIGZ1bmN0aW9ucywgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKQorICAgIDogRmlsdGVyKHJlbmRlcmluZ01vZGUsIFR5cGU6
OkNTU0ZpbHRlcikKKyAgICAsIG1fZnVuY3Rpb25zKFdURk1vdmUoZnVuY3Rpb25zKSkKIHsKLSAg
ICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxs
cHRyOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNl
RmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZm
ZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbikKK3N0YXRpYyBS
ZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGVTVkdGaWx0ZXIoRmlsdGVyJiBmaWx0ZXIsIFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZlY3QgJnByZXZpb3VzRWZmZWN0LCBjb25zdCBSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbikKIHsKLSAgICBhdXRvKiBmaWx0
ZXJFbGVtZW50ID0gcmVuZGVyZXIuZW5zdXJlUmVmZXJlbmNlZFNWR1Jlc291cmNlcygpLnJlZmVy
ZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCksIGZpbHRlck9wZXJhdGlvbik7
Ci0gICAgaWYgKCFmaWx0ZXJFbGVtZW50KSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIkNTU0ZpbHRlciAiIDw8IHRoaXMgPDwgIiBidWlsZFJlZmVyZW5jZUZp
bHRlcjogZmFpbGVkIHRvIGZpbmQgZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcgcGVuZGluZyByZXNv
dXJjZSAiIDw8IGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKLSAgICAgICAgLy8gQWx0aG91
Z2ggd2UgZGlkIG5vdCBmaW5kIHRoZSByZWZlcmVuY2VkIGZpbHRlciwgaXQgbWlnaHQgZXhpc3Qg
bGF0ZXIgaW4gdGhlIGRvY3VtZW50LgotICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBhbm9u
eW1vdXMgUmVuZGVyT2JqZWN0cy4gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzMTA4NT4KLSAgICAg
ICAgLy8gRklYTUU6IFVuY2xlYXIgaWYgdGhpcyBkb2VzIGFueXRoaW5nLgotICAgICAgICBpZiAo
YXV0byogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJlbmRlcmVy
LmRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShmaWx0
ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSwgKmVsZW1lbnQpOworICAgIGF1dG8mIHJlZmVyZW5jZWRT
VkdSZXNvdXJjZXMgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCk7Cisg
ICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMucmVmZXJlbmNl
ZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKwor
ICAgIGlmICghZmlsdGVyRWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQor
ICAgIAorICAgIHJldHVybiBTVkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCwgZmlsdGVy
LnJlbmRlcmluZ01vZGUoKSwgJnByZXZpb3VzRWZmZWN0KTsKK30KIAotICAgIGF1dG8gYnVpbGRl
ciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oJnByZXZpb3VzRWZmZWN0KTsKLSAgICBt
X3NvdXJjZUFscGhhID0gYnVpbGRlci0+Z2V0RWZmZWN0QnlJZChTb3VyY2VBbHBoYTo6ZWZmZWN0
TmFtZSgpKTsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVHcmF5U2NhbGVFZmZl
Y3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVy
YXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBodHRwczov
L2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5
c2NhbGVFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCisK
KyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAor
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVz
QW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNB
bW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAsCisgICAgICAgIDAs
CisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsKKworICAgIHJldHVy
biBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92
ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVj
dDsKLSAgICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IHJlZmVyZW5jZUVmZmVjdHM7CitzdGF0
aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2VwaWFFZmZlY3QoY29uc3QgQmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91
YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1v
dW50KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZY
VEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKKyAgICAv
LyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KKworICAgIFZlY3RvcjxmbG9hdD4gaW5w
dXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAu
NjA3ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAu
NzY5IC0gMC43NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAg
ICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAw
LjMxNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAor
CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVz
QW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsg
MC44NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAg
ICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAg
ICB9OworCisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZ
UEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQogCi0gICAgZm9yIChhdXRv
JiBlZmZlY3RFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzPigqZmlsdGVyRWxlbWVudCkpIHsKLSAgICAgICAgZWZmZWN0ID0gZWZmZWN0
RWxlbWVudC5idWlsZChidWlsZGVyLmdldCgpLCAqdGhpcyk7Ci0gICAgICAgIGlmICghZWZmZWN0
KSB7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NG
aWx0ZXIgIiA8PCB0aGlzIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBidWls
ZCBlZmZlY3QgZnJvbSAiIDw8IGVmZmVjdEVsZW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIH0KK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTYXR1
cmF0ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1h
dHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07Cisg
ICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJB
VEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAgICAgICAgZWZmZWN0RWxlbWVu
dC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgaWYgKGVmZmVj
dEVsZW1lbnQucmVuZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFD
RV9MSU5FQVJfU1JHQikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFj
ZShlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVy
cG9sYXRpb25GaWx0ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpKTsKLSNlbHNlCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAg
ICAgICAgYnVpbGRlci0+YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIGVmZmVjdCk7Ci0gICAg
ICAgIHJlZmVyZW5jZUVmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgIH0KLSAgICAKLSAgICBt
X2VmZmVjdHMuYXBwZW5kVmVjdG9yKFdURk1vdmUocmVmZXJlbmNlRWZmZWN0cykpOwotICAgIHJl
dHVybiBlZmZlY3Q7CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlSHVlUm90YXRl
RWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4
T3BlcmF0aW9uKQoreworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKKyAgICBy
ZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUs
IFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CiB9CiAKLWJvb2wgQ1NTRmlsdGVyOjpidWlsZChS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9u
cywgRmlsdGVyQ29uc3VtZXIgY29uc3VtZXIpCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4g
Y3JlYXRlSW52ZXJ0RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQogewotICAgIG1faGFzRmlsdGVyVGhh
dE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKLSAg
ICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3Bl
cmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigp
OworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0
cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwor
ICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0g
MiAqIGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3VudDsKKwor
ICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5j
dGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KIAotICAgIG1fZWZmZWN0
cy5jbGVhcigpOwotICAgIG1fb3V0c2V0cyA9IHsgfTsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBjcmVhdGVPcGFjaXR5RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3Vu
dCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1v
dW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNm
ZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShu
dWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9u
KTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJyaWdodG5lc3NFZmZl
Y3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFu
c2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9MSU5FQVI7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAg
IHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
cmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlv
biwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0
ZUNvbnRyYXN0RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBG
RUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwor
ICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlv
bi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OworCisgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0
aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3Jl
YXRlQmx1ckVmZmVjdChjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uKQor
eworICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJh
dGlvbi5zdGREZXZpYXRpb24oKSwgMCk7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVh
dGUoc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIC8qY29uc3VtZXIgPT0gRmlsdGVyQ29uc3Vt
ZXI6OkZpbHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6Ki8gRURHRU1PREVfRFVQTElDQVRF
KTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZURyb3BTaGFkb3dFZmZl
Y3QoY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd09wZXJhdGlvbikK
K3sKKyAgICBmbG9hdCBzdGQgPSBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpOwor
ICAgIHJldHVybiBGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGQsIHN0ZCwgZHJvcFNoYWRvd09wZXJh
dGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNv
bG9yKCksIDEpOworfQorCitib29sIENTU0ZpbHRlcjo6YnVpbGRGdW5jdGlvbnMoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCit7Cisg
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gU291cmNlR3JhcGhpYzo6Y3JlYXRlKCk7
CisgICAgbV9mdW5jdGlvbnMuYXBwZW5kKHsgKmVmZmVjdCB9KTsKIAotICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IHByZXZpb3VzRWZmZWN0ID0gbV9zb3VyY2VHcmFwaGljLnB0cigpOwogICAgIGZv
ciAoYXV0byYgb3BlcmF0aW9uIDogb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkpIHsKLSAgICAgICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgICAgICBhdXRvJiBmaWx0ZXJPcGVyYXRp
b24gPSAqb3BlcmF0aW9uOwotICAgICAgICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi50eXBlKCkp
IHsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRTogewotICAgICAgICAg
ICAgYXV0byYgcmVmZXJlbmNlT3BlcmF0aW9uID0gZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gYnVpbGRSZWZl
cmVuY2VGaWx0ZXIocmVuZGVyZXIsICpwcmV2aW91c0VmZmVjdCwgcmVmZXJlbmNlT3BlcmF0aW9u
KTsKKyAgICAgICAgUmVmUHRyPFNWR0ZpbHRlcj4gZmlsdGVyOworICAgICAgICAKKyAgICAgICAg
QVNTRVJUKGVmZmVjdCk7CisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAgICAgICAgIGZpbHRl
ciA9IGNyZWF0ZVNWR0ZpbHRlcigqdGhpcywgcmVuZGVyZXIsICplZmZlY3QsIGRvd25jYXN0PFJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZWZmZWN0
ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNs
YW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAg
ICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlw
L2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBm
b3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICog
b25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwK
LQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUy
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVND
QUxFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJ
QTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVy
YXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8v
ZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlh
RXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMu
Ci0KLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAg
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ft
b3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAu
NzY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAw
LAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9u
ZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0K
LSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBv
bmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAg
ICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAot
ICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3Qg
PSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgs
IFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlNFUElBOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlU2VwaWFFZmZlY3QoZG93bmNh
c3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNB
VFVSQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25j
YXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07Ci0gICAgICAgICAgICBl
ZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9T
QVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTYXR1cmF0
ZUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhP
cGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMg
eyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9
OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICAgICAgZWZm
ZWN0ID0gY3JlYXRlSHVlUm90YXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1
dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRy
YW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0g
ICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVu
dFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rp
b24uc2xvcGUgPSAxIC0gMiAqIGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24u
aW50ZXJjZXB0ID0gYW1vdW50OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJh
bnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SU5WRVJUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24p
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6CiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFw
cGxlLWNvbG9yLWZpbHRlci4KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6T1BBQ0lUWTogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBl
ID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFt
b3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24u
YW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsK
LSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAg
ICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBl
ZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIG51bGxGdW5jdGlvbiwg
bnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24pOworCisgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICAgICAgZWZmZWN0ID0gY3Jl
YXRlT3BhY2l0eUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgYXV0
byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJh
bnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAg
ICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5z
ZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmln
aHRuZXNzRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAg
ICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9w
ZSA9IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAu
NSAqIGFtb3VudCArIDAuNTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBv
bmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVu
Y3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQ29u
dHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
bj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgICAgIGF1dG8mIGJsdXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwot
ICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVy
T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFR2F1
c3NpYW5CbHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25z
dW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDog
RURHRU1PREVfRFVQTElDQVRFKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxV
UjoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAg
ICAgICBhdXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJv
cFNoYWRvdzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigp
LCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRy
b3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRv
d09wZXJhdGlvbi5jb2xvcigpLCAxKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
RFJPUF9TSEFET1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0
KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVmZmVjdCkgewotICAgICAgICAgICAg
Ly8gVW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlv
bnMgb24gdGhlIGZpbHRlcgotICAgICAgICAgICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNo
b3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3VicmVnaW9ucy4KLSAgICAgICAgICAg
IGVmZmVjdC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6Rmls
dGVyRnVuY3Rpb24pOworICAgICAgICAKKyAgICAgICAgaWYgKGZpbHRlcikgeworICAgICAgICAg
ICAgZWZmZWN0ID0gZmlsdGVyLT5sYXN0RWZmZWN0KCk7CiAgICAgICAgICAgICBlZmZlY3QtPnNl
dE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSAhPSBGaWx0
ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewotICAgICAgICAgICAgICAgIGVmZmVjdC0+aW5wdXRF
ZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07Ci0gICAgICAgICAgICAgICAg
bV9lZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBy
ZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOworICAgICAgICAgICAgbV9mdW5jdGlvbnMu
YXBwZW5kKGZpbHRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZGlkbid0IG1ha2UgYW55IGVmZmVjdHMs
IHRlbGwgb3VyIGNhbGxlciB3ZSBhcmUgbm90IHZhbGlkLgotICAgIGlmIChtX2VmZmVjdHMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2VmZmVjdHMuc2hyaW5rVG9G
aXQoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgc2V0TWF4RWZmZWN0UmVjdHMobV9zb3VyY2VEcmF3aW5nUmVnaW9uKTsK
LSNpZiBVU0UoQ09SRV9JTUFHRSkKLSAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIpCi0gICAgICAg
IG1fZmlsdGVyUmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRl
cmVyLnNldHRpbmdzKCkuY29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCks
IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCkpOwotI2VuZGlmCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgQ1NTRmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVjdCkKLXsKLSAgICBpZiAoZmlsdGVyUmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRlclJlY3Quc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGZpbHRlclJlY3QgPT0gc291cmNlSW1hZ2VSZWN0KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNldFNvdXJjZUltYWdlUmVjdChmaWx0ZXJSZWN0KTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0KQotewotICAg
IC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFpbiBoYXMgYmVlbiBidWlsdCwgYW5kIHRo
ZQotICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQuIFdlIGp1c3QgbmVlZCB0byBhdHRhY2gg
dGhlIGdyYXBoaWMKLSAgICAvLyBidWZmZXIgaWYgd2UgaGF2ZSBub3QgeWV0IGRvbmUgc28uCi0K
LSAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBJbnRTaXplIGxvZ2ljYWxTaXplIHsgbV9zb3VyY2VEcmF3aW5nUmVnaW9uLnNpemUoKSB9Owot
ICAgIGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9
IGxvZ2ljYWxTaXplKSB7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBzZXRTb3VyY2VJbWFn
ZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJn
ZXRDb250ZXh0LCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0
Q29udGV4dCk7Ci0gICAgICAgIFJlbmRlcmluZ01vZGUgbW9kZSA9IG1fZmlsdGVyUmVuZGVyZXIg
PyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IHJlbmRlcmluZ01vZGUoKTsKLSAgICAgICAg
c2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgbW9kZSwgZmls
dGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpC
R1JBOCkpOwotI2VuZGlmCisgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZCh7ICplZmZlY3QgfSk7
CiAgICAgfQotICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7Ci19CiAKLXZvaWQg
Q1NTRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQotewotICAgIGF1
dG8mIGxhc3RFZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGxhc3RFZmZlY3Qu
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJl
Z2lvbiA9IGxhc3RFZmZlY3QubWF4RWZmZWN0UmVjdCgpOwotICAgIC8vIEF0IGxlYXN0IG9uZSBG
aWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLCByZWNhbGN1bGF0ZSB0aGUgZWZm
ZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgRmxvYXRTaXplIHNjYWxlOwot
ICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwg
c2NhbGUpKSB7Ci0gICAgICAgIHNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotICAgICAgICBs
YXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIH0KLX0K
LQotdm9pZCBDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpCi17Ci0gICAgbV9z
b3VyY2VHcmFwaGljLT5jbGVhclJlc3VsdCgpOwotICAgIGlmIChtX3NvdXJjZUFscGhhKQotICAg
ICAgICBtX3NvdXJjZUFscGhhLT5jbGVhclJlc3VsdCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0
IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7Ci19Ci0KLXZvaWQg
Q1NTRmlsdGVyOjphcHBseSgpCi17Ci0gICAgYXV0byYgZWZmZWN0ID0gbV9lZmZlY3RzLmxhc3Qo
KS5nZXQoKTsKLSAgICBpZiAobV9maWx0ZXJSZW5kZXJlcikgewotICAgICAgICBtX2ZpbHRlclJl
bmRlcmVyLT5hcHBseUVmZmVjdHMoZWZmZWN0KTsKLSAgICAgICAgaWYgKG1fZmlsdGVyUmVuZGVy
ZXItPmhhc1Jlc3VsdCgpKSB7Ci0gICAgICAgICAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWZmZWN0LmFwcGx5KCk7Ci0gICAgZWZmZWN0LnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwor
ICAgIHJldHVybiB0cnVlOwogfQogCi1MYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJj
ZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBj
b25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgLy8gVGhlIHJlc3VsdCBvZiB0aGlz
IGZ1bmN0aW9uIGlzIHRoZSBhcmVhIGluIHRoZSAiZmlsdGVyQm94UmVjdCIgdGhhdCBuZWVkcyB0
byBiZSByZXBhaW50ZWQsIHNvIHRoYXQgd2UgZnVsbHkgY292ZXIgdGhlICJkaXJ0eVJlY3QiLgot
ICAgIGF1dG8gcmVjdEZvclJlcGFpbnQgPSBkaXJ0eVJlY3Q7Ci0gICAgaWYgKGhhc0ZpbHRlclRo
YXRNb3Zlc1BpeGVscygpKQotICAgICAgICByZWN0Rm9yUmVwYWludCArPSBvdXRzZXRzKCk7Ci0g
ICAgcmVjdEZvclJlcGFpbnQuaW50ZXJzZWN0KGZpbHRlckJveFJlY3QpOwotICAgIHJldHVybiBy
ZWN0Rm9yUmVwYWludDsKLX0KIAotSW1hZ2VCdWZmZXIqIENTU0ZpbHRlcjo6b3V0cHV0KCkgY29u
c3QKK0ludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKIHsKLSAgICBpZiAobV9m
aWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkKLSAgICAgICAg
cmV0dXJuIG1fZmlsdGVyUmVuZGVyZXItPm91dHB1dCgpOworICAgIGlmICghbV9oYXNGaWx0ZXJU
aGF0TW92ZXNQaXhlbHMgfHwgIW1fb3V0c2V0cy5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIG1f
b3V0c2V0czsKICAgICAKLSAgICByZXR1cm4gbV9lZmZlY3RzLmxhc3QoKS0+aW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkKLXsKLSAgICBtX3NvdXJjZURyYXdpbmdSZWdpb24g
PSBzb3VyY2VJbWFnZVJlY3Q7Ci0gICAgc2V0TWF4RWZmZWN0UmVjdHMoc291cmNlSW1hZ2VSZWN0
KTsKLSAgICBzZXRGaWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKLSAgICBtX2dyYXBoaWNz
QnVmZmVyQXR0YWNoZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6OnNldE1heEVmZmVj
dFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVjdCkKLXsKLSAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVj
dFJlY3QpOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAg
bV9vdXRzZXRzICs9IGZ1bmN0aW9uLT5vdXRzZXRzKCk7CisgICAgCisgICAgcmV0dXJuIG1fb3V0
c2V0czsKIH0KIAotSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3QoKSBjb25zdAorRmlsdGVy
UmVzdWx0KiBDU1NGaWx0ZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1
bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZl
Y3RzLmxhc3QoKS5nZXQoKTsKLSAgICAKLSAgICBpZiAobGFzdEVmZmVjdC5oYXNSZXN1bHQoKSB8
fCAobV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCi0g
ICAgICAgIHJldHVybiBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZl
cihJbnRSZWN0IHsgbV9maWx0ZXJSZWdpb24gfSk7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6
IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuY3Rpb24tPmFwcGx5KG91
dHB1dCwgc3RhY2ssIHNvdXJjZUltYWdlLCBnZW9tZXRyeSk7CisgICAgICAgIGlmICghcmVzdWx0
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBzdGFjay5h
cHBlbmQoeyAqcmVzdWx0IH0pOworICAgICAgICBvdXRwdXQucmVzdWx0cygpLmFkZChmdW5jdGlv
biwgUmVmPEZpbHRlclJlc3VsdD4oKnJlc3VsdCkpOworICAgIH0KICAgICAKLSAgICByZXR1cm4g
eyB9OworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPT0gMSk7CisgICAgYXV0byByZXN1bHQgPSBz
dGFjay50YWtlTGFzdCgpOworICAgIHJlc3VsdC0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICByZXR1cm4gJnJlc3VsdC5sZWFrUmVmKCk7
CiB9CiAKLUludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKK1RleHRTdHJlYW0m
IENTU0ZpbHRlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVy
UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscykKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmICghbV9v
dXRzZXRzLmlzWmVybygpKQotICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwotCi0gICAgZm9yIChh
dXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0c2V0cyArPSBlZmZlY3QtPm91
dHNldHMoKTsKLSAgICByZXR1cm4gbV9vdXRzZXRzOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24g
OiBtX2Z1bmN0aW9ucykKKyAgICAgICAgZnVuY3Rpb24tPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICByZXR1cm4gdHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAppbmRleCAwMGI5MTkxN2I4
MDRjOTJkOTQwOGI3NThlMzc1YzI1MmYyOWRiMGM1Li5lMjM5NmIzYWM0OTcyMDQ0YzQxZWVjNzdi
ZmIyZTUxNWRlNTZhNjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NT
RmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjYsODYgKzI2LDQ1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKLSNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVk
ZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFzcyBGaWx0ZXJFZmZlY3RSZW5k
ZXJlcjsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1j
bGFzcyBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBSZW5kZXJFbGVtZW50OwotY2xh
c3MgU291cmNlQWxwaGE7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwotCi1lbnVtIGNsYXNzIEZpbHRl
ckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9uIH07CiAKIGNsYXNzIENT
U0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOwotCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFn
ZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZWdpb24oY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247
IH0KIAotICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdDsKLQotICAgIGJvb2wgYnVpbGQo
UmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7
Ci0gICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB2b2lkIGFwcGx5KCk7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+IGNyZWF0ZShSZW5kZXJFbGVt
ZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPENT
U0ZpbHRlcj4gY3JlYXRlKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmLCBSZW5kZXJpbmdN
b2RlKTsKIAogICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNG
aWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCi0gICAgdm9p
ZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRzZXRzIG91
dHNldHMoKSBjb25zdDsKKyAgICBjb25zdCBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mIGZ1
bmN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25zOyB9CisgICAgSW50T3V0c2V0cyBv
dXRzZXRzKCkgY29uc3QgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgQ1NTRmlsdGVyKCk7Ci0gICAg
dmlydHVhbCB+Q1NTRmlsdGVyKCk7Ci0KLSAgICBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlRHJhd2luZ1JlZ2lvbjsgfQotCi0gICAgRmxvYXRS
ZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9
Ci0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
UmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZm
ZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mKTsKKyAgICBDU1NGaWx0ZXIoY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01vZGUpOworICAgIENTU0ZpbHRlcihWZWN0b3I8UmVm
PEZpbHRlckZ1bmN0aW9uPj4mJiwgUmVuZGVyaW5nTW9kZSk7CiAKLSAgICB2b2lkIHNldE1heEVm
ZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIGJvb2wgYnVpbGRGdW5jdGlvbnMoUmVu
ZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKIAotICAgIEdyYXBoaWNzQ29u
dGV4dCogaW5wdXRDb250ZXh0KCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRw
dXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QgZmluYWw7CiAKLSAgICBib29sIHVwZGF0ZUJh
Y2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KTsKLSAgICB2b2lkIGFs
bG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAg
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVw
cmVzZW50YXRpb24pIGNvbnN0IGZpbmFsOwogCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29u
c3Q7Ci0KLSAgICBMYXlvdXRSZWN0IGNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3Qo
Y29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlS
ZWN0KTsKLQotICAgIEZsb2F0UmVjdCBtX3NvdXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRS
ZWN0IG1fZmlsdGVyUmVnaW9uOwotCi0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2Vm
ZmVjdHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBoaWM+IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBtX3NvdXJjZUFscGhhOwotCi0gICAgbXV0YWJsZSBJbnRPdXRzZXRz
IG1fb3V0c2V0czsKLQotICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkIHsgZmFsc2Ug
fTsKICAgICBib29sIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzIHsgZmFsc2UgfTsKICAgICBi
b29sIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4geyBm
YWxzZSB9OwotICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4g
bV9maWx0ZXJSZW5kZXJlcjsKKworICAgIFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiBtX2Z1
bmN0aW9uczsKKyAgICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRzZXRzOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OkNTU0ZpbHRlcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVy
JiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci5pc0NTU0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIu
dHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXI7IH0KIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmgKaW5kZXggMWJmMjJlNDJjMzUxODYxODc5ZWY1YWYwY2YxZWMwYjQ3MTQ5YjVlYS4uMDBm
NjZlOGFiMjE4YmU0ZjAxZmE3MmJjY2NhZTkxZTdlODYzYTM1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTYyLDcgKzYyLDYgQEAgY2xhc3MgVGV4dFN0cmVhbTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NGaWx0ZXI7CiBjbGFzcyBDbGlwUmVj
dHM7CiBjbGFzcyBDbGlwUmVjdHNDYWNoZTsKIGNsYXNzIEV2ZW50UmVnaW9uQ29udGV4dDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKaW5kZXgg
MjUwYTdkNWMwYmFhMGFjNzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4uODcyYTY2NmUzNzRlMTk1
NDZhMGQ1YzcxMDFmNGJkOTA5MjY4NDQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTMxLDkgKzMxLDEwIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJGaWx0ZXJzLmgiCiAKLSNpbmNsdWRlICJD
U1NGaWx0ZXIuaCIKICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIkNh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVk
ZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
QEAgLTExNiwzOSArMTE3LDUxIEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjpyZW1vdmVSZWZl
cmVuY2VGaWx0ZXJDbGllbnRzKCkKICAgICBtX2ludGVybmFsU1ZHUmVmZXJlbmNlcy5jbGVhcigp
OwogfQogCi12b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUpCit2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGZsb2F0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgaWYg
KCFtX2ZpbHRlcikgewotICAgICAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0g
ICAgICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1f
ZmlsdGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwotICAgIH0gZWxzZSBpZiAo
bV9maWx0ZXItPmZpbHRlclNjYWxlKCkgIT0gc2NhbGVGYWN0b3IpIHsKLSAgICAgICAgbV9maWx0
ZXItPnNldEZpbHRlclNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV9maWx0ZXItPmNsZWFy
SW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIH0KKyAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6
Y3JlYXRlKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCByZW5kZXJpbmdNb2Rl
KTsKK30KKworR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4
dCgpCit7CisgICAgcmV0dXJuIG1fc291cmNlSW1hZ2UgPyAmbV9zb3VyY2VJbWFnZS0+Y29udGV4
dCgpIDogbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFj
a2luZ1N0b3JlSWZOZWVkZWQoKQoreworICAgIGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplIHsgbV9zb3Vy
Y2VJbWFnZVJlY3Quc2l6ZSgpIH07CisgICAgbV9zb3VyY2VJbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUobG9naWNhbFNpemUsIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCksIDEsIERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwogCi0gICAgLy8gSWYg
dGhlIGZpbHRlciBmYWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3
aWxsIHN0aWxsIGF0dGVtcHQgdG8KLSAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2lu
ZyAoZS5nLiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KLSAgICAvLyBG
SVhNRTogdGhpcyByZWJ1aWxkcyB0aGUgZW50aXJlIGVmZmVjdHMgY2hhaW4gZXZlbiBpZiB0aGUg
ZmlsdGVyIHN0eWxlIGRpZG4ndCBjaGFuZ2UuCi0gICAgaWYgKCFtX2ZpbHRlci0+YnVpbGQocmVu
ZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQ
cm9wZXJ0eSkpCi0gICAgICAgIG1fZmlsdGVyID0gbnVsbHB0cjsKKyAgICBtX2dyYXBoaWNzQnVm
ZmVyQXR0YWNoZWQgPSB0cnVlOwogfQogCi1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmls
dGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRl
eHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRp
cnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKK0dyYXBoaWNzQ29u
dGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBk
aXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgaWYg
KCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvJiBmaWx0ZXIg
PSAqbV9maWx0ZXI7Ci0gICAgYXV0byBmaWx0ZXJTb3VyY2VSZWN0ID0gZmlsdGVyLmNvbXB1dGVT
b3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoZmlsdGVyQm94UmVjdCwgZGlydHlSZWN0KTsKKyAg
ICAKKyAgICBhdXRvIGZpbHRlclNvdXJjZVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgaWYgKGZpbHRl
ci5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKKyAgICAgICAgZmlsdGVyU291cmNlUmVjdCAr
PSBmaWx0ZXIub3V0c2V0cygpOworICAgIGZpbHRlclNvdXJjZVJlY3QuaW50ZXJzZWN0KGZpbHRl
ckJveFJlY3QpOworCiAgICAgaWYgKGZpbHRlclNvdXJjZVJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJvb2wgaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSA9IGZp
bHRlci51cGRhdGVCYWNraW5nU3RvcmVSZWN0KGZpbHRlclNvdXJjZVJlY3QpOworICAgIAorICAg
IGlmIChmaWx0ZXJTb3VyY2VSZWN0ICE9IG1fc291cmNlSW1hZ2VSZWN0KSB7CisgICAgICAgIG1f
c291cmNlSW1hZ2VSZWN0ID0gZmlsdGVyU291cmNlUmVjdDsKKyAgICAgICAgbV9ncmFwaGljc0J1
ZmZlckF0dGFjaGVkID0gZmFsc2U7CisgICAgfQorICAgIAogICAgIGlmICghZmlsdGVyLmhhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscygpKQogICAgICAgICBtX3JlcGFpbnRSZWN0ID0gZGlydHlSZWN0
OwogICAgIGVsc2UgewotICAgICAgICBpZiAoaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSkKKyAgICAg
ICAgaWYgKCFtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCiAgICAgICAgICAgICBtX3JlcGFpbnRS
ZWN0ID0gZmlsdGVyU291cmNlUmVjdDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtX3Jl
cGFpbnRSZWN0ID0gZGlydHlSZWN0OwpAQCAtMTU5LDExICsxNzIsOSBAQCBHcmFwaGljc0NvbnRl
eHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0
JiBkZXN0aW5hdAogICAgIG1fcGFpbnRPZmZzZXQgPSBmaWx0ZXJTb3VyY2VSZWN0LmxvY2F0aW9u
KCk7CiAgICAgcmVzZXREaXJ0eVNvdXJjZVJlY3QoKTsKIAotICAgIGZpbHRlci5kZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLQotICAgIGZpbHRlci5hbGxvY2F0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKGRlc3RpbmF0aW9uQ29udGV4dCk7Ci0gICAgYXV0byogc291cmNlR3JhcGhp
Y3NDb250ZXh0ID0gZmlsdGVyLmlucHV0Q29udGV4dCgpOwotICAgIGlmICghc291cmNlR3JhcGhp
Y3NDb250ZXh0IHx8IGZpbHRlci5maWx0ZXJSZWdpb24oKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRlci5maWx0ZXJSZWdpb24oKS5zaXplKCkpKQorICAg
IGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKTsKKyAgICBhdXRvKiBzb3VyY2VHcmFwaGlj
c0NvbnRleHQgPSBpbnB1dENvbnRleHQoKTsKKyAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4
dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBUcmFuc2xhdGUgdGhlIGNvbnRl
eHQgc28gdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIGxheWVyIGlzIGNhcHR1cmVkIGluIHRoZSBv
ZmZzY3JlZW4gbWVtb3J5IGJ1ZmZlci4KQEAgLTE3NywyMyArMTg4LDE1IEBAIEdyYXBoaWNzQ29u
dGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRl
eHQmIGRlc3RpbmF0CiAKIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVj
dChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKIHsKLSAgICBBU1NFUlQobV9m
aWx0ZXItPmlucHV0Q29udGV4dCgpKTsKKyAgICBBU1NFUlQoaW5wdXRDb250ZXh0KCkpOwogCiAg
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiXG5SZW5kZXJMYXllckZpbHRl
cnMgIiA8PCB0aGlzIDw8ICIgYXBwbHlGaWx0ZXJFZmZlY3QiKTsKIAogICAgIGF1dG8mIGZpbHRl
ciA9ICptX2ZpbHRlcjsKLSAgICBmaWx0ZXIuaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsKLQot
ICAgIGZpbHRlci5hcHBseSgpOwotCi0gICAgLy8gR2V0IHRoZSBmaWx0ZXJlZCBvdXRwdXQgYW5k
IGRyYXcgaXQgaW4gcGxhY2UuCi0gICAgTGF5b3V0UmVjdCBkZXN0UmVjdCA9IGZpbHRlci5vdXRw
dXRSZWN0KCk7Ci0gICAgZGVzdFJlY3QubW92ZShtX3BhaW50T2Zmc2V0LngoKSwgbV9wYWludE9m
ZnNldC55KCkpOwotCi0gICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9IGZpbHRlci5vdXRwdXQo
KSkKLSAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqb3V0cHV0QnVm
ZmVyLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBtX2xheWVyLnJlbmRlcmVyKCku
ZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgaW5wdXRDb250ZXh0KCktPnJl
c3RvcmUoKTsKIAotICAgIGZpbHRlci5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKKyAgICBh
dXRvIGdlb21ldHJ5ID0gbWFrZVVuaXF1ZTxGaWx0ZXJHZW9tZXRyeT4obV9zb3VyY2VJbWFnZVJl
Y3QsIG1fc291cmNlSW1hZ2VSZWN0KTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ZpbHRl
ckltYWdlQnVmZmVyKGZpbHRlciwgbV9zb3VyY2VJbWFnZS5nZXQoKSwgV1RGTW92ZShnZW9tZXRy
eSkpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5
ZXJGaWx0ZXJzICIgPDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNk
YTE0MGE1Yzg4ZjE1NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLjJhZjZmYjQ3ZTE4NGY2OTQw
NDdjMGU3MTUyNzNhYzE0MmFhNWJmYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJGaWx0ZXJzLmgKQEAgLTM3LDggKzM3LDEwIEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENhY2hlZFNWR0RvY3VtZW50OworY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3Mg
RWxlbWVudDsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKIAog
Y2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzIGZpbmFsIDogcHJpdmF0ZSBDYWNoZWRTVkdEb2N1bWVu
dENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02OSwxNCArNzEsMTkg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291
cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikgZmluYWw7CiAgICAgdm9pZCByZXNldERp
cnR5U291cmNlUmVjdCgpIHsgbV9kaXJ0eVNvdXJjZVJlY3QgPSBMYXlvdXRSZWN0KCk7IH0KKyAg
ICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNr
aW5nU3RvcmVJZk5lZWRlZCgpOwogCiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKICAgICBW
ZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlczsKICAgICBWZWN0
b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+PiBtX2V4dGVybmFsU1ZH
UmVmZXJlbmNlczsKIAorICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKKyAg
ICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7CiAgICAgUmVmUHRyPENTU0ZpbHRlcj4gbV9m
aWx0ZXI7CiAgICAgTGF5b3V0UmVjdCBtX2RpcnR5U291cmNlUmVjdDsKKyAgICBib29sIG1fZ3Jh
cGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAgICAgCiAgICAgLy8gRGF0YSB1c2VkIHBl
ciBwYWludAogICAgIExheW91dFBvaW50IG1fcGFpbnRPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmlu
ZGV4IDE5NTA5ZDk3MThhZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUuLjY4YWY3ZWUzMTQ2
NzQ4MDQyZThmYTk5YzdjZjFjMjY0NjZkZDY3MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC00LDYg
KzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNyw2ICszOCw4IEBACiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCisjaW5jbHVkZSAi
U1ZHRmlsdGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlICJT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKQEAgLTgyLDYyICs4NSwyNyBA
QCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyRWxlbWVudCYgY2xpZW50LCBib29sCiAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihj
bGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFy
ZW50T25seUludmFsaWRhdGlvbik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWls
ZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzKFNWR0ZpbHRlciYg
ZmlsdGVyKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDb3VudENoaWxk
Tm9kZXMgPSAyMDA7Ci0gICAgaWYgKGZpbHRlckVsZW1lbnQoKS5jb3VudENoaWxkTm9kZXMoKSA+
IG1heENvdW50Q2hpbGROb2RlcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9h
dFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKLQot
ICAgIC8vIEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCi0gICAgYXV0byBidWlsZGVyID0gbWFr
ZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPihTb3VyY2VHcmFwaGljOjpjcmVhdGUoZmlsdGVyKSk7
Ci0gICAgYnVpbGRlci0+c2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2
ZVVuaXRzKCkpOwotICAgIGJ1aWxkZXItPnNldFRhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5k
aW5nQm94KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQoKSkpIHsK
LSAgICAgICAgYXV0byBlZmZlY3QgPSBlbGVtZW50LmJ1aWxkKGJ1aWxkZXIuZ2V0KCksIGZpbHRl
cik7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBidWlsZGVyLT5jbGVhckVm
ZmVjdHMoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAg
IGJ1aWxkZXItPmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QuY29weVJlZigp
LCBlbGVtZW50LnJlbmRlcmVyKCkpOwotICAgICAgICBlbGVtZW50LnNldFN0YW5kYXJkQXR0cmli
dXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPnNldEVmZmVjdEJvdW5kYXJpZXMo
U1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM+KCZlbGVtZW50LCBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMo
KSwgdGFyZ2V0Qm91bmRpbmdCb3gpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQucmVuZGVyZXIoKSkg
ewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICAg
ICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlbGVtZW50LnJlbmRlcmVyKCkt
PnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkgPT0gQ29sb3JJ
bnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNS
R0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbHNlCi0gICAgICAgICAg
ICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YWRkKGVsZW1lbnQu
cmVzdWx0KCksIFdURk1vdmUoZWZmZWN0KSk7Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyOwot
fQotCiBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNlTW9kZSkKIHsK
ICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZU1vZGUsICFy
ZXNvdXJjZU1vZGUpOwogCi0gICAgTE9HKEZpbHRlcnMsICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ciAlcCBhcHBseVJlc291cmNlIHJlbmRlcmVyICVwIiwgdGhpcywgJnJlbmRlcmVyKTsKLQotICAg
IGlmIChtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKSB7Ci0gICAg
ICAgIEZpbHRlckRhdGEqIGZpbHRlckRhdGEgPSBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5nZXQo
JnJlbmRlcmVyKTsKLSAgICAgICAgaWYgKGZpbHRlckRhdGEtPnN0YXRlID09IEZpbHRlckRhdGE6
OlBhaW50aW5nU291cmNlIHx8IGZpbHRlckRhdGEtPnN0YXRlID09IEZpbHRlckRhdGE6OkFwcGx5
aW5nKQotICAgICAgICAgICAgZmlsdGVyRGF0YS0+c3RhdGUgPSBGaWx0ZXJEYXRhOjpDeWNsZURl
dGVjdGVkOwotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEFscmVhZHkgYnVpbHQsIG9yIHdlJ3Jl
IGluIGEgY3ljbGUsIG9yIHdlJ3JlIG1hcmtlZCBmb3IgcmVtb3ZhbC4gUmVnYXJkbGVzcywganVz
dCBkbyBub3RoaW5nIG1vcmUgbm93LgotICAgIH0KLQorICAgIC8vIEJ1aWxkIHRoZSBTVkdGaWx0
ZXIKICAgICBhdXRvIGZpbHRlckRhdGEgPSBtYWtlVW5pcXVlPEZpbHRlckRhdGE+KCk7Ci0gICAg
RmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3go
KTsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJh
dGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIAotICAgIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMgPSBT
VkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+KCZmaWx0
ZXJFbGVtZW50KCksIGZpbHRlckVsZW1lbnQoKS5maWx0ZXJVbml0cygpLCB0YXJnZXRCb3VuZGlu
Z0JveCk7Ci0gICAgaWYgKGZpbHRlckRhdGEtPmJvdW5kYXJpZXMuaXNFbXB0eSgpKQorICAgIGZp
bHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSwgcmVu
ZGVyaW5nTW9kZSk7CisgICAgaWYgKCFmaWx0ZXJEYXRhLT5maWx0ZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSByZW5kZXJl
ci5vYmplY3RCb3VuZGluZ0JveCgpOworICAgIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMgPSBTVkdM
ZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+KCZmaWx0ZXJF
bGVtZW50KCksIGZpbHRlckVsZW1lbnQoKS5maWx0ZXJVbml0cygpLCB0YXJnZXRCb3VuZGluZ0Jv
eCk7CiAKLSAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGZv
ciBmaWx0ZXIuIAorICAgIC8vIENhbGN1bGF0ZSB0aGUgc291cmNlSW1hZ2VSZWN0CisgICAgZmls
dGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiA9IHJlbmRlcmVyLnN0cm9rZUJvdW5kaW5nQm94KCk7Cisg
ICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyRGF0YS0+Ym91bmRh
cmllcyk7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGFic29sdXRlVHJhbnNmb3JtCiAgICAgQWZm
aW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2Fs
Y3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIp
OwogICAgIGlmICghYWJzb2x1dGVUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTE0NSw4NiArMTEzLDM5IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRl
CiAgICAgLy8gRWxpbWluYXRlIHNoZWFyIG9mIHRoZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBt
YXRyaXgsIHRvIGJlIGFibGUgdG8gcHJvZHVjZSB1bnNoZWFyZWQgdGlsZSBpbWFnZXMgZm9yIGZl
VGlsZS4KICAgICBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSA9IEFmZmlu
ZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwgMCwgMCwgYWJzb2x1dGVUcmFu
c2Zvcm0ueVNjYWxlKCksIDAsIDApOwogCi0gICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIGJvdW5k
YXJpZXMgb2YgdGhlIGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVnaW9uLgotICAgIGZpbHRlckRh
dGEtPmRyYXdpbmdSZWdpb24gPSByZW5kZXJlci5zdHJva2VCb3VuZGluZ0JveCgpOwotICAgIGZp
bHRlckRhdGEtPmRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMp
OworICAgIC8vIENhbGN1bGF0ZSB0aGUgZmlsdGVyIHJlc29sdXRpb24KICAgICBGbG9hdFJlY3Qg
YWJzb2x1dGVEcmF3aW5nUmVnaW9uID0gZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFu
c2Zvcm0ubWFwUmVjdChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uKTsKKyAgICBmaWx0ZXJEYXRh
LT5zY2FsZSA9IHsgMSwgMSB9OworICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhh
YnNvbHV0ZURyYXdpbmdSZWdpb24uc2l6ZSgpLCBmaWx0ZXJEYXRhLT5zY2FsZSk7CiAKLSAgICAv
LyBDcmVhdGUgdGhlIFNWR0ZpbHRlciBvYmplY3QuCi0gICAgYm9vbCBwcmltaXRpdmVCb3VuZGlu
Z0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlw
ZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7Ci0gICAgZmlsdGVyRGF0YS0+Zmls
dGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFu
c2Zvcm0sIGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlckRh
dGEtPmJvdW5kYXJpZXMsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSk7Ci0KLSAgICAvLyBDcmVh
dGUgYWxsIHJlbGV2YW50IGZpbHRlciBwcmltaXRpdmVzLgotICAgIGZpbHRlckRhdGEtPmJ1aWxk
ZXIgPSBidWlsZFByaW1pdGl2ZXMoKmZpbHRlckRhdGEtPmZpbHRlcik7Ci0gICAgaWYgKCFmaWx0
ZXJEYXRhLT5idWlsZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEZXRlcm1p
bmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRoZSBzaXplIG9mIGludGVybWVkaWF0ZSBJbWFn
ZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFuIGtNYXhGaWx0ZXJTaXplLgotICAgIEZs
b2F0UmVjdCB0ZW1wU291cmNlUmVjdCA9IGFic29sdXRlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9h
dFNpemUgc2NhbGUoMSwgMSk7Ci0gICAgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHRl
bXBTb3VyY2VSZWN0LnNpemUoKSwgc2NhbGUpOwotICAgIHRlbXBTb3VyY2VSZWN0LnNjYWxlKHNj
YWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKLQotICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2
ZWwgaW4gU1ZHRmlsdGVyLgotICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1
dGlvbihzY2FsZSk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4VG90YWxPZkVmZmVj
dElucHV0cyA9IDEwMDsKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRh
LT5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0gICAgaWYgKCFsYXN0RWZmZWN0IHx8IGxhc3RFZmZl
Y3QtPnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSA+IG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlXG4iIDw8ICpm
aWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCkpOwotCi0gICAgbGFzdEVmZmVjdC0+ZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lv
biA9IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKTsKLSAgICAvLyBBdCBsZWFzdCBvbmUgRmls
dGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKLSAgICAvLyByZWNhbGN1bGF0ZSB0
aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgaWYgKEltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAg
ICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAg
ICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAg
fQotCi0gICAgLy8gSWYgdGhlIGRyYXdpbmdSZWdpb24gaXMgZW1wdHksIHdlIGhhdmUgc29tZXRo
aW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIvPi4KLSAgICAvLyBFdmVuIGlmIHRoZSB0YXJnZXQgb2Jq
ZWN0Qm91bmRpbmdCb3goKSBpcyBlbXB0eSwgd2Ugc3RpbGwgaGF2ZSB0byBkcmF3IHRoZSBsYXN0
IGVmZmVjdCByZXN1bHQgaW1hZ2UgaW4gcG9zdEFwcGx5UmVzb3VyY2UuCi0gICAgaWYgKGZpbHRl
ckRhdGEtPmRyYXdpbmdSZWdpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9yZW5k
ZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7Ci0gICAgICAgIGZpbHRlckRh
dGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIG1fcmVuZGVyZXJGaWx0ZXJEYXRh
TWFwLnNldCgmcmVuZGVyZXIsIFdURk1vdmUoZmlsdGVyRGF0YSkpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gQ2hhbmdlIHRoZSBjb29yZGluYXRlIHRyYW5zZm9ybWF0
aW9uIGFwcGxpZWQgdG8gdGhlIGZpbHRlcmVkIGVsZW1lbnQgdG8gcmVmbGVjdCB0aGUgcmVzb2x1
dGlvbiBvZiB0aGUgZmlsdGVyLgorICAgIC8vIENhbGN1bGF0ZSBlZmZlY3RpdmVUcmFuc2Zvcm0K
ICAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtOwotICAgIGVmZmVjdGl2ZVRy
YW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CisgICAgZWZmZWN0
aXZlVHJhbnNmb3JtLnNjYWxlKGZpbHRlckRhdGEtPnNjYWxlKTsKICAgICBlZmZlY3RpdmVUcmFu
c2Zvcm0ubXVsdGlwbHkoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwog
Ci0gICAgYXV0byByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRl
ZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNF
X0xJTkVBUl9TUkdCKQogICAgIGF1dG8gY29sb3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6TGluZWFyU1JHQigpOwogI2Vsc2UKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKTsKICNlbmRpZgorCiAgICAgYXV0byBzb3VyY2VHcmFwaGljID0g
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2lu
Z1JlZ2lvbiwgZWZmZWN0aXZlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBj
b250ZXh0KTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWMpIHsKLSAgICAgICAgQVNTRVJUKCFtX3Jl
bmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKKy8vICAgICAgICBBU1NF
UlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwogICAgICAg
ICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwogICAgICAgICBtX3JlbmRlcmVy
RmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZpbHRlckRhdGEpKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICAvLyBTZXQgdGhlIHJlbmRlcmluZyBt
b2RlIGZyb20gdGhlIHBhZ2UncyBzZXR0aW5ncy4KLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNl
dFJlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSk7CiAKKyAgICAvLyBTZXQgdGhlIHdvcmtpbmcg
R3JhcGhpY0NvbnRleHQgdG8gdGhlIGZpbHRlciBzb3VyY2VHcmFwaGljCiAgICAgR3JhcGhpY3ND
b250ZXh0JiBzb3VyY2VHcmFwaGljQ29udGV4dCA9IHNvdXJjZUdyYXBoaWMtPmNvbnRleHQoKTsK
LSAgCisKICAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyID0gV1RGTW92ZShzb3Vy
Y2VHcmFwaGljKTsKICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwogCiAg
ICAgY29udGV4dCA9ICZzb3VyY2VHcmFwaGljQ29udGV4dDsKIAotICAgIEFTU0VSVCghbV9yZW5k
ZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgbV9yZW5kZXJlckZp
bHRlckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShmaWx0ZXJEYXRhKSk7Ci0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjY5LDM4ICsxOTAsMTggQEAgdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdy
YXBoaWMKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZm
ZWN0ID0gZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0KLSAgICBpZiAobGFzdEVm
ZmVjdCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFRoaXMg
aXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUg
Y2FsbGVkIG9uIHRoZQotICAgICAgICAvLyBpbml0aWFsIGZpbHRlcmluZyBwcm9jZXNzLiBXZSBq
dXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9uIGEKLSAgICAgICAgLy8gc2Vjb25k
IGRyYXdpbmcuCi0gICAgICAgIGlmIChmaWx0ZXJEYXRhLnN0YXRlICE9IEZpbHRlckRhdGE6OkJ1
aWx0KQotICAgICAgICAgICAgZmlsdGVyRGF0YS5maWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1v
dmUoZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyKSk7Ci0KLSAgICAgICAgLy8gQWx3YXlz
IHRydWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0IChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBG
aWx0ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlmICghbGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkp
IHsKLSAgICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsK
LSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0
LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3Qt
PnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkp
OwotICAgICAgICB9CisgICAgaWYgKCFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKIAotICAgICAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNv
bmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52
YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotCi0gICAgICAgICAgICBjb250ZXh0LT5zY2Fs
ZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lk
dGgoKSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkp
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGxh
c3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2Nh
bGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7CisgICAgICAgIGNvbnRl
eHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVy
c2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgICAgICBjb250ZXh0LT5zY2Fs
ZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuc2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEu
c2NhbGUuaGVpZ2h0KCkpKTsKIAotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRl
ckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgICAgICB9CisgICAgICAgIGF1
dG8gZ2VvbWV0cnkgPSBTVkdGaWx0ZXJHZW9tZXRyeTo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSwg
ZmlsdGVyRGF0YS5ib3VuZGFyaWVzLCBmaWx0ZXJEYXRhLmRyYXdpbmdSZWdpb24sIHJlbmRlcmVy
Lm9iamVjdEJvdW5kaW5nQm94KCksIGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zv
cm0sIGZpbHRlckRhdGEuc2NhbGUpOworICAgICAgICBjb250ZXh0LT5kcmF3RmlsdGVySW1hZ2VC
dWZmZXIoKmZpbHRlckRhdGEuZmlsdGVyLCBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIu
Z2V0KCksIFdURk1vdmUoZ2VvbWV0cnkpKTsKKyAgICAKKyAgICAgICAgY29udGV4dC0+c2NhbGUo
ZmlsdGVyRGF0YS5zY2FsZSk7CisgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRh
LnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKICAgICB9Ci0gICAgZmlsdGVyRGF0YS5zb3Vy
Y2VHcmFwaGljQnVmZmVyID0gbnVsbHB0cjsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwgdGhpcyA8PCAiIHBvc3RB
cHBseVJlc291cmNlIGRvbmVcbiIpOwogfQogCiBGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OnJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCkBA
IC0zMDgsMjcgKzIwOSwxMyBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJl
c291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplYwogICAgIHJldHVybiBT
VkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+KCZmaWx0
ZXJFbGVtZW50KCksIGZpbHRlckVsZW1lbnQoKS5maWx0ZXJVbml0cygpLCBvYmplY3Qub2JqZWN0
Qm91bmRpbmdCb3goKSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1p
dGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJpYnV0ZSkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2
ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpCiB7
Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKiBwcmltaXR2ZSA9IHN0
YXRpY19jYXN0PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyo+KG9iamVjdC0+
bm9kZSgpKTsKLQotICAgIExPRyhGaWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgJXAg
cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCByZW5kZXJlciAlcCIsIHRoaXMsIG9iamVjdCk7Ci0K
ICAgICBmb3IgKGNvbnN0IGF1dG8mIG9iamVjdEZpbHRlckRhdGFQYWlyIDogbV9yZW5kZXJlckZp
bHRlckRhdGFNYXApIHsKICAgICAgICAgY29uc3QgYXV0byYgZmlsdGVyRGF0YSA9IG9iamVjdEZp
bHRlckRhdGFQYWlyLnZhbHVlOwogICAgICAgICBpZiAoZmlsdGVyRGF0YS0+c3RhdGUgIT0gRmls
dGVyRGF0YTo6QnVpbHQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTVkdGaWx0
ZXJCdWlsZGVyKiBidWlsZGVyID0gZmlsdGVyRGF0YS0+YnVpbGRlci5nZXQoKTsKLSAgICAgICAg
RmlsdGVyRWZmZWN0KiBlZmZlY3QgPSBidWlsZGVyLT5lZmZlY3RCeVJlbmRlcmVyKG9iamVjdCk7
Ci0gICAgICAgIGlmICghZWZmZWN0KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8v
IFNpbmNlIGFsbCBlZmZlY3RzIHNoYXJlcyB0aGUgc2FtZSBhdHRyaWJ1dGUgdmFsdWUsIGFsbAot
ICAgICAgICAvLyBvciBub25lIG9mIHRoZW0gd2lsbCBiZSBjaGFuZ2VkLgotICAgICAgICBpZiAo
IXByaW1pdHZlLT5zZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1dGUpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNp
dmUoZWZmZWN0KTsKLQogICAgICAgICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVu
LgogICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKCpvYmplY3RGaWx0ZXJEYXRhUGFp
ci5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAppbmRleCA4Y2Uw
YzdhYmMxNDNiZGI2NTM4NTBjOTNlMzI5MmFjOWRhNDliYmM3Li43MWU0ZDFmMzQ2YzMyNjJkN2Y0
ZTAzM2M0YzNmODE5YzI4YzE4MWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCkBAIC0yMywxMCArMjMsOSBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKLSNpbmNsdWRl
ICJTVkdGaWx0ZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAi
U1ZHVW5pdFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KQEAgLTQzLDggKzQyLDcgQEAgcHVibGljOgogCiAgICAgRmlsdGVyRGF0YSgp
ID0gZGVmYXVsdDsKIAotICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRlcjsKKyAgICBSZWZQdHI8RmlsdGVyPiBm
aWx0ZXI7CiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljQnVmZmVyOwogICAg
IEdyYXBoaWNzQ29udGV4dCogc2F2ZWRDb250ZXh0IHsgbnVsbHB0ciB9OwogICAgIEFmZmluZVRy
YW5zZm9ybSBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybTsKQEAgLTcyLDggKzcwLDYgQEAgcHVi
bGljOgogCiAgICAgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2Jq
ZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4g
YnVpbGRQcmltaXRpdmVzKFNWR0ZpbHRlciYpIGNvbnN0OwotCiAgICAgaW5saW5lIFNWR1VuaXRU
eXBlczo6U1ZHVW5pdFR5cGUgZmlsdGVyVW5pdHMoKSBjb25zdDsKICAgICBpbmxpbmUgU1ZHVW5p
dFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cygpIGNvbnN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRl
eCBkZTQ5MzI4MjYzZDA2MmEyMzViY2QyZjQ2NjdlZWYwOWMxMmViM2IzLi42Zjc2ZjIwYzljOWRj
ZGE1MjEyMDUzMjc0MDZhOGVjNDFhOTMwZmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAKICNpbmNsdWRlICJDb2xvclNlcmlh
bGl6YXRpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJHcmFwaGlj
c1R5cGVzLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
SW1hZ2UuaCIKQEAgLTUyLDYgKzUzLDcgQEAKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCiAjaW5jbHVkZSAiU1ZHRWxsaXBz
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdJbmxpbmVU
ZXh0Qm94SW5saW5lcy5oIgogI2luY2x1ZGUgIlNWR0xpbmVFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U1ZHUGF0aEVsZW1lbnQuaCIKQEAgLTQzMSwxMyArNDMzLDkgQEAgdm9pZCB3cml0ZVNWR1Jlc291
cmNlQ29udGFpbmVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lciYKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAicHJpbWl0aXZlVW5pdHMiLCBm
aWx0ZXIucHJpbWl0aXZlVW5pdHMoKSk7CiAgICAgICAgIHRzIDw8ICJcbiI7CiAgICAgICAgIC8v
IENyZWF0aW5nIGEgcGxhY2Vob2xkZXIgZmlsdGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgYnVp
bGRlci4KLSAgICAgICAgRmxvYXRSZWN0IGR1bW15UmVjdDsKLSAgICAgICAgYXV0byBkdW1teUZp
bHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKEFmZmluZVRyYW5zZm9ybSgpLCBkdW1teVJlY3QsIGR1
bW15UmVjdCwgZHVtbXlSZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKGF1dG8gYnVpbGRlciA9IGZp
bHRlci5idWlsZFByaW1pdGl2ZXMoZHVtbXlGaWx0ZXIuZ2V0KCkpKSB7CisgICAgICAgIGlmIChS
ZWZQdHI8RmlsdGVyPiBkdW1teUZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlci5maWx0
ZXJFbGVtZW50KCkpKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRl
bnRTY29wZSh0cyk7Ci0KLSAgICAgICAgICAgIGlmIChGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3Qg
PSBidWlsZGVyLT5sYXN0RWZmZWN0KCkpCi0gICAgICAgICAgICAgICAgbGFzdEVmZmVjdC0+ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgICAgICAgICBkdW1teUZpbHRlci0+ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHJlc291cmNl
LnJlc291cmNlVHlwZSgpID09IENsaXBwZXJSZXNvdXJjZVR5cGUpIHsKICAgICAgICAgY29uc3Qg
YXV0byYgY2xpcHBlciA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ciY+KHJlc291cmNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5k
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCmlu
ZGV4IDdiY2YwNDE4MDBmNzk5ZjExNzRjZmUwNGI4MjJkNmQwNjQzMWY2ODYuLjliMTNlNjU1MzQ5
YjQwOGU5OGUwNDAwZDc0M2UyMWQ2MzA3OGE1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
QmxlbmRFbGVtZW50LmNwcApAQCAtMTAwLDIwICsxMDAsMTUgQEAgdm9pZCBTVkdGRUJsZW5kRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUJsZW5kRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0
ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYg
YnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGlu
MSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4yKCkpOwogCiAg
ICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBhdXRvIGVmZmVjdCA9IEZFQmxlbmQ6OmNyZWF0ZShmaWx0ZXIsIG1vZGUoKSk7Ci0gICAgRmls
dGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwot
ICAgIGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFw
cGVuZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCi0gICAg
cmV0dXJuIGVmZmVjdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IEZFQmxl
bmQ6OmNyZWF0ZShtb2RlKCkpLCB7IHsgKmlucHV0MSB9LCB7ICppbnB1dDIgfSB9IH07CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgKaW5kZXggOTAzN2NiMTIxZjkz
NjdiNzg4ZDkyMTZlMGI5NDFmYzhiMDZkZWM2Ni4uYmM5NWJjOTI1Y2QwMzU3MTQ3NGVjMmY3MjU4
NTQ2ZGZlNDNkNzY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgKQEAg
LTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25z
dCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKaW5kZXggMDUyNDg1NzhjMjc0YzhmYTJiM2Ux
ZjI0NGU0MzY3ODY4ZjQyYmE5Yy4uZTg2ODUyNzA3Mzg4MDI2NjUxODM4MzZkNDkzMzExYTEzNGZm
OWYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
Y3BwCkBAIC0xMDAsMTIgKzEwMCwxMSBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRl
cikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRF
ZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxmbG9hdD4gZmlsdGVyVmFsdWVzOwog
ICAgIENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlID0gdHlwZSgpOwpAQCAtMTM1LDE1ICsxMzQs
MTMgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWwKICAgICAgICAgaWYgKChmaWx0ZXJUeXBlID09
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVggJiYgc2l6ZSAhPSAyMCkKICAgICAgICAgICAgIHx8
IChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUgJiYgc2l6ZSAhPSAx
KQogICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFICYmIHNpemUgIT0gMSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgICAgIAogICAgICAgICBmaWx0ZXJWYWx1ZXMgPSB2YWx1ZXMo
KTsKICAgICAgICAgZmlsdGVyVmFsdWVzLnNocmlua1RvRml0KCk7CiAgICAgfQogCi0gICAgYXV0
byBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBXVEZN
b3ZlKGZpbHRlclZhbHVlcykpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0
MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVyVmFsdWVzKSksIHsgaW5wdXQxLnJlbGVhc2VO
b25OdWxsKCkgfSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCmluZGV4IDdhYjRhYTQxODFlN2FiMTk4
YjEyZTc3YmUyMDZiOWM1YzQxMDIzZmQuLjFiZWM1NDM3YTZlMGRmNTRlZTQ3NTdiOWJiMDc0M2Zh
MTk4YTY5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5oCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVy
RWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0
cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmlt
YXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAppbmRleCA5MGE1NWI3ZWZmZjdhM2Zl
NjA2YTllMDU3OWE3NmVkZTlmOTY4MDExLi4wNzVjY2EzNWM1MjY5MDk0NzIzNWU4ODU3Njk4MjQ3
NjAyYzVmY2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudC5jcHAKQEAgLTYzLDEyICs2MywxMSBAQCB2b2lkIFNWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBjbwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VB
dHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRv
IGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIAorICAg
IGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1
dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWQ7CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBncmVlbjsKQEAgLTg2LDkgKzg1LDcgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHQKICAg
ICAgICAgICAgIGFscGhhID0gZG93bmNhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQ+KGNoaWxkKS50cmFu
c2ZlckZ1bmN0aW9uKCk7CiAgICAgfQogICAgIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb25l
bnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7
CisgICAgcmV0dXJuIHsgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKSwgeyB7ICppbnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKaW5kZXggYmI1ODkzNDdk
ODgyNmRmYjM2MDllZGFjNmU4Yjk5M2E0ZGQ1NDg2My4uNzkzNzExNmQzNGM3YTc1YmU0M2JlYjM1
ZjBjMzE0OTRlNTcyYzNmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29t
cG9uZW50VHJhbnNmZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29t
cG9uZW50VHJhbnNmZXJFbGVtZW50LmgKQEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKICAgICAv
LyBGSVhNRTogc3ZnQXR0cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgogICAgIHZvaWQgcGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsK
IAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7
ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVk
U3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9z
aXRlRWxlbWVudC5jcHAKaW5kZXggM2NhOTliODc1NzA4YmJkOGE2YmFmNjUzZGMwNmZlMjA1YWM5
ODIzNS4uNDM2MzgwYjA5MTJiOWE5YjdhNzc3MWIyNDhmMTdhOTkwNTQ1NzYyYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKQEAgLTQwLDcgKzQwLDcg
QEAgaW5saW5lIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywg
W10gewogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVz
OjppbkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1faW4xPigpOwogICAgICAgICBQcm9w
ZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjppbjJBdHRyLCAmU1ZHRkVD
b21wb3NpdGVFbGVtZW50OjptX2luMj4oKTsKLSAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVn
aXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6b3BlcmF0b3JBdHRyLCBDb21wb3NpdGVPcGVyYXRpb25U
eXBlLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX3N2Z09wZXJhdG9yPigpOworICAgICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIs
IEZFQ29tcG9zaXRlT3BlcmF0b3IsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fY29tcG9zaXRl
T3BlcmF0b3I+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8
U1ZHTmFtZXM6OmsxQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMT4oKTsKICAgICAg
ICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6azJBdHRyLCAm
U1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2syPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjprM0F0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6Om1fazM+KCk7CkBAIC01Niw5ICs1Niw5IEBAIFJlZjxTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ+
IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhCiB2
b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0g
U1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikgewotICAgICAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBl
IHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBl
Pjo6ZnJvbVN0cmluZyh2YWx1ZSk7CisgICAgICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgcHJvcGVy
dHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojpmcm9tU3Ry
aW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQotICAgICAgICAgICAg
bV9zdmdPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+
KHByb3BlcnR5VmFsdWUpOworICAgICAgICAgICAgbV9jb21wb3NpdGVPcGVyYXRvci0+c2V0QmFz
ZVZhbEludGVybmFsPEZFQ29tcG9zaXRlT3BlcmF0b3I+KHByb3BlcnR5VmFsdWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC05OSw3ICs5OSw3IEBAIGJvb2wgU1ZHRkVDb21wb3NpdGVF
bGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNv
bnN0CiB7CiAgICAgRkVDb21wb3NpdGUqIGNvbXBvc2l0ZSA9IHN0YXRpY19jYXN0PEZFQ29tcG9z
aXRlKj4oZWZmZWN0KTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0
cikKLSAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0T3BlcmF0aW9uKHN2Z09wZXJhdG9yKCkp
OworICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRDb21wb3NpdGVPcGVyYXRvcihjb21wb3Np
dGVPcGVyYXRvcigpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsxQXR0cikKICAg
ICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0SzEoazEoKSk7CiAgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjprMkF0dHIpCkBAIC0xMzEsMjAgKzEzMSwxNSBAQCB2b2lkIFNWR0ZFQ29tcG9z
aXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNv
bXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZp
bHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
QnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJC
dWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKLSAgICAKKyAgICBhdXRvIGlucHV0MSA9IGJ1
aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gYnVpbGRlci5uYW1l
ZEVmZmVjdChpbjIoKSk7CisKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb3NpdGU6OmNyZWF0ZShm
aWx0ZXIsIHN2Z09wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0KCkpOwotICAgIEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAg
ICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBl
bmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJl
dHVybiBlZmZlY3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBGRUNvbXBv
c2l0ZTo6Y3JlYXRlKGNvbXBvc2l0ZU9wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0KCkp
LCB7IHsgKmlucHV0MSB9LCB7ICppbnB1dDIgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAppbmRleCA4MWE3OGM4NjU3YTBmYTMwNDRkZjVi
N2M1YTA4MGQ2ZTc3OTcyMmY2Li5mNTEwMDFlMjBkNzA0ZGQ4NjgzMTZiOGQzMGIyYTIwZDk4NDk0
NWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCkBAIC0y
NywxNSArMjcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8PgotaW5saW5l
IHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmhpZ2hl
c3RFeHBvc2VkRW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhN
RVRJQzsgfQoraW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8RkVDb21wb3NpdGVPcGVy
YXRvcj46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVJJVEhNRVRJQzsgfQogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZHUHJvcGVydHlUcmFp
dHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4geworc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPEZF
Q29tcG9zaXRlT3BlcmF0b3I+IHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1WYWx1
ZSgpIHsgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI7IH0KIAotICAgIHN0YXRp
YyBTdHJpbmcgdG9TdHJpbmcoQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB0eXBlKQorICAgIHN0YXRp
YyBTdHJpbmcgdG9TdHJpbmcoRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcikK
ICAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBzd2l0Y2ggKGNvbXBvc2l0
ZU9wZXJhdG9yKSB7CiAgICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoK
ICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgICAgICBjYXNlIEZFQ09NUE9T
SVRFX09QRVJBVE9SX09WRVI6CkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRy
YWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPiB7CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogICAgIH0KIAotICAgIHN0YXRpYyBDb21wb3NpdGVPcGVyYXRpb25UeXBlIGZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBzdGF0aWMgRkVDb21wb3NpdGVPcGVyYXRvciBm
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUg
PT0gIm92ZXIiKQogICAgICAgICAgICAgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI7
CkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBpbjEoKSBjb25zdCB7IHJl
dHVybiBtX2luMS0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBTdHJpbmcgaW4yKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbjItPmN1cnJlbnRWYWx1ZSgpOyB9Ci0gICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlw
ZSBzdmdPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3ItPmN1cnJlbnRWYWx1
ZTxDb21wb3NpdGVPcGVyYXRpb25UeXBlPigpOyB9CisgICAgRkVDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlT3BlcmF0b3ItPmN1
cnJlbnRWYWx1ZTxGRUNvbXBvc2l0ZU9wZXJhdG9yPigpOyB9CiAgICAgZmxvYXQgazEoKSBjb25z
dCB7IHJldHVybiBtX2sxLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIGZsb2F0IGsyKCkgY29uc3Qg
eyByZXR1cm4gbV9rMi0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCBrMygpIGNvbnN0IHsg
cmV0dXJuIG1fazMtPmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoK
IAogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiBpbjFBbmltYXRlZCgpIHsgcmV0dXJuIG1faW4xOyB9
CiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIGluMkFuaW1hdGVkKCkgeyByZXR1cm4gbV9pbjI7IH0K
LSAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBzdmdPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1
cm4gbV9zdmdPcGVyYXRvcjsgfQorICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIGNvbXBvc2l0
ZU9wZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX2NvbXBvc2l0ZU9wZXJhdG9yOyB9CiAgICAg
U1ZHQW5pbWF0ZWROdW1iZXImIGsxQW5pbWF0ZWQoKSB7IHJldHVybiBtX2sxOyB9CiAgICAgU1ZH
QW5pbWF0ZWROdW1iZXImIGsyQW5pbWF0ZWQoKSB7IHJldHVybiBtX2syOyB9CiAgICAgU1ZHQW5p
bWF0ZWROdW1iZXImIGszQW5pbWF0ZWQoKSB7IHJldHVybiBtX2szOyB9CkBAIC0xMDksMTIgKzEw
OSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNy
ZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjIgeyBTVkdBbmlt
YXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07Ci0gICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRp
b24+IG1fc3ZnT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywg
RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUikgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbj4gbV9jb21wb3NpdGVPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0
ZSh0aGlzLCBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSKSB9OwogICAgIFJlZjxTVkdBbmltYXRl
ZE51bWJlcj4gbV9rMSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBS
ZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazIgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRo
aXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2szIHsgU1ZHQW5pbWF0ZWROdW1i
ZXI6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9zaXRlRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmlkbAppbmRleCA3OGU0MDIwN2Y1YjAyZjY3MGYwNDBiMjkzNzVlYWQ3YzJiNDUyZGUw
Li5mYzY3MGM5ZWM1NmM0MWMxMDkyODU0ODQyN2M1ZjZhOGUxODViMWE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbApAQCAtMzgsNyArMzgsNyBAQAog
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAgICAgaW4xOwogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMjsKLSAgICBbSW1w
bGVtZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51
bWVyYXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxlbWVudGVkQXM9Y29tcG9zaXRlT3BlcmF0b3Jd
IHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOwogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsxOwogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsyOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGszOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggZjc1MDU4MTVkZWNhYmI0
ZWEzNGI0MzViNDdlYTVhODBjNmEyNmRmMS4uM2I0NjU0MGY3ZWUxYzQxMGZiOGI3MzZhZTQyMzQw
MDgxNjcxNjgzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVN
YXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQuY3BwCkBAIC0xOTEsMTIgKzE5MSwxMSBAQCB2b2lkIFNWR0ZFQ29udm9sdmVN
YXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVy
LCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQx
ID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0
MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGludCBvcmRlclhW
YWx1ZSA9IG9yZGVyWCgpOwogICAgIGludCBvcmRlcllWYWx1ZSA9IG9yZGVyWSgpOwpAQCAtMjA2
LDIyICsyMDUsMjIgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICB9CiAgICAgLy8gU3Bl
YyBzYXlzIG9yZGVyIG11c3QgYmUgPiAwLiBCYWlsIGlmIGl0IGlzIG5vdC4KICAgICBpZiAob3Jk
ZXJYVmFsdWUgPCAxIHx8IG9yZGVyWVZhbHVlIDwgMSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgYXV0byYga2VybmVsTWF0cml4ID0gdGhpcy0+a2Vy
bmVsTWF0cml4KCk7CiAgICAgaW50IGtlcm5lbE1hdHJpeFNpemUgPSBrZXJuZWxNYXRyaXguaXRl
bXMoKS5zaXplKCk7CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGlzIGlzIGEgcmVxdWlyZW1lbnQs
IGFuZCBzaG91bGQgYmFpbCBvdXQgaWYgZmFpbHMKICAgICBpZiAob3JkZXJYVmFsdWUgKiBvcmRl
cllWYWx1ZSAhPSBrZXJuZWxNYXRyaXhTaXplKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGludCB0YXJnZXRYVmFsdWUgPSB0YXJnZXRYKCk7CiAg
ICAgaW50IHRhcmdldFlWYWx1ZSA9IHRhcmdldFkoKTsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNW
R05hbWVzOjp0YXJnZXRYQXR0cikgJiYgKHRhcmdldFhWYWx1ZSA8IDAgfHwgdGFyZ2V0WFZhbHVl
ID49IG9yZGVyWFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpczogdGFyZ2V0
WCA9IGZsb29yICggb3JkZXJYIC8gMiApKQogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVz
Ojp0YXJnZXRYQXR0cikpCiAgICAgICAgIHRhcmdldFhWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4o
Zmxvb3JmKG9yZGVyWFZhbHVlIC8gMikpOwogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnRhcmdldFlBdHRyKSAmJiAodGFyZ2V0WVZhbHVlIDwgMCB8fCB0YXJnZXRZVmFsdWUgPj0gb3Jk
ZXJZVmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoZSBkZWZhdWx0IHZhbHVlIGlzOiB0YXJnZXRZID0gZmxv
b3IgKCBvcmRlclkgLyAyICkpCiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdl
dFlBdHRyKSkKICAgICAgICAgdGFyZ2V0WVZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYo
b3JkZXJZVmFsdWUgLyAyKSk7CkBAIC0yMzQsMTEgKzIzMywxMSBAQCBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciog
ZmlsdGVyQgogICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlID0gMTsKICAgICB9CiAgICAg
aWYgKGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUgPD0gMCB8fCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVl
IDw9IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAg
ICAgZmxvYXQgZGl2aXNvclZhbHVlID0gZGl2aXNvcigpOwogICAgIGlmIChoYXNBdHRyaWJ1dGUo
U1ZHTmFtZXM6OmRpdmlzb3JBdHRyKSAmJiAhZGl2aXNvclZhbHVlKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdO
YW1lczo6ZGl2aXNvckF0dHIpKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2VybmVs
TWF0cml4U2l6ZTsgKytpKQogICAgICAgICAgICAgZGl2aXNvclZhbHVlICs9IGtlcm5lbE1hdHJp
eC5pdGVtcygpW2ldLT52YWx1ZSgpOwpAQCAtMjQ2LDkgKzI0NSwxOCBAQCBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyQgogICAgICAgICAgICAgZGl2aXNvclZhbHVlID0gMTsKICAgICB9CiAKLSAgICBh
dXRvIGVmZmVjdCA9IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEludFNpemUob3Jk
ZXJYVmFsdWUsIG9yZGVyWVZhbHVlKSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRh
cmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxV
bml0TGVuZ3RoWFZhbHVlLCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgp
LCBrZXJuZWxNYXRyaXgpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9
OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsKKyAgICAgICAgRkVDb252b2x2ZU1h
dHJpeDo6Y3JlYXRlKAorICAgICAgICAgICAgSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZVmFs
dWUpLAorICAgICAgICAgICAgZGl2aXNvclZhbHVlLAorICAgICAgICAgICAgYmlhcygpLAorICAg
ICAgICAgICAgSW50UG9pbnQodGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpLAorICAgICAgICAg
ICAgZWRnZU1vZGUoKSwKKyAgICAgICAgICAgIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFhW
YWx1ZSwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSksCisgICAgICAgICAgICBwcmVzZXJ2ZUFscGhh
KCksCisgICAgICAgICAgICBrZXJuZWxNYXRyaXgpLAorICAgICAgICB7IHsgKmlucHV0MSB9IH0K
KyAgICB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCmluZGV4IDg1YzAwMjY5OGM2Mjc3ZTA0
MzcwZDM1OTgyYTk1YjhkOTA0OWIzMzkuLjE4NzA2ZGE3MzVmZDJhNzc4ZjdmMTg1ODc2Zjc0OGY4
NGNhMWYwY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudC5oCkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVy
dHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7
IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggMTUyYzk4NWZkOGU5
NWFlOTk1N2U2ZTIxZDZiZjJhMTBjNDU0YmRkNS4uYjljMWIzYTI5NzY4M2RmOTgwNGZjNjkxMjc1
ZTA2MDdmYjZjNzY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudC5jcHAKQEAgLTg5LDE0ICs4OSwxNCBAQCBib29sIFNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCog
ZWZmZWN0LAogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIo
KTsKICAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKICAgICAgICAgQ29sb3IgY29sb3IgPSByZW5k
ZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUo
KS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0gICAgICAgIHJldHVybiBkaWZmdXNlTGln
aHRpbmctPnNldExpZ2h0aW5nQ29sb3IoY29sb3IpOworICAgICAgICByZXR1cm4gZGlmZnVzZUxp
Z2h0aW5nLT5zZXRDb2xvcihjb2xvcik7CiAgICAgfQogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c3VyZmFjZVNjYWxlQXR0cikKICAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+
c2V0U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCiAgICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRp
bmctPnNldERpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29uc3RhbnQoKSk7CiAKLSAgICBhdXRvJiBs
aWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihkaWZmdXNlTGlnaHRpbmctPmxp
Z2h0U291cmNlKCkpOworICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNv
dXJjZSY+KGRpZmZ1c2VMaWdodGluZy0+c291cmNlKCkpOwogICAgIGNvbnN0IFNWR0ZFTGlnaHRF
bGVtZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVu
dCh0aGlzKTsKICAgICBBU1NFUlQobGlnaHRFbGVtZW50KTsKIApAQCAtMTUxLDI4ICsxNTEsMjUg
QEAgdm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdodEUKICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIm
IGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBidWls
ZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZWZQdHIgbGlnaHRFbGVtZW50
ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7CiAgICAgaWYgKCFs
aWdodEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9
OwogICAgIAotICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNl
KCpmaWx0ZXJCdWlsZGVyKTsKKyAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5s
aWdodFNvdXJjZShidWlsZGVyKTsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5
bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHls
ZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFRGlmZnVzZUxpZ2h0
aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFu
dCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxp
Z2h0U291cmNlKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0g
ICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRl
KGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5n
dGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKSwgeyB7ICpp
bnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQuaAppbmRleCA2ODk5OTYwOWY0YjZiNTZhNzZjODhlYTU2OTVmMWUw
ZTllMjA1NTgwLi45YjM0YWE3MjJiMDRkNTQxYWQ2NDk3ODBlM2FjZjQwZDUxMTAxZDVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCkBA
IC01OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0
QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsK
LSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVy
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0Piwg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0
cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCmluZGV4IDBjNWU4MjViYzgyNTYwZjM2YTI2OWVhNmQ3
MjJkZmQwNTE3M2Q4YzIuLmM5ZWQyZjUyNzBmMDJmZDc3Nzg4NTBlZmVmYTdlNzEzMGE0ZTJlMzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuY3BwCkBAIC0xMTUsMjAgKzExNSwxNSBAQCB2b2lkIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTgogICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRl
ci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBidWlsZGVyLm5hbWVkRWZm
ZWN0KGluMigpKTsKICAgICAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6OmNy
ZWF0ZShmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBzY2Fs
ZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5w
dXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBp
bnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1
dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9OworCisgICAg
cmV0dXJuIHsgRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSh4Q2hhbm5lbFNlbGVjdG9yKCksIHlD
aGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSksIHsgeyAqaW5wdXQxIH0sIHsgKmlucHV0MiB9IH0g
fTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudC5oCmluZGV4IGFhOTFkZjM4YjM2Mjk4ZjEyMWExNDExYzRkMGFlNWVjZDU4NjY1ZDMu
LjBlNTkzZGQwZGEyNDYwMzA5ZTFlYzY4MTYxYTgxNzcxNDliNDBmNTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKQEAgLTkxLDcgKzkx
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUo
RmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwot
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXIm
KSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBW
ZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3Ry
aW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RURpc3RhbnRMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFu
dExpZ2h0RWxlbWVudC5jcHAKaW5kZXggYTY4NmJiOGZhMzhkOWRkZmEyOGUwMmFlZDk1ZTQxYjA4
YTM2ZjJmNy4uOTE2ZjAzYzBmOTE1N2VjODI4YzkyZTk5YjYzYmQ2MjJlOTUyNmE0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAKQEAgLTM2
LDcgKzM2LDcgQEAgUmVmPFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudD4gU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmEKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAot
UmVmPExpZ2h0U291cmNlPiBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKFNW
R0ZpbHRlckJ1aWxkZXImKSBjb25zdAorUmVmPExpZ2h0U291cmNlPiBTVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewog
ICAgIHJldHVybiBEaXN0YW50TGlnaHRTb3VyY2U6OmNyZWF0ZShhemltdXRoKCksIGVsZXZhdGlv
bigpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQu
aAppbmRleCBmYmRmNzFjMGVjYmQ5Zjk5N2Q2OWVhNjU0YjlmNWJhMDMxN2Q3MWNjLi5iYmJmZTk0
NzM5YjQ0MzljMDYwNmJjMTM4OGVkODBmNzIyNzI1ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oCkBAIC0zMCw3ICszMCw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdG
aWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0U291cmNlPiBsaWdo
dFNvdXJjZShjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiB9Owogc3Rh
dGljX2Fzc2VydChzaXplb2YoU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KSA9PSBzaXplb2YoU1ZH
RkVMaWdodEVsZW1lbnQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQuY3BwCmluZGV4IDIyYmNlMWQzMzMxN2M5NTcxZmU1ZDc5ZjRiMzI2YTg5YmZjNWI2
ODEuLjYzNDcxMDhmMjZiYjhhNTM4ZWE2OTNlMTMwN2VmMTA0ZjhkNDJhODEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKQEAgLTk3LDI3ICs5Nywy
NSBAQCB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURyb3BT
aGFkb3dFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewor
ICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgaWYgKCFp
bnB1dDEpCisgICAgICAgIHJldHVybiB7IH07CisKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChzdGREZXZpYXRpb25YKCkg
PCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0g
cmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAKICAgICBDb2xvciBjb2xvciA9IHJl
bmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29k
Q29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgpOwog
Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsK
LSAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGVm
ZmVjdCA9IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGRE
ZXZpYXRpb25ZKCksIGR4KCksIGR5KCksIGNvbG9yLCBvcGFjaXR5KTsKLSAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVy
biB7IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgp
LCBkeCgpLCBkeSgpLCBjb2xvciwgb3BhY2l0eSksIHsgKmlucHV0MSB9IH07CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCmluZGV4IDliNjJkMjRi
NDU0YmI3ZDI3NThlNzEyYjYyMWI4Y2JlNDJmNzQ1MWQuLjFjNmUxMjIwMGMwYjA3YTU2NTk0MDA1
ZmQzYzQxMjZhMmU2ZGVjODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQuaApAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29k
RWxlbWVudC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVkMGUxNjNmZjg3ZDBiNGJjYWJkMjI0NDc1OGZj
Mi4uZjJmYThkNTQwYThkMTBjOTkwZTRkZTc0YjZkZDRiYWFmMDBhODExMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCkBAIC01OCwxOCArNTgsMTggQEAgYm9vbCBT
VkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCog
ZWZmZWN0LCBjb25zdCBRdWEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciYpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRl
cmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
CisgICAgICAgIHJldHVybiB7IH07CisKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5
bGUgPSByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpOwogCiAgICAgQ29sb3IgY29sb3IgPSBy
ZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9v
ZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsK
IAotICAgIHJldHVybiBGRUZsb29kOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgb3BhY2l0eSk7Cisg
ICAgcmV0dXJuIHsgRkVGbG9vZDo6Y3JlYXRlKGNvbG9yLCBvcGFjaXR5KSwgeyB9IH07CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKaW5kZXggYjk2YTQzYWEzMTNl
NzVlNGEzMTY3MjQ4YTFiNmY1Y2Y1MWZlZTkxMS4uNGYwM2E3NjVjOTg3Mjg1M2Y5M2Y1YTJmODAw
ZGYyNjI1NWMzZTYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKQEAg
LTM2LDcgKzM2LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBw
cm9wZXJ0eVJlZ2lzdHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5
OyB9CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCmluZGV4IDdh
OTk4MjI0YzkyMTk1NTUyNDRhODY5Y2E3OGE4MzBkNTYzYzU5OWQuLmJlODIwNmE0YjdkNWM4YmY1
NmFiYWJkY2MxNTA5OTA3NTI4Yjc2MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCkBAIC05NSwxOCArOTUsMTYgQEAgdm9pZCBTVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5w
dXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1
dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoc3RkRGV2
aWF0aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVHYXVzc2lh
bkJsdXI6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBl
ZGdlTW9kZSgpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAg
ICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc3Rk
RGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpLCB7ICppbnB1dDEgfSB9
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
LmgKaW5kZXggZDg5ZTFhNzQ4ZmIyYzUwOWUyMTRmZTk0YWU0MTAwMWNlNDhlZTBiMi4uYjVmNjJk
NGEwM2IzYzE4OGI4NWM4MjYzMTM2NjAxOGU1MjNiMTE0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaApAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0
b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6
dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVn
aXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRT
dHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKaW5kZXggZTE0Njg4YTVlYjE3NmYwMmEx
NmMwNTUwZjA4MTE5NWQzYzI3ZWM0Zi4uMTkzNDA4NzIyM2M5NTNjMDQ1MWI0ZjBjNmZmODhkYWM2
NjA1OWY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oIgorI2lu
Y2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzQsMTYgKzE3NSw0NCBAQCB2b2lk
IFNWR0ZFSW1hZ2VFbGVtZW50Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSYsIGNvbnN0
IE5ldHdvcmtMb2FkTWV0cmljcwogICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0
QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oKnBhcmVudFJlbmRlcmVyKTsKIH0KIAotUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHRkVJbWFn
ZUVsZW1lbnQ6OmltYWdlQnVmZmVyRm9yRWZmZWN0KCkgY29uc3QKIHsKLSAgICBpZiAobV9jYWNo
ZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShmaWx0ZXIs
IG1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSksIHByZXNlcnZlQXNw
ZWN0UmF0aW8oKSk7Ci0KICAgICBhdXRvIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0
RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCB0cmVlU2NvcGUoKSk7CisgICAgaWYgKCFpczxT
VkdFbGVtZW50Pih0YXJnZXQuZWxlbWVudCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCiAg
ICAgaWYgKGlzRGVzY2VuZGFudE9yU2hhZG93RGVzY2VuZGFudE9mKHRhcmdldC5lbGVtZW50Lmdl
dCgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gRkVJbWFnZTo6Y3Jl
YXRlV2l0aElSSVJlZmVyZW5jZShmaWx0ZXIsIHRyZWVTY29wZSgpLCBocmVmKCksIHByZXNlcnZl
QXNwZWN0UmF0aW8oKSk7CisgICAgYXV0byBjb250ZXh0Tm9kZSA9IHN0YXRpY19wb2ludGVyX2Nh
c3Q8U1ZHRWxlbWVudD4odGFyZ2V0LmVsZW1lbnQpOworICAgIGF1dG8gcmVuZGVyZXIgPSBjb250
ZXh0Tm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8gc3JjUmVjdCA9IHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoc3JjUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlm
ICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgY29u
dGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgY29udGV4dC50cmFuc2xhdGUoLXNy
Y1JlY3QubG9jYXRpb24oKSk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGVudFRyYW5zZm9y
bWF0aW9uOworICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0NvbnRleHQo
Y29udGV4dCwgKnJlbmRlcmVyLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOworCisgICAgcmV0dXJu
IGltYWdlQnVmZmVyOworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCisgICAgICAgIHJldHVy
biB7IEZFSW1hZ2U6OmNyZWF0ZShSZWY8SW1hZ2U+IHsgKm1fY2FjaGVkSW1hZ2UtPmltYWdlRm9y
UmVuZGVyZXIocmVuZGVyZXIoKSkgfSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKSwgeyB9IH07CisK
KyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVmZmVyRm9yRWZmZWN0KCkpCisgICAg
ICAgIHJldHVybiB7IEZFSW1hZ2U6OmNyZWF0ZShpbWFnZUJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgp
LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpLCB7IH0gfTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
IHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0
SGFzaFNldDxVUkw+JiB1cmxzKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuaAppbmRleCBkOTNlMGQwZGI4Yjg4NjY1NDgwZjIxMDE1YTI1NmJhZGExNTRjNWM3Li4wNWJl
ZjlhZjEzOWJkNjA0NmZkYjZlOGI4ZTYyZDNhYWY1MTEzODBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVJbWFnZUVsZW1lbnQuaApAQCAtNTUsNyArNTUsOSBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlckZvckVmZmVjdCgpIGNvbnN0Owor
ICAgIAorICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKTsKICAgICB2b2lkIHJlcXVlc3RJbWFn
ZVJlc291cmNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oCmluZGV4IGNk
MGJmYjllZGNmZDdiNGUxYWYzOWI1NWVkYmJiZDc4NGFhZWE4OWQuLjFjYjI3ZGYzMTUwNDAxN2M2
OTllMDEwY2VkNGIwZDVkNjAwYmM2MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUxpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxl
bWVudC5oCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CiBjbGFzcyBT
VkdGRUxpZ2h0RWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50IHsKICAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKFNWR0ZFTGlnaHRFbGVtZW50KTsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIFJlZjxM
aWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVp
bGRlciYpIGNvbnN0ID0gMDsKICAgICBzdGF0aWMgU1ZHRkVMaWdodEVsZW1lbnQqIGZpbmRMaWdo
dEVsZW1lbnQoY29uc3QgU1ZHRWxlbWVudCopOwogCiAgICAgZmxvYXQgYXppbXV0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fYXppbXV0aC0+Y3VycmVudFZhbHVlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuY3BwCmluZGV4IGJlMmY2ZTAzMDdkYzU1MTYwMDc5MGZkNWJmMTgy
ZjFkOTQ2MjNkZDYuLjVkN2Q3MGNkY2U2MDFlNDI4NmJkNzVlYTNmNjIyMGE0NWZkOWEyZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcApAQCAtMjYsNyArMjYsNiBA
QAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVs
cGVycy5oIgogI2luY2x1ZGUgIlNWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNW
R0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTQ1LDI0ICs0NCwyMiBAQCBSZWY8U1ZHRkVNZXJnZUVs
ZW1lbnQ+IFNWR0ZFTWVyZ2VFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFTWVyZ2VFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRl
cikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IFNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBi
dWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gZWZmZWN0ID0gRkVNZXJnZTo6Y3JlYXRlKGZpbHRl
cik7Ci0gICAgYXV0byYgbWVyZ2VJbnB1dHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOworICAg
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gbWVyZ2VJbnB1dHM7CiAKICAgICBmb3IgKGF1dG8m
IG1lcmdlTm9kZSA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZFTWVyZ2VOb2RlRWxlbWVudD4oKnRoaXMp
KSB7Ci0gICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RC
eUlkKG1lcmdlTm9kZS5pbjEoKSk7CisgICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBidWlsZGVy
Lm5hbWVkRWZmZWN0KG1lcmdlTm9kZS5pbjEoKSk7CiAgICAgICAgIGlmICghbWVyZ2VFZmZlY3Qp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgbWVyZ2VJbnB1dHMuYXBwZW5k
KFdURk1vdmUobWVyZ2VFZmZlY3QpKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
IG1lcmdlSW5wdXRzLmFwcGVuZChtZXJnZUVmZmVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9
CiAKICAgICBtZXJnZUlucHV0cy5zaHJpbmtUb0ZpdCgpOwotCiAgICAgaWYgKG1lcmdlSW5wdXRz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFTWVyZ2U6OmNyZWF0ZShtZXJn
ZUlucHV0cy5zaXplKCkpLCBXVEZNb3ZlKG1lcmdlSW5wdXRzKSB9OwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCmluZGV4IDc0NTA4NjgxNmY2OTc2YzY2OTdkYzUx
MDc1ODAyZDI4M2NmNGUzYzIuLjU1YTYxMWYwNzg4ZTA3NDJiNWIzYmIxOGNhZGFmZTE1ODM4Yzcw
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCkBAIC0zNSw3ICszNSw3
IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5T3du
ZXJSZWdpc3RyeTxTVkdGRU1lcmdlRWxlbWVudCwgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzPjsKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lz
dHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKLSAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcApp
bmRleCBkNmZiOTVjOGUzNzc2ZTZkMjA5M2JlYWNlMzVlMmVkMTc5NWQzMjFiLi4yOWJiNTlkNzFm
NTdhNDcyZTMzMGUxZjI4ZTQ1MWE4ZjJjN2I3M2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCkBAIC0zOSw3ICszOSw3IEBAIGlubGluZSBTVkdG
RU1vcnBob2xvZ3lFbGVtZW50OjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwogICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJl
Z2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluQXR0ciwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6
Om1faW4xPigpOwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNW
R05hbWVzOjpvcGVyYXRvckF0dHIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsICZTVkdGRU1vcnBo
b2xvZ3lFbGVtZW50OjptX3N2Z09wZXJhdG9yPigpOworICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIE1vcnBob2xvZ3lPcGVy
YXRvciwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fbW9ycGhvbG9neU9wZXJhdG9yPigpOwog
ICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpyYWRp
dXNBdHRyLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9yYWRpdXNYLCAmU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudDo6bV9yYWRpdXNZPigpOwogICAgIH0pOwogfQpAQCAtNTksOSArNTksOSBAQCB2
b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnNldFJhZGl1cyhmbG9hdCB4LCBmbG9hdCB5KQog
dm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9
PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5
cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yIHByb3Bl
cnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpmcm9tU3Ry
aW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQotICAgICAgICAgICAg
bV9zdmdPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+
KHByb3BlcnR5VmFsdWUpOworICAgICAgICAgICAgbV9tb3JwaG9sb2d5T3BlcmF0b3ItPnNldEJh
c2VWYWxJbnRlcm5hbDxNb3JwaG9sb2d5T3BlcmF0b3I+KHByb3BlcnR5VmFsdWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wgU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBj
b25zCiB7CiAgICAgRkVNb3JwaG9sb2d5KiBtb3JwaG9sb2d5ID0gc3RhdGljX2Nhc3Q8RkVNb3Jw
aG9sb2d5Kj4oZWZmZWN0KTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9y
QXR0cikKLSAgICAgICAgcmV0dXJuIG1vcnBob2xvZ3ktPnNldE1vcnBob2xvZ3lPcGVyYXRvcihz
dmdPcGVyYXRvcigpKTsKKyAgICAgICAgcmV0dXJuIG1vcnBob2xvZ3ktPnNldE1vcnBob2xvZ3lP
cGVyYXRvcihtb3JwaG9sb2d5T3BlcmF0b3IoKSk7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpyYWRpdXNBdHRyKSB7CiAgICAgICAgIC8vIEJvdGggc2V0UmFkaXVzIGZ1bmN0aW9ucyBz
aG91bGQgYmUgZXZhbHVhdGVkIHNlcGFyYXRlbHkuCiAgICAgICAgIGJvb2wgaXNSYWRpdXNYQ2hh
bmdlZCA9IG1vcnBob2xvZ3ktPnNldFJhZGl1c1gocmFkaXVzWCgpKTsKQEAgLTExNCwyMSArMTE0
LDE4IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8
UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFTW9y
cGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7
Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsK
LSAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOwotICAgIGZsb2F0IHlSYWRpdXMgPSByYWRp
dXNZKCk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwog
ICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAorICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7CisgICAgZmxvYXQgeVJhZGl1
cyA9IHJhZGl1c1koKTsKICAgICBpZiAoeFJhZGl1cyA8IDAgfHwgeVJhZGl1cyA8IDApCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBlZmZl
Y3QgPSBGRU1vcnBob2xvZ3k6OmNyZWF0ZShmaWx0ZXIsIHN2Z09wZXJhdG9yKCksIHhSYWRpdXMs
IHlSYWRpdXMpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAg
IHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVNb3JwaG9sb2d5OjpjcmVhdGUobW9ycGhv
bG9neU9wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRpdXMpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmgKaW5kZXggMWE5MDg4Yjc1Y2Y4ZDg1YWUzOGYyOTNlMTExOThhNjZmNjZh
YTY2OS4uM2Q3MjdhM2Y1MGI2MDc1YjU1Y2ZjMDM0M2VjMzkxMzI5OTFkYWM0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCkBAIC0yNiwxMiArMjYsMTIg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8Pgotc3RydWN0IFNWR1Byb3BlcnR5
VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+IHsKK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0
czxNb3JwaG9sb2d5T3BlcmF0b3I+IHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1W
YWx1ZSgpIHsgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU7IH0KIAotICAgIHN0
YXRpYyBTdHJpbmcgdG9TdHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQorICAgIHN0
YXRpYyBTdHJpbmcgdG9TdHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRv
cikKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBzd2l0Y2ggKG1vcnBo
b2xvZ3lPcGVyYXRvcikgewogICAgICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktO
T1dOOgogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgICAgIGNhc2UgRkVN
T1JQSE9MT0dZX09QRVJBVE9SX0VST0RFOgpAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgU1ZHUHJv
cGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4gewogICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBm
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIE1vcnBob2xvZ3lPcGVy
YXRvciBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
dmFsdWUgPT0gImVyb2RlIikKICAgICAgICAgICAgIHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfRVJPREU7CkBAIC02MiwxMiArNjIsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmFkaXVz
KGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCiAgICAgU3RyaW5nIGluMSgpIGNvbnN0
IHsgcmV0dXJuIG1faW4xLT5jdXJyZW50VmFsdWUoKTsgfQotICAgIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUgc3ZnT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3N2Z09wZXJhdG9yLT5jdXJyZW50
VmFsdWU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4oKTsgfQorICAgIE1vcnBob2xvZ3lPcGVyYXRv
ciBtb3JwaG9sb2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX21vcnBob2xvZ3lPcGVyYXRv
ci0+Y3VycmVudFZhbHVlPE1vcnBob2xvZ3lPcGVyYXRvcj4oKTsgfQogICAgIGZsb2F0IHJhZGl1
c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1gtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxv
YXQgcmFkaXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWS0+Y3VycmVudFZhbHVlKCk7IH0K
IAogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiBpbjFBbmltYXRlZCgpIHsgcmV0dXJuIG1faW4xOyB9
Ci0gICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0
dXJuIG1fc3ZnT3BlcmF0b3I7IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBtb3JwaG9s
b2d5T3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9CiAg
ICAgU1ZHQW5pbWF0ZWROdW1iZXImIHJhZGl1c1hBbmltYXRlZCgpIHsgcmV0dXJuIG1fcmFkaXVz
WDsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiByYWRpdXNZQW5pbWF0ZWQoKSB7IHJldHVybiBt
X3JhZGl1c1k7IH0KIApAQCAtODEsMTEgKzgxLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJv
b2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQ
dHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3By
b3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9p
bjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07Ci0gICAgUmVmPFNWR0FuaW1h
dGVkRW51bWVyYXRpb24+IG1fc3ZnT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpj
cmVhdGUodGhpcywgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKSB9OworICAgIFJlZjxTVkdB
bmltYXRlZEVudW1lcmF0aW9uPiBtX21vcnBob2xvZ3lPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51
bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpIH07CiAg
ICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3JhZGl1c1ggeyBTVkdBbmltYXRlZE51bWJlcjo6
Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3JhZGl1c1kgeyBT
VkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsCmluZGV4IGEyYzE4MWYyZTYzN2NkMzkwOThl
YmU2OWU2MDk4YWJlM2MzODVjZDEuLjJkMjFmMmExZDg4OGQwMmVjMTc5ZGYxMGUyZGU0M2ZjNjUy
OTdkNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5p
ZGwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVkdfTU9SUEhP
TE9HWV9PUEVSQVRPUl9ESUxBVEUgICA9IDI7CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZH
QW5pbWF0ZWRTdHJpbmcgICAgICBpbjE7Ci0gICAgW0ltcGxlbWVudGVkQXM9c3ZnT3BlcmF0b3Jd
IHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOworICAg
IFtJbXBsZW1lbnRlZEFzPW1vcnBob2xvZ3lPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNW
R0FuaW1hdGVkRW51bWVyYXRpb24gb3BlcmF0b3I7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNW
R0FuaW1hdGVkTnVtYmVyICAgICAgcmFkaXVzWDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZH
QW5pbWF0ZWROdW1iZXIgICAgICByYWRpdXNZOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9m
ZnNldEVsZW1lbnQuY3BwCmluZGV4IDAzODI2OGI4OWIyZjE5ZjliZTU2ODczOWQxMjMwMzU0MTAw
YTVlZTcuLjg3YmEzODdiMzUwNTgxZWZmZDQzNmQwNWQzYjQwZTRjNTZlZTQ3NzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCkBAIC04MSwxNiArODEsMTMgQEAg
dm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJC
dWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9
IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEg
PSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGVmZmVjdCA9
IEZFT2Zmc2V0OjpjcmVhdGUoZmlsdGVyLCBkeCgpLCBkeSgpKTsKLSAgICBlZmZlY3QtPmlucHV0
RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7
IEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSksIHsgeyAqaW5wdXQxIH0gfSB9OwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKaW5kZXggNTc0NzNkY2M3MmRi
NjdiMTI1ZWEyZWQ0NjVlMzViNTczNzA0OWJlZS4uZmZhMWMxNjgzMzdmNDRjOTUyMDFiNzJlODhj
MzFmYzViZTVmMWEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaApA
QCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9p
bnRMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVs
ZW1lbnQuY3BwCmluZGV4IDlmZjg0NzMzOGExYjZhNTVmY2RiODIxYTA5ZjBhY2MzYzIwN2VhODEu
LjY0MDY0ZjVmNjgwODQ5NGNmN2FiMTBkZDAxOWMwYWFkNjk4OWNkYWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKQEAgLTIyLDcgKzIyLDYgQEAK
IAogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUG9pbnRMaWdodFNv
dXJjZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKQEAgLTM5LDE5ICszOCwxOSBAQCBS
ZWY8U1ZHRkVQb2ludExpZ2h0RWxlbWVudD4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6Y3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVQb2lu
dExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+
IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImIGJ1
aWxkZXIpIGNvbnN0CitSZWY8TGlnaHRTb3VyY2U+IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6Omxp
Z2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIEZsb2F0UG9p
bnQzRCBwb3NpdGlvbjsKLSAgICBpZiAoYnVpbGRlci5wcmltaXRpdmVVbml0cygpID09IFNWR1Vu
aXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAgICAgICBGbG9h
dFJlY3QgcmVmZXJlbmNlQm94ID0gYnVpbGRlci50YXJnZXRCb3VuZGluZ0JveCgpOwotICAgICAg
ICAKLSAgICAgICAgcG9zaXRpb24uc2V0WChyZWZlcmVuY2VCb3gueCgpICsgeCgpICogcmVmZXJl
bmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkg
KyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotCi0gICAgICAgIC8vIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2Vu
dGFnZQotICAgICAgICBwb3NpdGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVy
ZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkg
LyBzcXJ0T2ZUd29GbG9hdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBvc2l0aW9uID0gRmxvYXRQ
b2ludDNEKHgoKSwgeSgpLCB6KCkpOworLy8gICAgaWYgKGZpbHRlci5wcmltaXRpdmVVbml0cygp
ID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgeworLy8g
ICAgICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3ggPSBmaWx0ZXIudGFyZ2V0Qm91bmRpbmdCb3go
KTsKKy8vCisvLyAgICAgICAgcG9zaXRpb24uc2V0WChyZWZlcmVuY2VCb3gueCgpICsgeCgpICog
cmVmZXJlbmNlQm94LndpZHRoKCkpOworLy8gICAgICAgIHBvc2l0aW9uLnNldFkocmVmZXJlbmNl
Qm94LnkoKSArIHkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7CisvLworLy8gICAgICAgIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRy
aWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmll
d3BvcnRfcGVyY2VudGFnZQorLy8gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFu
RGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhY
TWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vICAgIH0gZWxzZQorLy8gICAgICAg
IHBvc2l0aW9uID0gRmxvYXRQb2ludDNEKHgoKSwgeSgpLCB6KCkpOwogICAgIAogICAgIHJldHVy
biBQb2ludExpZ2h0U291cmNlOjpjcmVhdGUocG9zaXRpb24pOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgKaW5kZXggMzNhNWJkNzQ5MjA4MjhjOTk4NjQ1
YjcyMmY3MmE3NDVlNDhkYTc5ZS4uYzQ3YTYwNTZlODg3ZGEwODFhMDRmM2I5NTJiZGU0NWJjZGE5
ZDlmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oCkBA
IC0zMCw3ICszMCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVQb2ludExpZ2h0RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIFJlZjxMaWdodFNv
dXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNv
bnN0IG92ZXJyaWRlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFNWR0ZFUG9pbnRMaWdodEVs
ZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0RWxlbWVudCkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggOWI3Y2U0
MGFiOTcxNmFlNGYzMzVmNTRiMjRjZGE0NTlhODQyOWE1OS4uN2RmNjYyYzY3MzgxYjAxZmE0NWFl
ZmU2ZmI1ZmI1ODAzYmU3Mjg1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcApAQCAtOTYsNyArOTYsNyBAQCBib29sIFNWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJF
ZmZlY3QqIGVmZmVjdAogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVu
ZGVyZXIoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKICAgICAgICAgQ29sb3IgY29sb3Ig
PSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+
c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0gICAgICAgIHJldHVybiBzcGVj
dWxhckxpZ2h0aW5nLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHNw
ZWN1bGFyTGlnaHRpbmctPnNldENvbG9yKGNvbG9yKTsKICAgICB9CiAgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQogICAgICAgICByZXR1cm4gc3BlY3VsYXJM
aWdodGluZy0+c2V0U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKQEAgLTEwNSw3ICsxMDUs
NyBAQCBib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6c3BlY3VsYXJFeHBvbmVudEF0dHIpCiAgICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5n
LT5zZXRTcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQoKSk7CiAKLSAgICBhdXRvJiBs
aWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihzcGVjdWxhckxpZ2h0aW5nLT5s
aWdodFNvdXJjZSgpKTsKKyAgICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRT
b3VyY2UmPihzcGVjdWxhckxpZ2h0aW5nLT5zb3VyY2UoKSk7CiAgICAgY29uc3QgU1ZHRkVMaWdo
dEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVt
ZW50KHRoaXMpOwogICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwogCkBAIC0xNjAsMjggKzE2MCwy
NSBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdodAogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0g
YnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OworCisgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgIFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVu
dDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxl
bWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgICAgICByZXR1cm4geyB9Owor
CisgICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoYnVpbGRl
cik7CiAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAg
ICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKICAgICBDb2xv
ciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJl
bmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKIAotICAgIGF1dG8g
ZWZmZWN0ID0gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFj
ZVNjYWxlKCksIHNwZWN1bGFyQ29uc3RhbnQoKSwgc3BlY3VsYXJFeHBvbmVudCgpLCBrZXJuZWxV
bml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSk7
Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVm
ZmVjdDsKKyAgICByZXR1cm4geyBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb2xvciwgc3Vy
ZmFjZVNjYWxlKCksIHNwZWN1bGFyQ29uc3RhbnQoKSwgc3BlY3VsYXJFeHBvbmVudCgpLCBrZXJu
ZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNl
KSksIHsgeyAqaW5wdXQxIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAppbmRleCA4OTdiOGRlMTU2ZDFjNzlhMWQz
ZmQ4YjMxMThlMmFiNjNiNDdiMTQ2Li4yMzViYTEyOGIyNmRhZGNiZDc0NmFhYmZmZmZmZWMxNTJk
ZDIxZDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRp
bmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVy
dHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7
IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKaW5kZXggZDZkYTMxMDY0Y2IxYjM3ZThjYzkzODc0
ZWE0YWE5Y2YyZGZiZmZlZS4uNzQxMzFmOTM0ZmNjMjEyYzBjZTgyNWE2MDY2MDI2OTMxY2MzM2Fj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKQEAg
LTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlICJTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCIKIAogI2lu
Y2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTM5LDI3ICszOCwyNyBAQCBSZWY8U1ZHRkVT
cG90TGlnaHRFbGVtZW50PiBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiB0YQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFU3BvdExpZ2h0RWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFU3Bv
dExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29u
c3QKK1JlZjxMaWdodFNvdXJjZT4gU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShj
b25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKIHsKICAgICBGbG9hdFBvaW50M0QgcG9zaXRp
b247CiAgICAgRmxvYXRQb2ludDNEIHBvaW50c0F0OwotCi0gICAgaWYgKGJ1aWxkZXIucHJpbWl0
aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGJ1aWxkZXIudGFyZ2V0Qm91
bmRpbmdCb3goKTsKLSAgICAgICAgCi0gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94
LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKLSAgICAgICAgcG9zaXRpb24uc2V0
WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKLSAgICAg
ICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0
WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0
c192aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlk
aWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5t
YXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLQotICAgICAgICBwb2ludHNBdC5z
ZXRYKHJlZmVyZW5jZUJveC54KCkgKyBwb2ludHNBdFgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgp
KTsKLSAgICAgICAgcG9pbnRzQXQuc2V0WShyZWZlcmVuY2VCb3gueSgpICsgcG9pbnRzQXRZKCkg
KiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcv
VFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3
dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAg
ICAgICAgcG9pbnRzQXQuc2V0Wihwb2ludHNBdFooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVy
ZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkg
LyBzcXJ0T2ZUd29GbG9hdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcG9zaXRpb24gPSBGbG9h
dFBvaW50M0QoeCgpLCB5KCksIHooKSk7Ci0gICAgICAgIHBvaW50c0F0ID0gRmxvYXRQb2ludDNE
KHBvaW50c0F0WCgpLCBwb2ludHNBdFkoKSwgcG9pbnRzQXRaKCkpOwotICAgIH0KKy8vCisvLyAg
ICBpZiAoZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9U
WVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7CisvLyAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJv
eCA9IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgpOworLy8KKy8vICAgICAgICBwb3NpdGlvbi5z
ZXRYKHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAg
ICAgICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94
LmhlaWdodCgpKTsKKy8vICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRl
cnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIv
U1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb3Np
dGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNv
cm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7
CisvLworLy8gICAgICAgIHBvaW50c0F0LnNldFgocmVmZXJlbmNlQm94LngoKSArIHBvaW50c0F0
WCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOworLy8gICAgICAgIHBvaW50c0F0LnNldFkocmVm
ZXJlbmNlQm94LnkoKSArIHBvaW50c0F0WSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKKy8v
ICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50
TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1s
I1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb2ludHNBdC5zZXRaKHBvaW50
c0F0WigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCks
IHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vICAg
IH0gZWxzZSB7CisvLyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHoo
KSk7CisvLyAgICAgICAgcG9pbnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRYKCksIHBvaW50
c0F0WSgpLCBwb2ludHNBdFooKSk7CisvLyAgICB9CiAKICAgICByZXR1cm4gU3BvdExpZ2h0U291
cmNlOjpjcmVhdGUocG9zaXRpb24sIHBvaW50c0F0LCBzcGVjdWxhckV4cG9uZW50KCksIGxpbWl0
aW5nQ29uZUFuZ2xlKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
U3BvdExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxl
bWVudC5oCmluZGV4IDNmNzcxN2MxMjY1YzRmMzFmNTMwODg2OGQ0N2M5Nzg3OTdhNzMyMTEuLjA3
NDM2Y2MwMTY2M2I1MjE1NjI0YTZlMTJkNzE2MDY4MWU5NjUyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBTVkdGRVNwb3RMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRl
ckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291
cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIH07CiBzdGF0aWNf
YXNzZXJ0KHNpemVvZihTVkdGRVNwb3RMaWdodEVsZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0
RWxlbWVudCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKaW5kZXgg
MzliZGNjNzczNTk2NjUwMzZlMWFlNzQ3NjEyZWFkNmY5YWMzNzM3MC4uOThmMzdhZjg4NmI0ZmRl
NmFkZGZjNzc4ZDc5Mzk1MTIyOWFiM2ZjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFVGlsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVF
bGVtZW50LmNwcApAQCAtNzAsMTYgKzcwLDEzIEBAIHZvaWQgU1ZHRkVUaWxlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVRpbGVFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QK
K3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNv
bnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAg
ICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRVRpbGU6OmNyZWF0ZShmaWx0ZXIpOwotICAgIGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7Cisg
ICAgcmV0dXJuIHsgRkVUaWxlOjpjcmVhdGUoKSwgeyAqaW5wdXQxIH0gfTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKaW5kZXggNDViMzI3MTg1MWQ3ZmMwZGMyZDNi
Y2M4NzlhMjJkYzQyYTMzYTkxZi4uYjBjMTdjYzI2NTBiMjU5YTIzMTU0MmI4YjU1ODlmMGQzNTYy
MzllZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCkBAIC00Miw3ICs0Miw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJF
ZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
UHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxT
VkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMp
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKaW5k
ZXggMTE1NjExMTlkODNlM2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0ZC4uMWQ3MjMxMGIzZTgz
OTgyOTY2OWM2OWRjNzY0YmU3YmEyMDc4ODExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcApAQCAtOTIsNyArOTIsNyBAQCBib29sIFNWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVm
ZmVjdCwgY29ucwogewogICAgIEZFVHVyYnVsZW5jZSogdHVyYnVsZW5jZSA9IHN0YXRpY19jYXN0
PEZFVHVyYnVsZW5jZSo+KGVmZmVjdCk7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0
eXBlQXR0cikKLSAgICAgICAgcmV0dXJuIHR1cmJ1bGVuY2UtPnNldFR5cGUodHlwZSgpKTsKKyAg
ICAgICAgcmV0dXJuIHR1cmJ1bGVuY2UtPnNldFR1cmJ1bGVuY2VUeXBlKHR5cGUoKSk7CiAgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpCiAgICAgICAgIHJldHVy
biB0dXJidWxlbmNlLT5zZXRTdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlcygpKTsKICAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmJhc2VGcmVxdWVuY3lBdHRyKQpAQCAtMTE3LDExICsxMTcsMTEg
QEAgdm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIGlmIChiYXNlRnJlcXVlbmN5WCgp
IDwgMCB8fCBiYXNlRnJlcXVlbmN5WSgpIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKGZpbHRlciwgdHlwZSgpLCBiYXNlRnJlcXVl
bmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGls
ZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOworICAgICAgICByZXR1cm4geyB9OworICAg
IHJldHVybiB7IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKHR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgoKSwg
YmFzZUZyZXF1ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBzZWVkKCksIHN0aXRjaFRpbGVzKCkgPT0g
U1ZHX1NUSVRDSFRZUEVfU1RJVENIKSwgeyB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCmluZGV4IGJmOWRhMjJhZDQyZTQxMGExMDQzNWUw
YTQwZTM0MjY3NzY5ZTE5OGEuLjA4MDNjMWUyOTJiMzhkODMwMTdlZWI5MTA2MTEwODBhMjFkZWM3
NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaApAQCAt
MTE5LDcgKzExOSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0
QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBv
dmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVy
RWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9iYXNlRnJlcXVl
bmN5WCB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAppbmRleCA1NTc4YjUxOWEzNjIyYmQ3MDZhZDI3YmZlNGM2
MDAzOTE0ODU4Y2EwLi45YzQzMTEzNGE4NzcwNGYwNjQ5ZDkyMmJhOTcxNjM2ZGQyNWUxYzk2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw2IEBA
CiAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgogI2luY2x1ZGUgIlNWR0Vs
ZW1lbnRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUg
IlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlNWR05h
bWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
Y3BwCmluZGV4IGZmNTIyMzA5NDY2YjA0MGJlZjA4OWQxNTdiMzg2ZGZmYmIwNWM2MTkuLjc3MWE0
MTZlZjBlZjA1NTgyZDcyOTgxYTMwY2M5ZDYyZTY1MjlmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
Y3BwCkBAIC0yNSw5ICsyNSw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oIgotI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkz
LDIyICs5MSw2IEBAIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpj
aGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoCiAgICAgaW52YWxpZGF0ZSgpOwog
fQogCi12b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRh
cmRBdHRyaWJ1dGVzKEZpbHRlckVmZmVjdCogZmlsdGVyRWZmZWN0KSBjb25zdAotewotICAgIEFT
U0VSVChmaWx0ZXJFZmZlY3QpOwotICAgIGlmICghZmlsdGVyRWZmZWN0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCi0gICAgICAgIGZp
bHRlckVmZmVjdC0+c2V0SGFzWCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVz
Ojp5QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWSh0cnVlKTsKLSAgICBpZiAo
aGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3Qt
PnNldEhhc1dpZHRoKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdo
dEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc0hlaWdodCh0cnVlKTsKLX0KLQog
UmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJl
bmRlclRyZWVQb3NpdGlvbiYpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oCmluZGV4IGM5OGIxM2VkOTYyNzZhZjllMTRmNjQyODExYTZmZDc0Njc3MmFjYTcu
LjcyNWE4NzAxNTk4ZmFmZmE2ZWRiYWIwMTYxMzAwNzRhZTU0NzJmZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmgKQEAgLTM2LDEyICszNiw2IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CiBjbGFzcyBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMgOiBwdWJsaWMgU1ZHRWxlbWVudCB7
CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMpOwogcHVibGljOgotICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRl
ckVmZmVjdCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3QgPSAwOwotICAgIC8vIFJldHVybnMg
dHJ1ZSwgaWYgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG9uZS4KLSAg
ICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKLQogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQ
cm9wZXJ0eU93bmVyUmVnaXN0cnk8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LCBTVkdFbGVtZW50PjsKIAogICAgIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB4KCkgY29uc3QgeyBy
ZXR1cm4gbV94LT5jdXJyZW50VmFsdWUoKTsgfQpAQCAtNTYsNiArNTAsMTAgQEAgcHVibGljOgog
ICAgIFNWR0FuaW1hdGVkTGVuZ3RoJiBoZWlnaHRBbmltYXRlZCgpIHsgcmV0dXJuIG1faGVpZ2h0
OyB9CiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIHJlc3VsdEFuaW1hdGVkKCkgeyByZXR1cm4gbV9y
ZXN1bHQ7IH0KIAorICAgIHZpcnR1YWwgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0Piwg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0
ID0gMDsKKyAgICAvLyBSZXR1cm5zIHRydWUsIGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50
IGZyb20gdGhlIG9sZCBvbmUuCisgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJp
YnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CisKIHByb3RlY3RlZDoK
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKaW5kZXggMzg1YWYyOTA4NDhhM2QwYjgzZjEyYWM5NjE5
ZTZiZjk2YzlmMjM5Ni4uN2VlODljYTcyMGY4YTAwYWFiNGJmMjZhZDAwMGRiYWVjMTdlMzhhYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDEzMCArMjQsODEgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGRUltYWdlLmgiCiAKLSNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRw
dXQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNWR0VsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiU1ZHVVJJ
UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJ
bWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVB
c3BlY3RSYXRpbykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQotICAg
ICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1fcHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFz
cGVjdFJhdGlvKQorUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZShTb3VyY2VJbWFnZSYmIHNv
dXJjZUltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNw
ZWN0UmF0aW8pCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShXVEZNb3ZlKHNv
dXJjZUltYWdlKSwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwogfQogCi1GRUltYWdlOjpGRUltYWdl
KEZpbHRlciYgZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVm
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8p
Ci0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKLSAgICAsIG1fdHJlZVNj
b3BlKCZ0cmVlU2NvcGUpCi0gICAgLCBtX2hyZWYoaHJlZikKK0ZFSW1hZ2U6OkZFSW1hZ2UoU291
cmNlSW1hZ2UmJiBzb3VyY2VJbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
JiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFSW1hZ2Up
CisgICAgLCBtX3NvdXJjZUltYWdlKFdURk1vdmUoc291cmNlSW1hZ2UpKQogICAgICwgbV9wcmVz
ZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7CiB9CiAKLVJlZjxGRUltYWdl
PiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJbWFnZT4g
aW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RS
YXRpbykKK0Zsb2F0UmVjdCBGRUltYWdlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
SW1hZ2UoZmlsdGVyLCBpbWFnZSwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwotfQorICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKIAotUmVmPEZFSW1hZ2U+IEZF
SW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiBmaWx0ZXIsIFRyZWVTY29wZSYg
dHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRUltYWdlKGZpbHRlciwgdHJlZVNjb3BlLCBocmVmLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7
Ci19Ci0KLXZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewotICAg
IEZsb2F0UmVjdCBwYWludFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJl
Y3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0Owot
ICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIHNyY1JlY3Quc2V0U2l6ZShtX2ltYWdlLT5zaXpl
KCkpOwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChwYWludFJl
Y3QsIHNyY1JlY3QpOwotICAgIH0gZWxzZSBpZiAoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBy
ZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRl
VHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSk7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50
ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5p
dGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KHBhaW50UmVjdCkpOwotfQotCi1SZW5kZXJFbGVtZW50KiBGRUltYWdlOjpyZWZlcmVu
Y2VkUmVuZGVyZXIoKSBjb25zdAotewotICAgIGlmICghbV90cmVlU2NvcGUpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRF
bGVtZW50RnJvbUlSSVN0cmluZyhtX2hyZWYsICptX3RyZWVTY29wZSk7Ci0gICAgaWYgKCFpczxT
VkdFbGVtZW50Pih0YXJnZXQuZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJldHVybiB0YXJnZXQuZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBpZiAoYXV0byogaW1hZ2Ug
PSBXVEY6OmdldF9pZjxSZWY8SW1hZ2U+PihtX3NvdXJjZUltYWdlKSkgeworICAgICAgICBhdXRv
IHNyY1JlY3QgPSBGbG9hdFJlY3QgeyB7IH0sICgqaW1hZ2UpLT5zaXplKCkgfTsKKyAgICAgICAg
bV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoZHJhd2luZ1JlY3QsIHNyY1JlY3Qp
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvUHJpbWl0aXZlU3VicmVn
aW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZFSW1hZ2U6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFSW1hZ2U6OmFwcGx5U29mdHdhcmUoRmls
dGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVy
KiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCk7Ci0gICAgaWYgKCFtX2ltYWdl
ICYmICFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRkVJbWFnZSByZXN1bHRz
IGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKLSAgICBzZXRSZXN1
bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLQotICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0
byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOwogICAgIGlmICghcmVzdWx0SW1h
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGZpbHRlcigp
LmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdCA9IHJl
c3VsdC5wcmltaXRpdmVTdWJyZWdpb24oKTsKICAgICBGbG9hdFJlY3Qgc3JjUmVjdDsKLSAgICBp
ZiAocmVuZGVyZXIpCi0gICAgICAgIHNyY1JlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9y
bSgpLm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwot
ICAgIGVsc2UgewotICAgICAgICBzcmNSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9p
bWFnZS0+c2l6ZSgpKTsKLSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJl
Y3QoZGVzdFJlY3QsIHNyY1JlY3QpOwotICAgIH0KLQotICAgIEludFBvaW50IHBhaW50TG9jYXRp
b24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgZGVzdFJlY3QubW92ZSgt
cGFpbnRMb2NhdGlvbi54KCksIC1wYWludExvY2F0aW9uLnkoKSk7Ci0KLSAgICBhdXRvJiBjb250
ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIGlmIChyZW5kZXJlcikgewotICAg
ICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtID0gZmlsdGVyKCku
YWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0oYWJzb2x1dGVU
cmFuc2Zvcm0pOwotCi0gICAgICAgIFJlZlB0ciBjb250ZXh0Tm9kZSA9IGRvd25jYXN0PFNWR0Vs
ZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOwotICAgICAgICBpZiAoY29udGV4dE5vZGUtPmhh
c1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAgICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0
aENvbnRleHQoY29udGV4dE5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgRmxvYXRTaXplIHZpZXdw
b3J0U2l6ZTsKIAotICAgICAgICAgICAgLy8gSWYgd2UncmUgcmVmZXJlbmNpbmcgYW4gZWxlbWVu
dCB3aXRoIHBlcmNlbnRhZ2UgdW5pdHMsIGVnLiA8cmVjdCB3aXRoPSIzMCUiPiB0aG9zZSB2YWx1
ZXMgd2VyZSByZXNvbHZlZCBhZ2FpbnN0IHRoZSB2aWV3cG9ydC4KLSAgICAgICAgICAgIC8vIEJ1
aWxkIHVwIGEgdHJhbnNmb3JtYXRpb24gdGhhdCBtYXBzIGZyb20gdGhlIHZpZXdwb3J0IHNwYWNl
IHRvIHRoZSBmaWx0ZXIgcHJpbWl0aXZlIHN1YnJlZ2lvbi4KLSAgICAgICAgICAgIGlmIChsZW5n
dGhDb250ZXh0LmRldGVybWluZVZpZXdwb3J0KHZpZXdwb3J0U2l6ZSkpCi0gICAgICAgICAgICAg
ICAgY29udGV4dC5jb25jYXRDVE0obWFrZU1hcEJldHdlZW5SZWN0cyhGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCB2aWV3cG9ydFNpemUpLCBkZXN0UmVjdCkpOworICAgIGF1dG8gZHJhd1NvdXJjZUlt
YWdlID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxJbWFnZT4mIGlt
YWdlKSB7CisgICAgICAgICAgICBzcmNSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBpbWFnZS0+c2l6
ZSgpIH07CisgICAgICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChk
cmF3aW5nUmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICBkcmF3aW5nUmVjdCA9IGdlb21ldHJ5
LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoZHJhd2luZ1JlY3QsIHJlc3VsdC5k
cmF3aW5nUmVjdCgpKTsKKyAgICAgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlKGltYWdlLCBkcmF3aW5nUmVjdCwgc3JjUmVjdCk7CisgICAgICAgIH0sCisgICAgICAgIFsm
XShjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikgeworICAgICAgICAgICAgc3Jj
UmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfTsKKyAg
ICAgICAgICAgIGRyYXdpbmdSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRD
b29yZGluYXRlcyhkcmF3aW5nUmVjdCwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOworICAgICAgICAg
ICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRy
YXdpbmdSZWN0LCBzcmNSZWN0KTsKICAgICAgICAgfQorICAgICk7CiAKLSAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKLSAgICAgICAgU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6cmVuZGVyU3VidHJlZVRvQ29udGV4dChjb250ZXh0LCAqcmVuZGVyZXIsIGNvbnRlbnRU
cmFuc2Zvcm1hdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgV1RGOjp2aXNpdChk
cmF3U291cmNlSW1hZ2UsIG1fc291cmNlSW1hZ2UpOworICAgIHJldHVybiB0cnVlOworfQorCitG
aWx0ZXJSZXN1bHQqIEZFSW1hZ2U6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRy
eSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAoreworICAgIGlm
IChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAKLSAgICBjb250ZXh0LmRyYXdJbWFnZSgqbV9pbWFnZSwgZGVzdFJl
Y3QsIHNyY1JlY3QpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyB9LCBudWxs
cHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQogCi1UZXh0U3RyZWFtJiBGRUltYWdlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUg
cmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
LSAgICBGbG9hdFNpemUgaW1hZ2VTaXplOwotICAgIGlmIChtX2ltYWdlKQotICAgICAgICBpbWFn
ZVNpemUgPSBtX2ltYWdlLT5zaXplKCk7Ci0gICAgZWxzZSBpZiAoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpKQotICAgICAgICBpbWFnZVNpemUgPSBlbmNsb3Np
bmdJbnRSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKS5zaXpl
KCk7CisgICAgYXV0byBzb3VyY2VJbWFnZVNpemUgPSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAg
ICBbJl0oY29uc3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsgcmV0dXJuIGltYWdlLT5zaXplKCk7IH0s
CisgICAgICAgIFsmXShjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikgeyByZXR1
cm4gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7IH0KKyAgICApOworCisgICAgRmxvYXRTaXpl
IGltYWdlU2l6ZSA9IFdURjo6dmlzaXQoc291cmNlSW1hZ2VTaXplLCBtX3NvdXJjZUltYWdlKTsK
KwogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlSW1hZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgaW1h
Z2Utc2l6ZT1cIiIgPDwgaW1hZ2VTaXplLndpZHRoKCkgPDwgIngiIDw8IGltYWdlU2l6ZS5oZWln
aHQoKSA8PCAiXCJdXG4iOwogICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBkdW1wIGFsc28gb2Jq
ZWN0IHJldHVybmVkIGJ5IFNWR0ZFSW1hZ2U6OmltYWdlKCkgPwogICAgIHJldHVybiB0czsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAppbmRl
eCBhYzE2MGVkY2U3YzBlMGEwNjdiZGVmYmQ3MDdmMmFiZTU1OTA4MWI2Li5lYmY5MzRhNDIwYzg0
ZGM1YzljOTUwY2M4NDFhMmViNjIzMzM3MmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNywzNiArMjgsMzEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVu
dDsKIGNsYXNzIEltYWdlOwotY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFRyZWVTY29wZTsK
IAogY2xhc3MgRkVJbWFnZSBmaW5hbCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlV2l0aEltYWdlKEZpbHRlciYsIFJlZlB0cjxJ
bWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwotICAgIHN0YXRpYyBS
ZWY8RkVJbWFnZT4gY3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImLCBUcmVlU2NvcGUmLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICB1
c2luZyBTb3VyY2VJbWFnZSA9IFZhcmlhbnQ8UmVmPEltYWdlPiwgUmVmPEltYWdlQnVmZmVyPj47
CisKKyAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZShTb3VyY2VJbWFnZSYmLCBjb25zdCBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIH5G
RUltYWdlKCkgPSBkZWZhdWx0OwotICAgIEZFSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgRkVJbWFnZShGaWx0ZXIm
LCBUcmVlU2NvcGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWUmKTsKKyAgICBGRUltYWdlKFNvdXJjZUltYWdlJiYsIGNvbnN0IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZSYpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuICJGRUltYWdlIjsgfQogCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJF
ZmZlY3RUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZUltYWdlOyB9
CisgICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkKKyAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9CisKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgUmVuZGVyRWxlbWVudCogcmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3Q7CisgICAgRmls
dGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3Qg
RmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgZmluYWw7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpIGZpbmFsOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IGZpbmFsOworICAgIGJv
b2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CiAKLSAgICAvLyBtX3RyZWVTY29wZSB3aWxs
IG5ldmVyIGJlIGEgZGFuZ2xpbmcgcmVmZXJlbmNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk5MjQzCi0gICAgVHJlZVNjb3BlKiBtX3RyZWVTY29wZSB7IG51
bGxwdHIgfTsKLSAgICBTdHJpbmcgbV9ocmVmOworICAgIFNvdXJjZUltYWdlIG1fc291cmNlSW1h
Z2U7CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIG1fcHJlc2VydmVBc3BlY3RSYXRp
bzsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXIuY3BwCmluZGV4IDlhOTRhNDYwMzU4NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJiN2JjZTcu
LjAzMmY0N2E5YzNlNTVjNWI3ZDUyNWI4YzA0NTk5MjdjMzMzOWQ1ZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMiw2ICsy
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDI5ICsyMywxMTYgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKIAorI2luY2x1ZGUg
IkZpbHRlck91dHB1dC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRl
ICJTb3VyY2VBbHBoYS5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1TVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2lu
Z1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCi0gICAgOiBGaWx0ZXIoYWJz
b2x1dGVUcmFuc2Zvcm0pCi0gICAgLCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihhYnNv
bHV0ZVNvdXJjZURyYXdpbmdSZWdpb24pCi0gICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdl
dEJvdW5kaW5nQm94KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQotICAgICwg
bV9lZmZlY3RCQm94TW9kZShlZmZlY3RCQm94TW9kZSkKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0Zp
bHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICBG
aWx0ZXJFZmZlY3RWZWN0b3IgYnVpbHRpbkVmZmVjdHM7CisgICAgaWYgKHByZXZpb3VzRWZmZWN0
KQorICAgICAgICBidWlsdGluRWZmZWN0cy5hcHBlbmQoUmVmPEZpbHRlckVmZmVjdD4oKnByZXZp
b3VzRWZmZWN0KSk7CisgICAgZWxzZQorICAgICAgICBidWlsdGluRWZmZWN0cy5hcHBlbmQoU291
cmNlR3JhcGhpYzo6Y3JlYXRlKCkpOworICAgIGJ1aWx0aW5FZmZlY3RzLmFwcGVuZChTb3VyY2VB
bHBoYTo6Y3JlYXRlKCkpOworCisgICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyOworICAgIGF1
dG8gW2ZpbHRlckVmZmVjdHMsIGV4cHJlc3Npb25dID0gYnVpbGRlci5idWlsZEVmZmVjdHMoZmls
dGVyRWxlbWVudCwgYnVpbHRpbkVmZmVjdHMpOworICAgIGlmIChmaWx0ZXJFZmZlY3RzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gY3JlYXRlKFdURk1v
dmUoYnVpbHRpbkVmZmVjdHMpLCBXVEZNb3ZlKGZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKGV4cHJl
c3Npb24pLCByZW5kZXJpbmdNb2RlKTsKK30KKworUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVy
OjpjcmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhw
cmVzc2lvbiYmIGV4cHJlc3Npb24sIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKK3sKKyAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3IgYnVpbHRpbkVmZmVjdHMgPSB7IFNvdXJjZUdyYXBoaWM6OmNy
ZWF0ZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkgfTsKKyAgICByZXR1cm4gY3JlYXRlKFdURk1v
dmUoYnVpbHRpbkVmZmVjdHMpLCBXVEZNb3ZlKGZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKGV4cHJl
c3Npb24pLCByZW5kZXJpbmdNb2RlKTsKK30KKworUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVy
OjpjcmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9yJiYgYnVpbHRpbkVmZmVjdHMsIEZpbHRlckVmZmVj
dFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJiBleHByZXNzaW9u
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTVkdGaWx0ZXIoV1RGTW92ZShidWlsdGluRWZmZWN0cyksIFdURk1vdmUoZmlsdGVyRWZmZWN0
cyksIFdURk1vdmUoZXhwcmVzc2lvbiksIHJlbmRlcmluZ01vZGUpKTsKK30KKworU1ZHRmlsdGVy
OjpTVkdGaWx0ZXIoRmlsdGVyRWZmZWN0VmVjdG9yJiYgYnVpbHRpbkVmZmVjdHMsIEZpbHRlckVm
ZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJiBleHByZXNz
aW9uLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCisgICAgOiBGaWx0ZXIocmVuZGVyaW5n
TW9kZSwgVHlwZTo6U1ZHRmlsdGVyKQorICAgICwgbV9idWlsdGluRWZmZWN0cyhXVEZNb3ZlKGJ1
aWx0aW5FZmZlY3RzKSkKKyAgICAsIG1fZmlsdGVyRWZmZWN0cyhXVEZNb3ZlKGZpbHRlckVmZmVj
dHMpKQorICAgICwgbV9leHByZXNzaW9uKFdURk1vdmUoZXhwcmVzc2lvbikpCit7CisgICAgQVNT
RVJUKG1fYnVpbHRpbkVmZmVjdHMuc2l6ZSgpID09IDIpOworICAgIEFTU0VSVCghbV9maWx0ZXJF
ZmZlY3RzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFtX2V4cHJlc3Npb24uaXNFbXB0eSgpKTsK
K30KKworUmVmPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyOjppbmRleGVkRWZmZWN0KEZpbHRlckVm
ZmVjdDo6VHlwZSB0eXBlLCB1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBtX2Fic29sdXRl
RmlsdGVyUmVnaW9uID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJSZWdpb24pOwor
ICAgIGlmICh0eXBlID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYykKKyAgICAg
ICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHNbMF07CisKKyAgICBpZiAodHlwZSA9PSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQorICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0
c1sxXTsKKworICAgIEFTU0VSVChpbmRleCA8IG1fZmlsdGVyRWZmZWN0cy5zaXplKCkpOworICAg
IHJldHVybiBtX2ZpbHRlckVmZmVjdHNbaW5kZXhdOwogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVy
OjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0CitSZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXI6Omxhc3RFZmZlY3QoKSBjb25zdAogewotICAgIGlmICht
X2VmZmVjdEJCb3hNb2RlKQotICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdC
b3guc2l6ZSgpOworICAgIGlmIChtX2V4cHJlc3Npb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBhdXRvIFt0eXBlLCBpbmRleCwgbGV2ZWxdID0gbV9leHByZXNzaW9u
Lmxhc3QoKTsKKyAgICByZXR1cm4gaW5kZXhlZEVmZmVjdCh0eXBlLCBpbmRleCk7Cit9CisKK0Zp
bHRlclJlc3VsdCogU1ZHRmlsdGVyOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVy
UmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgaWYgKCFsYXN0RWZmZWN0KCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFzdGFjay5pc0VtcHR5KCkpCisgICAg
ICAgIHNvdXJjZUltYWdlID0gc3RhY2sudGFrZUxhc3QoKS0+aW1hZ2VCdWZmZXIoKTsKIAotICAg
IHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzaXplKSAqIG1fYWJzb2x1
dGVGaWx0ZXJSZWdpb24uc2l6ZSgpIC8gbV9maWx0ZXJSZWdpb24uc2l6ZSgpOworICAgIGlmIChh
dXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyAgICBmb3IgKGF1dG8gW3R5cGUsIGluZGV4LCBsZXZlbF0gOiBtX2V4
cHJlc3Npb24pIHsKKyAgICAgICAgYXV0byBlZmZlY3QgPSBpbmRleGVkRWZmZWN0KHR5cGUsIGlu
ZGV4KTsKKyAgICAgICAgYXV0byBib3VuZGFyeVNldCA9IGdlb21ldHJ5LmJvdW5kYXJ5U2V0KHR5
cGUsIGluZGV4KTsKKworICAgICAgICBhdXRvIHJlc3VsdCA9IGVmZmVjdC0+YXBwbHkob3V0cHV0
LCBzdGFjaywgc291cmNlSW1hZ2UsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CisgICAgICAgIGlm
ICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgc3RhY2su
YXBwZW5kKHsgKnJlc3VsdCB9KTsKKyAgICAgICAgb3V0cHV0LnJlc3VsdHMoKS5hZGQoV1RGTW92
ZShlZmZlY3QpLCBSZWY8RmlsdGVyUmVzdWx0PigqcmVzdWx0KSk7CisgICAgfQorCisgICAgQVNT
RVJUKHN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIHJlc3VsdCA9IHN0YWNrLnRha2VMYXN0
KCk7CisgICAgcmVzdWx0LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkpOworICAgIHJldHVybiAmcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAotUmVmPFNW
R0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0
ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24s
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmls
dGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKQorVGV4dFN0cmVhbSYgU1ZHRmlsdGVyOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlv
biByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdG
aWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFy
Z2V0Qm91bmRpbmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBhdXRv
IGVuZCA9IG1fZXhwcmVzc2lvbi5yZW5kKCk7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2V4cHJl
c3Npb24ucmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBhdXRvIFt0eXBlLCBp
bmRleCwgbGV2ZWxdID0gKml0OworICAgICAgICBpZiAodHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OlNvdXJjZUFscGhhKQorICAgICAgICAgICAgKytpdDsKKworICAgICAgICBhdXRvIGVmZmVj
dCA9IGluZGV4ZWRFZmZlY3QodHlwZSwgaW5kZXgpOworICAgICAgICBUZXh0U3RyZWFtOjpJbmRl
bnRTY29wZSBpbmRlbnRTY29wZSh0cywgbGV2ZWwpOworICAgICAgICBlZmZlY3QtPmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKaW5kZXggODA5MzE0NmQ2NGFmODg4NWJjM2Rh
NDkzMDJmNWFlYTBmYjE3MDBjZi4uOTlmYTMxMDFlNjY5Yzg0ZGNkNGZhOWYzOTdlYzZlMGVlZTA0
ODEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNDEgKzIxLDQ0
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMu
aD4KKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RWZWN0b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJF
eHByZXNzaW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU1ZHRmlsdGVyRWxl
bWVudDsKK2NsYXNzIFNWR0ZpbHRlckdlb21ldHJ5OworCiBjbGFzcyBTVkdGaWx0ZXIgZmluYWwg
OiBwdWJsaWMgRmlsdGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKwogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8U1ZHRmlsdGVyPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0Jiwg
Ym9vbCk7CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVt
ZW50JiwgUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIEZpbHRl
ckVmZmVjdCogcHJldmlvdXNFZmZlY3QgPSBudWxscHRyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRl
ckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJiwgUmVuZGVyaW5nTW9kZSk7CisgICAgc3Rh
dGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGlu
RWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhw
cmVzc2lvbiYmLCBSZW5kZXJpbmdNb2RlKTsKIAotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25J
blVzZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0gICAg
RmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYWJzb2x1dGVG
aWx0ZXJSZWdpb247IH0KKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0KCkgY29u
c3Q7CiAKLSAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSkg
Y29uc3QgZmluYWw7CisgICAgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBmaWx0ZXJFZmZlY3Rz
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RzOyB9CisgICAgY29uc3QgU1ZHRmlsdGVy
RXhwcmVzc2lvbiYgZXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbjsgfQog
Ci0gICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
YWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOyB9Ci0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5k
aW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQorcHJpdmF0ZToK
KyAgICBTVkdGaWx0ZXIoRmlsdGVyRWZmZWN0VmVjdG9yJiYgYnVpbHRpbkVmZmVjdHMsIEZpbHRl
ckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJiwgUmVu
ZGVyaW5nTW9kZSk7CiAKLSAgICBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIFJlZjxGaWx0ZXJFZmZlY3Q+IGluZGV4ZWRFZmZlY3QoRmlsdGVyRWZm
ZWN0OjpUeXBlLCB1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgU1ZHRmls
dGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RC
Qm94TW9kZSk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JikgY29uc3QgZmluYWw7CisKKyAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7
CiAKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxv
YXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVGaWx0
ZXJSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOwotICAgIGJvb2wgbV9lZmZl
Y3RCQm94TW9kZTsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9idWlsdGluRWZmZWN0czsKKyAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9maWx0ZXJFZmZlY3RzOworICAgIFNWR0ZpbHRlckV4cHJl
c3Npb24gbV9leHByZXNzaW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikKLSAgICBzdGF0aWMg
Ym9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRl
ci5pc1NWR0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIudHlwZSgpID09IFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi50
eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0ZpbHRlcjsgfQogU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRleCA5NmYzYTgwNTA0
Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li5hY2FkMDQ2ZDgyNzJhZmFiOWM3Njg4ZTk5
NDkzMWRlOTQyMWQ5NjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw4NyArMjEsMTM1IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogCi0jaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVy
RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cy5oIgogI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5o
IgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIoUmVm
UHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYykKK3N0ZDo6dHVwbGU8RmlsdGVyRWZmZWN0
VmVjdG9yLCBTVkdGaWx0ZXJFeHByZXNzaW9uPiBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVj
dHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgY29uc3QgRmlsdGVyRWZmZWN0VmVj
dG9yJiBidWlsdGluRWZmZWN0cykKIHsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VH
cmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMpOwotICAgIG1fYnVpbHRpbkVmZmVj
dHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKnNv
dXJjZUdyYXBoaWMpKTsKLSAgICBhZGRCdWlsdGluRWZmZWN0cygpOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7CisgICAgaWYgKGZpbHRlckVsZW1l
bnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBzZXR1cEJ1aWx0aW5FZmZlY3RzKGJ1aWx0aW5FZmZlY3RzKTsKKworICAg
IEZpbHRlckVmZmVjdHNJbnB1dHMgZWZmZWN0c0lucHV0czsKKyAgICBpZiAoIWJ1aWxkRWZmZWN0
cyhmaWx0ZXJFbGVtZW50LCBlZmZlY3RzSW5wdXRzKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIGlmICghYnVpbGRFeHByZXNzaW9uKGVmZmVjdHNJbnB1dHMpKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgcmV0dXJuIHsgV1RGTW92ZShtX2ZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKG1f
ZXhwcmVzc2lvbikgfTsKK30KKwordm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpzZXR1cEJ1aWx0aW5F
ZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgYnVpbHRpbkVmZmVjdHMpCit7CisgICAg
bV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBidWlsdGlu
RWZmZWN0c1swXSk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVj
dE5hbWUoKSwgYnVpbHRpbkVmZmVjdHNbMV0pOworfQorCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VHcmFwaGljKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9i
dWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpKTsKIH0KIAotdm9p
ZCBTVkdGaWx0ZXJCdWlsZGVyOjphZGQoY29uc3QgQXRvbVN0cmluZyYgaWQsIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGVmZmVjdCkKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6
OnNvdXJjZUFscGhhKCkgY29uc3QKIHsKLSAgICBpZiAoaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fbGFzdEVmZmVjdCA9IGVmZmVjdDsKKyAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQo
U291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSk7Cit9CisKK3ZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6
YWRkTmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgUmVmPEZpbHRlckVmZmVjdD4g
ZWZmZWN0KQoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBtX2xhc3RFZmZl
Y3QgPSBlZmZlY3QucHRyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9i
dWlsdGluRWZmZWN0cy5jb250YWlucyhpZCkpCisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29u
dGFpbnMobmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVj
dDsKLSAgICBtX25hbWVkRWZmZWN0cy5zZXQoaWQsIG1fbGFzdEVmZmVjdCk7CisgICAgbV9sYXN0
RWZmZWN0ID0gZWZmZWN0LnB0cigpOworICAgIG1fbmFtZWRFZmZlY3RzLnNldChuYW1lLCBXVEZN
b3ZlKGVmZmVjdCkpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVy
OjpnZXRFZmZlY3RCeUlkKGNvbnN0IEF0b21TdHJpbmcmIGlkKSBjb25zdAorUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6bmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYg
bmFtZSkgY29uc3QKIHsKLSAgICBpZiAoaWQuaXNFbXB0eSgpKSB7CisgICAgaWYgKG5hbWUuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGlmIChtX2xhc3RFZmZlY3QpCiAgICAgICAgICAgICByZXR1cm4g
bV9sYXN0RWZmZWN0OwogCi0gICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChTb3Vy
Y2VHcmFwaGljOjplZmZlY3ROYW1lKCkpOworICAgICAgICByZXR1cm4gc291cmNlR3JhcGhpYygp
OwogICAgIH0KIAotICAgIGlmIChtX2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKGlkKSkKLSAgICAg
ICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KGlkKTsKKyAgICBpZiAobV9idWlsdGluRWZm
ZWN0cy5jb250YWlucyhuYW1lKSkKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0
KG5hbWUpOwogCi0gICAgcmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChpZCk7CisgICAgcmV0dXJu
IG1fbmFtZWRFZmZlY3RzLmdldChuYW1lKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjph
cHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBlZmZl
Y3QsIFJlbmRlck9iamVjdCogb2JqZWN0KQorYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVm
ZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgRmlsdGVyRWZmZWN0c0lucHV0
cyYgZWZmZWN0c0lucHV0cykKIHsKLSAgICAvLyBUaGUgZWZmZWN0IG11c3QgYmUgYSBuZXdseSBj
cmVhdGVkIGZpbHRlciBlZmZlY3QuCi0gICAgQVNTRVJUKCFtX2VmZmVjdFJlZmVyZW5jZXMuY29u
dGFpbnMoZWZmZWN0KSk7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgIW1fZWZmZWN0UmVuZGVyZXIu
Y29udGFpbnMob2JqZWN0KSk7Ci0gICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChlZmZlY3QsIEZp
bHRlckVmZmVjdFNldCgpKTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0g
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5zaXplKCk7Ci0KLSAgICAvLyBJdCBpcyBub3QgcG9zc2li
bGUgdG8gYWRkIHRoZSBzYW1lIHZhbHVlIHRvIGEgc2V0IHR3aWNlLgotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1iZXJPZklucHV0RWZmZWN0czsgKytpKQotICAgICAgICBlZmZlY3RS
ZWZlcmVuY2VzKGVmZmVjdC0+aW5wdXRFZmZlY3QoaSkpLmFkZChlZmZlY3QuZ2V0KCkpOwotCi0g
ICAgLy8gSWYgb2JqZWN0IGlzIG51bGwsIHRoYXQgbWVhbnMgdGhlIGVsZW1lbnQgaXNuJ3QgYXR0
YWNoZWQgZm9yIHNvbWUKLSAgICAvLyByZWFzb24sIHdoaWNoIGluIHR1cm4gbWVhbiB0aGF0IGNl
cnRhaW4gdHlwZXMgb2YgaW52YWxpZGF0aW9uIHdpbGwgbm90Ci0gICAgLy8gd29yayAodGhlIExh
eW91dE9iamVjdCAtPiBGaWx0ZXJFZmZlY3QgbWFwcGluZyB3aWxsIG5vdCBiZSBkZWZpbmVkKS4K
LSAgICBpZiAob2JqZWN0KQotICAgICAgICBtX2VmZmVjdFJlbmRlcmVyLmFkZChvYmplY3QsIGVm
ZmVjdC5nZXQoKSk7CisgICAgZWZmZWN0c0lucHV0cy5zZXQoKnNvdXJjZUFscGhhKCksIEZpbHRl
ckVmZmVjdFZlY3RvciB7ICpzb3VyY2VHcmFwaGljKCkgfSk7CisKKyAgICBmb3IgKGF1dG8mIGVm
ZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7CisgICAgICAgIGF1dG8gW2VmZmVjdCwgaW5wdXRz
XSA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoKnRoaXMpOworICAgICAgICBpZiAoIWVmZmVjdCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9T
UEFDRV9MSU5FQVJfU1JHQikKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKSAm
JiBlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVy
cG9sYXRpb25GaWx0ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IpCisgICAg
ICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpMaW5lYXJTUkdCKCkpOworI2VuZGlmCisgICAgCisgICAgICAgIGVmZmVjdHNJbnB1dHMu
c2V0KHsgKmVmZmVjdCB9LCBXVEZNb3ZlKGlucHV0cykpOworICAgICAgICBhZGROYW1lZEVmZmVj
dChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCB7ICplZmZlY3QgfSk7CisKKyAgICAgICAgbV9maWx0
ZXJFZmZlY3RzLmFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJFZmZlY3RzKCkK
K2Jvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uKGNvbnN0IFJlZjxGaWx0ZXJF
ZmZlY3Q+JiBlZmZlY3QsIGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmIGVmZmVjdHNJbnB1dHMs
IEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIHVuc2lnbmVkIGxldmVsKQogewotICAgIG1fbGFz
dEVmZmVjdCA9IG51bGxwdHI7Ci0gICAgbV9uYW1lZEVmZmVjdHMuY2xlYXIoKTsKLSAgICBtX2Vm
ZmVjdFJlZmVyZW5jZXMuY2xlYXIoKTsKLSAgICBtX2VmZmVjdFJlbmRlcmVyLmNsZWFyKCk7Ci0g
ICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKKyAgICBpZiAoc3RhY2suY29udGFpbnMoZWZmZWN0KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVmZmVjdC0+dHlwZSgpID09IEZpbHRl
ckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYykKKyAgICAgICAgbV9leHByZXNzaW9uLmluc2Vy
dCgwLCB7IGVmZmVjdC0+dHlwZSgpLCAwLCBsZXZlbCB9KTsKKyAgICBlbHNlIGlmIChlZmZlY3Qt
PnR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQorICAgICAgICBtX2V4
cHJlc3Npb24uaW5zZXJ0KDAsIHsgZWZmZWN0LT50eXBlKCksIDEsIGxldmVsIH0pOworICAgIGVs
c2UgeworICAgICAgICBBU1NFUlQobV9maWx0ZXJFZmZlY3RzLmNvbnRhaW5zKGVmZmVjdCkpOwor
ICAgICAgICBtX2V4cHJlc3Npb24uaW5zZXJ0KDAsIHsgZWZmZWN0LT50eXBlKCksIG1fZmlsdGVy
RWZmZWN0cy5maW5kKGVmZmVjdCksIGxldmVsIH0pOworICAgIH0KKworICAgIHN0YWNrLmFwcGVu
ZChlZmZlY3QpOworCisgICAgZm9yIChhdXRvJiBpbnB1dEVmZmVjdCA6IGVmZmVjdHNJbnB1dHMu
Z2V0KGVmZmVjdCkpIHsKKyAgICAgICAgaWYgKCFidWlsZEV4cHJlc3Npb24oaW5wdXRFZmZlY3Qs
IGVmZmVjdHNJbnB1dHMsIHN0YWNrLCBsZXZlbCArIDEpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
c3RhY2subGFzdCgpLnB0cigpID09IGVmZmVjdC5wdHIoKSk7CisKKyAgICBzdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xl
YXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQorYm9vbCBTVkdGaWx0ZXJC
dWlsZGVyOjpidWlsZEV4cHJlc3Npb24oY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0
c0lucHV0cykKIHsKLSAgICBpZiAoIWVmZmVjdC0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKKyAgICBpZiAoIW1fbGFzdEVmZmVjdCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBlZmZl
Y3RSZWZlcmVuY2VzKGVmZmVjdCkpCi0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShyZWZl
cmVuY2UpOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBzdGFjazsKKyAgICByZXR1cm4gYnVpbGRF
eHByZXNzaW9uKHsgKm1fbGFzdEVmZmVjdCB9LCBlZmZlY3RzSW5wdXRzLCBzdGFjaywgMCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRleCBjNzdhZTA4YmFjNjVj
M2MyY2ZjODk3NGZhMzNlNzY0NjBjZTk3ZmE3Li45OGU2ZTg4YmQ5YjdhYzkxNGUwNGQyMjZkNjBl
MzcwYTkxYzU0MGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29t
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNjggKzIxLDQzIEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgi
CisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVjdG9yLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRXhw
cmVzc2lvbi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0
cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBTVkdGaWx0ZXJFbGVtZW50
OwogCiBjbGFzcyBTVkdGaWx0ZXJCdWlsZGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEhhc2hTZXQ8RmlsdGVyRWZmZWN0Kj4gRmlsdGVyRWZm
ZWN0U2V0OworICAgIFNWR0ZpbHRlckJ1aWxkZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBTVkdGaWx0
ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOworICAgIHN0ZDo6
dHVwbGU8RmlsdGVyRWZmZWN0VmVjdG9yLCBTVkdGaWx0ZXJFeHByZXNzaW9uPiBidWlsZEVmZmVj
dHMoU1ZHRmlsdGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgYnVpbHRpbkVm
ZmVjdHMpOwogCi0gICAgdm9pZCBzZXRUYXJnZXRCb3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3Qm
IHIpIHsgbV90YXJnZXRCb3VuZGluZ0JveCA9IHI7IH0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91
bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9Ci0gICAgCi0g
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpbWl0aXZlVW5pdHM7IH0KLSAgICB2b2lkIHNldFByaW1pdGl2ZVVuaXRzKFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGUgdW5pdHMpIHsgbV9wcmltaXRpdmVVbml0cyA9IHVuaXRzOyB9
CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYg
bmFtZSkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRy
PEZpbHRlckVmZmVjdD4pOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZ2V0RWZmZWN0QnlJ
ZChjb25zdCBBdG9tU3RyaW5nJikgY29uc3Q7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RWZmZWN0LmdldCgpOyB9Ci0KLSAgICB2b2lkIGFwcGVu
ZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhSZWZQdHI8RmlsdGVyRWZmZWN0PiYmLCBSZW5kZXJP
YmplY3QqKTsKLQotICAgIGlubGluZSBGaWx0ZXJFZmZlY3RTZXQmIGVmZmVjdFJlZmVyZW5jZXMo
RmlsdGVyRWZmZWN0KiBlZmZlY3QpCi0gICAgewotICAgICAgICAvLyBPbmx5IGFsbG93ZWQgZm9y
IGVmZmVjdHMgYmVsb25ncyB0byB0aGlzIGJ1aWxkZXIuCi0gICAgICAgIEFTU0VSVChtX2VmZmVj
dFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7Ci0gICAgICAgIHJldHVybiBtX2VmZmVjdFJl
ZmVyZW5jZXMuZmluZChlZmZlY3QpLT52YWx1ZTsKLSAgICB9Citwcml2YXRlOgorICAgIHVzaW5n
IEZpbHRlckVmZmVjdHNJbnB1dHMgPSBIYXNoTWFwPFJlZjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PjsKIAotICAgIC8vIFJlcXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0
cmlidXRlcyBvZiBhIGZpbHRlciBkdXJpbmcgYW4gc3ZnQXR0cmlidXRlQ2hhbmdlZC4KLSAgICBp
bmxpbmUgRmlsdGVyRWZmZWN0KiBlZmZlY3RCeVJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0
KSB7IHJldHVybiBtX2VmZmVjdFJlbmRlcmVyLmdldChvYmplY3QpOyB9CisgICAgdm9pZCBzZXR1
cEJ1aWx0aW5FZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgYnVpbHRpbkVmZmVjdHMp
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMoKSBjb25zdDsKKyAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VBbHBoYSgpIGNvbnN0OwogCi0gICAgdm9pZCBjbGVh
ckVmZmVjdHMoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3Qq
KTsKKyAgICB2b2lkIGFkZE5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIFJlZjxG
aWx0ZXJFZmZlY3Q+KTsKKyAgICBib29sIGJ1aWxkRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50Jiwg
RmlsdGVyRWZmZWN0c0lucHV0cyYpOwogCi1wcml2YXRlOgotICAgIGlubGluZSB2b2lkIGFkZEJ1
aWx0aW5FZmZlY3RzKCkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9idWls
dGluRWZmZWN0cy52YWx1ZXMoKSkKLSAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQo
ZWZmZWN0LCBGaWx0ZXJFZmZlY3RTZXQoKSk7Ci0gICAgfQorICAgIGJvb2wgYnVpbGRFeHByZXNz
aW9uKGNvbnN0IFJlZjxGaWx0ZXJFZmZlY3Q+JiwgY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYs
IEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIHVuc2lnbmVkIGxldmVsKTsKKyAgICBib29sIGJ1
aWxkRXhwcmVzc2lvbihjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJik7CiAKLSAgICBIYXNoTWFw
PEF0b21TdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBtX2J1aWx0aW5FZmZlY3RzOwotICAg
IEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4+IG1fbmFtZWRFZmZlY3Rz
OwotICAgIC8vIFRoZSB2YWx1ZSBpcyBhIGxpc3QsIHdoaWNoIGNvbnRhaW5zIHRob3NlIGZpbHRl
ciBlZmZlY3RzLAotICAgIC8vIHdoaWNoIGRlcGVuZHMgb24gdGhlIGtleSBmaWx0ZXIgZWZmZWN0
LgotICAgIEhhc2hNYXA8UmVmUHRyPEZpbHRlckVmZmVjdD4sIEZpbHRlckVmZmVjdFNldD4gbV9l
ZmZlY3RSZWZlcmVuY2VzOwotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmlsdGVyRWZmZWN0
Kj4gbV9lZmZlY3RSZW5kZXJlcjsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9maWx0ZXJFZmZl
Y3RzOworICAgIFNWR0ZpbHRlckV4cHJlc3Npb24gbV9leHByZXNzaW9uOwogCisgICAgSGFzaE1h
cDxBdG9tU3RyaW5nLCBSZWY8RmlsdGVyRWZmZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKKyAgICBI
YXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsKICAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZlY3Q7Ci0gICAgRmxvYXRSZWN0IG1fdGFy
Z2V0Qm91bmRpbmdCb3g7Ci0gICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3ByaW1pdGl2
ZVVuaXRzIHsgU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFIH07CiB9
OwotICAgIAorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYmI1MDJhZGE5NjI3MGU1MDE5MzJjNmMwN2I1ZjQ3OTU2MjQwM2I0NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4
cHJlc3Npb24uaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vz
aW5nIFNWR0ZpbHRlckV4cHJlc3Npb24gPSBWZWN0b3I8c3RkOjp0dXBsZTxGaWx0ZXJFZmZlY3Q6
OlR5cGUsIHVuc2lnbmVkLCB1bnNpZ25lZD4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJH
ZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJHZW9tZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGE3MjkxNjg3YzY5MmY1ZjgyZTE4YmI3MDk1NTMz
YzVlMjRkZmRjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyR2VvbWV0cnkuaCIKKworI2luY2x1ZGUgIkVsZW1lbnRJ
dGVyYXRvci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBo
YS5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyR2VvbWV0cnk+IFNWR0ZpbHRlckdlb21ldHJ5Ojpj
cmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0U2l6ZSYgcmVzb2x1dGlvbikKK3sKKyAgICBhdXRvIHByaW1pdGl2ZVVu
aXRzID0gZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpOworICAgIGF1dG8gZ2VvbWV0cnkg
PSBtYWtlVW5pcXVlPFNWR0ZpbHRlckdlb21ldHJ5PihmaWx0ZXJSZWdpb24sIHNvdXJjZUltYWdl
UmVjdCwgdGFyZ2V0Qm91bmRpbmdCb3gsIHByaW1pdGl2ZVVuaXRzLCBhYnNvbHV0ZVRyYW5zZm9y
bSwgcmVzb2x1dGlvbik7CisgICAgaWYgKCFnZW9tZXRyeSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBnZW9tZXRyeS0+YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMoZmlsdGVy
RWxlbWVudCk7CisgICAgcmV0dXJuIGdlb21ldHJ5OworfQorCitTVkdGaWx0ZXJHZW9tZXRyeTo6
U1ZHRmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5n
Qm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzLCBBZmZpbmVUcmFu
c2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYgcmVzb2x1dGlvbikKKyAg
ICA6IEZpbHRlckdlb21ldHJ5KGZpbHRlclJlZ2lvbiwgc291cmNlSW1hZ2VSZWN0KQorICAgICwg
bV90YXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCkKKyAgICAsIG1fcHJpbWl0aXZl
VW5pdHMocHJpbWl0aXZlVW5pdHMpCisgICAgLCBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRl
VHJhbnNmb3JtKQorICAgICwgbV9yZXNvbHV0aW9uKHJlc29sdXRpb24pCit7Cit9CisKK3ZvaWQg
U1ZHRmlsdGVyR2VvbWV0cnk6OmJ1aWxkRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKFNWR0ZpbHRl
ckVsZW1lbnQmIGZpbHRlckVsZW1lbnQpCit7CisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50
IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihm
aWx0ZXJFbGVtZW50KSkgeworICAgICAgICBhdXRvIGJvdW5kYXJpZXMgPSBTVkdMZW5ndGhDb250
ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cz4oJmVmZmVjdEVsZW1lbnQsIG1fcHJpbWl0aXZlVW5pdHMsIG1fdGFyZ2V0Qm91bmRpbmdCb3gp
OworICAgICAgICAKKyAgICAgICAgT3B0aW9uU2V0PEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFncz4g
ZmxhZ3M7CisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6
eEF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6
SGFzWCk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVz
Ojp5QXR0cikpCisgICAgICAgICAgICBmbGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdz
OjpIYXNZKTsKKworICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OndpZHRoQXR0cikpCisgICAgICAgICAgICBmbGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6
OkZsYWdzOjpIYXNXaWR0aCk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFzQXR0cmli
dXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKKyAgICAgICAgICAgIGZsYWdzLmFkZChGaWx0ZXJC
b3VuZGFyeVNldDo6RmxhZ3M6Okhhc0hlaWdodCk7CisKKyAgICAgICAgbV9GaWx0ZXJFZmZlY3RC
b3VuZGFyeVNldHMuYXBwZW5kKHsgYm91bmRhcmllcywgZmxhZ3MgfSk7CisgICAgfQorfQorCitG
aWx0ZXJCb3VuZGFyeVNldCBTVkdGaWx0ZXJHZW9tZXRyeTo6Ym91bmRhcnlTZXQoRmlsdGVyRWZm
ZWN0OjpUeXBlIHR5cGUsIHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIGlmICh0eXBlID09
IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYyB8fCB0eXBlID09IEZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlQWxwaGEpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgaWYg
KGluZGV4ID49IG1fRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzLnNpemUoKSkgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIG1fRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzW2luZGV4XTsKK30KKworRmxvYXRS
ZWN0IFNWR0ZpbHRlckdlb21ldHJ5Ojpjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIGFic29sdXRlUmVjdCA9IG1fYWJz
b2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsKKyAgICBhYnNvbHV0ZVJlY3Quc2NhbGUobV9y
ZXNvbHV0aW9uKTsKKyAgICByZXR1cm4gYWJzb2x1dGVSZWN0OworfQorCitGbG9hdFNpemUgU1ZH
RmlsdGVyR2VvbWV0cnk6OmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRT
aXplJiBzaXplKSBjb25zdAoreworICAgIHJldHVybiBzaXplICogbV9yZXNvbHV0aW9uICogRmxv
YXRTaXplKG1fYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIG1fYWJzb2x1dGVUcmFuc2Zvcm0u
eVNjYWxlKCkpOworfQorCitGbG9hdFNpemUgU1ZHRmlsdGVyR2VvbWV0cnk6OnJlc29sdmVUb0Zp
bHRlckNvb3JkaW5hdGVzKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAo
bV9wcmltaXRpdmVVbml0cyA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9V
TkRJTkdCT1gpCisgICAgICAgIHJldHVybiBzaXplICogbV90YXJnZXRCb3VuZGluZ0JveC5zaXpl
KCk7CisgICAgcmV0dXJuIHNpemU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdlb21l
dHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9t
ZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNlOGVmZmE4NmQzZjQxZWYyZDhmYzlkYmI1ODA2ZjZlNGVjYTBh
MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJHZW9tZXRyeS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUg
IlNWR1VuaXRUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbVN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKKworY2xh
c3MgU1ZHRmlsdGVyR2VvbWV0cnkgOiBwdWJsaWMgRmlsdGVyR2VvbWV0cnkgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHRmlsdGVyR2VvbWV0cnk+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVU
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYgcmVzb2x1dGlvbik7CisKKyAgICBTVkdGaWx0ZXJH
ZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMsIEFmZmluZVRyYW5zZm9ybSBhYnNv
bHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRTaXplJiByZXNvbHV0aW9uKTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIGJ1aWxkRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKFNWR0ZpbHRlckVsZW1lbnQm
KTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fYWJzb2x1dGVUcmFuc2Zvcm07IH0KKyAgICBGbG9hdFNpemUgcmVzb2x1
dGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVzb2x1dGlvbjsgfQorCisgICAgRmls
dGVyQm91bmRhcnlTZXQgYm91bmRhcnlTZXQoRmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25lZCBp
bmRleCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFJlY3QgY29udmVydFRvQWJzb2x1dGVD
b29yZGluYXRlcyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0
U2l6ZSBjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0
IG92ZXJyaWRlOworICAgIAorICAgIEZsb2F0U2l6ZSByZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRl
cyhjb25zdCBGbG9hdFNpemUmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0UmVjdCBtX3Rh
cmdldEJvdW5kaW5nQm94OworCisgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3ByaW1p
dGl2ZVVuaXRzOworICAgIFZlY3RvcjxGaWx0ZXJCb3VuZGFyeVNldD4gbV9GaWx0ZXJFZmZlY3RC
b3VuZGFyeVNldHM7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsK
KyAgICBGbG9hdFNpemUgbV9yZXNvbHV0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcAppbmRleCAwZDQ4ODY3YTk4ZjZlNDMxMjgy
ZjMyMDRkZTUwZDZmMjA5NDAzNzQzLi5hNmQzNzYwMGY2MTZhOTMyOTRjNmYzM2UyZjQ5Mjc0MzM5
YjU4OGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcApAQCAtMTk4Niw3ICsxOTg2
LDcgQEAgeXlyZWR1Y2U6CiAjbGluZSA0MTkgIldlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55Igog
ICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhw
cmVzc2lvbj4+PiBwcmVkaWNhdGVMaXN0KCh5eXZzcFsoMikgLSAoMildLmV4cHJlc3Npb25WZWN0
b3IpKTsKLSAgICAgICAgKHl5dmFsLmV4cHJlc3Npb24pID0gbmV3IEZpbHRlcihzdGQ6OnVuaXF1
ZV9wdHI8RXhwcmVzc2lvbj4oKHl5dnNwWygxKSAtICgyKV0uZXhwcmVzc2lvbikpLCBXVEZNb3Zl
KCpwcmVkaWNhdGVMaXN0KSk7CisgICAgICAgICh5eXZhbC5leHByZXNzaW9uKSA9IG5ldyBYUGF0
aDo6RmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigoeXl2c3BbKDEpIC0gKDIpXS5l
eHByZXNzaW9uKSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKICAgICA7fQogICAgIGJyZWFr
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkKaW5kZXggNzc2OThmYTc2NGY3YTE1YTQ1YmM1
YzBlNWQyZDY3NzUxYjFiZTcwZi4uZGQ3OGE1YmQ5ZjgwNjczNzAyYmY0NGM2MDc2ZGQyZDJkMDBk
MTAwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55CisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueQpAQCAtNDE1LDcgKzQxNSw3IEBAIEZp
bHRlckV4cHI6CiAgICAgUHJpbWFyeUV4cHIgUHJlZGljYXRlTGlzdAogICAgIHsKICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+PiBwcmVk
aWNhdGVMaXN0KCQyKTsKLSAgICAgICAgJCQgPSBuZXcgRmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxF
eHByZXNzaW9uPigkMSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKKyAgICAgICAgJCQgPSBu
ZXcgWFBhdGg6OkZpbHRlcihzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4oJDEpLCBXVEZNb3Zl
KCpwcmVkaWNhdGVMaXN0KSk7CiAgICAgfQogICAgIDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
CmluZGV4IGZjY2VkN2Q1MWEyMTIyYTYwMDQ4OTllMTllMzgwY2JkNTg1NzIxZjEuLmFhOTljNjdl
NDgyNGZiNDI5YTUyNjU2YmQxMDIwZjY4ZmRkNzdlMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRl
ICJEaXNwbGF5TGlzdFJlYWRlckhhbmRsZS5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5UmVm
ZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyLmgiCkBAIC01MjcsNiArNTI5LDM1IEBAIHZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXJXaXRo
UXVhbGlmaWVkSWRlbnRpCiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUpKTsK
IH0KIAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1h
Z2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIElQQzo6Rmls
dGVyUmVmZXJlbmNlJiYgZmlsdGVyUmVmZXJlbmNlLCBJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJl
bmNlJiYgZ2VvbWV0cnlSZWZlcmVuY2UsCisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFy
ZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZmlsdGVyID0gZmlsdGVyUmVmZXJl
bmNlLnRha2VGaWx0ZXIoKTsKKyAgICBhdXRvIGdlb21ldHJ5ID0gZ2VvbWV0cnlSZWZlcmVuY2Uu
dGFrZUdlb21ldHJ5KCk7CisgICAgCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxl
OworICAgIFsmXSgpIHsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3Vy
Y2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBpbWFnZSA9IGltYWdl
QnVmZmVyLT5maWx0ZXJlZEltYWdlKGZpbHRlciwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgICAg
ICBpZiAoIWltYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGltYWdlU2l6
ZSA9IGltYWdlLT5zaXplKCk7CisgICAgICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShpbWFnZVNpemUpLCB7IGltYWdlQnVmZmVyLT5jb2xv
clNwYWNlKCkgfSk7CisgICAgICAgIGlmICghYml0bWFwKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIWNvbnRleHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZSgqaW1hZ2UsIEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGJpdG1hcC0+Y3Jl
YXRlSGFuZGxlKGhhbmRsZSk7CisgICAgfSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1v
dmUoaGFuZGxlKSk7Cit9CisKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVOYXRp
dmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgbmF0aXZlSW1hZ2VSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAg
Ly8gSW1tZWRpYXRlbHkgdHVybiB0aGUgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyICh3aGlj
aCBpcyBlcnJvci1wcm9uZSkgdG8gYSBRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCA0MTlhZTZkMTZmNzJkN2Q1OTMxNDFmZTIyOTZh
Y2ZlNjlhMWM1OTBjLi42MzQ5ZDhmMzQzMzRkOTJkYjFjNDQ3ZDY4OTQ3YWJlODJmMTcxMmMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTYwLDYgKzYwLDExIEBAIGVudW0gY2xhc3MgUmVuZGVy
aW5nTW9kZSA6IGJvb2w7CiAKIH0KIAorbmFtZXNwYWNlIElQQyB7CitjbGFzcyBGaWx0ZXJSZWZl
cmVuY2U7CitjbGFzcyBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTsKK30KKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlOwpAQCAtMTQzLDYgKzE0OCw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlBy
ZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJik7CiAgICAgdm9pZCBnZXREYXRhRm9y
SW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0U2hhcmVh
YmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYpOworICAgIHZvaWQgZ2V0RmlsdGVyZWRJbWFn
ZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgSVBD
OjpGaWx0ZXJSZWZlcmVuY2UmJiwgSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZSYmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmKTsKICAgICB2
b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJl
ZjxXZWJDb3JlOjpGb250PiYmKTsKICAgICB2b2lkIGRlbGV0ZUFsbEZvbnRzKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IDFlZjU2ZGNjOTc2Mjc0ZTM1NmFi
MjJiNGVhNGU3MWJjZmFjMGIwZGYuLjI0YmUzNmY2MTZiYTdmM2U4MjE4MTFiNjI0M2E4NTJjMTI2
Zjg2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0zMiw2
ICszMiw3IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgewogICAgIEdldERh
dGFVUkxGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxTdHJpbmcpIFN5bmNocm9ub3Vz
CiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0b3I8dWludDhfdD4gZGF0YSkgU3lu
Y2hyb25vdXMKICAgICBHZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGVudW06dWludDhfdCBXZWJD
b3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSAtPiAoV2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCisgICAgR2V0RmlsdGVy
ZWRJbWFnZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBpbWFnZUJ1ZmZlciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyLCBJUEM6OkZpbHRlckdl
b21ldHJ5UmVmZXJlbmNlIGdlb21ldHJ5KSAtPiAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCiAgICAgQ2FjaGVOYXRpdmVJbWFnZShXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKICAgICBDYWNoZUZvbnQoSVBD
OjpGb250UmVmZXJlbmNlIGZvbnQpCiAgICAgRGVsZXRlQWxsRm9udHMoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCBiL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWY5YmVhZGUxYmEwNzkwY2NkZDY5ZmNiZjAzOGI4Y2M0Nzc3YTJiNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlckdlb21ldHJ5UmVmZXJl
bmNlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbHRlckdlb21ldHJ5Lmg+CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZSB7CitwdWJsaWM6CisgICAgRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2Uoc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5KQorICAgICAg
ICA6IG1fZ2VvbWV0cnkoV1RGTW92ZShnZW9tZXRyeSkpCisgICAgeworICAgIH0KKworICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeT4gdGFrZUdlb21ldHJ5KCkgeyBy
ZXR1cm4gV1RGTW92ZShtX2dlb21ldHJ5KTsgfQorCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2U+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiBtX2dlb21ldHJ5OworfTsKKworfSAvLyBuYW1l
c3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJS
ZWZlcmVuY2UuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43NTE0OGUwOWUxN2M3NjEwYmE4OTg3ZDUwZWFkYjcwZTgxNzk2YzVh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVm
ZXJlbmNlLmNwcApAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50
Q29kZXIuaCIKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQ1NTRmlsdGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRU9mZnNldC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsdGVyRWZmZWN0VmVjdG9yLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9TVkdGaWx0ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NWR0ZpbHRlckV4cHJlc3Npb24u
aD4KKworbmFtZXNwYWNlIElQQyB7CisKK0ZpbHRlclJlZmVyZW5jZTo6RmlsdGVyUmVmZXJlbmNl
KFJlZjxXZWJDb3JlOjpGaWx0ZXI+JiYgZmlsdGVyKQorICAgIDogbV9maWx0ZXIoV1RGTW92ZShm
aWx0ZXIpKQoreworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVGaWx0ZXJFZmZlY3QoY29uc3QgV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QsIEVuY29kZXImIGVuY29kZXIpCit7CisgICAgQVNT
RVJUKGVmZmVjdC50eXBlKCkgPj0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1pbmlt
dW0gJiYgZWZmZWN0LnR5cGUoKSA8PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTWF4
aW11bSk7CisKKyAgICBlbmNvZGVyIDw8IGVmZmVjdC50eXBlKCk7CisKKyAgICBzd2l0Y2ggKGVm
ZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RUJsZW5kOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29sb3JN
YXRyaXg6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25l
bnRUcmFuc2ZlcjoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNv
bXBvc2l0ZToKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbnZv
bHZlTWF0cml4OgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlm
ZnVzZUxpZ2h0aW5nOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
RGlzcGxhY2VtZW50TWFwOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6
OkZFRHJvcFNoYWRvdzoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RUZsb29kOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFR2F1c3Np
YW5CbHVyOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2U6
CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZToKKyAgICBj
YXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1vcnBob2xvZ3k6CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZz
ZXQ6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFT2Zmc2V0PihlZmZlY3QpLmVuY29kZShl
bmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmc6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVUaWxlOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFVHVyYnVsZW5jZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VBbHBoYToKKyAgICBjYXNlIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljOgorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZW5jb2RlU1ZH
RmlsdGVyKGNvbnN0IFdlYkNvcmU6OlNWR0ZpbHRlciYgZmlsdGVyLCBFbmNvZGVyJiBlbmNvZGVy
KQoreworICAgIGVuY29kZXIgPDwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0Zp
bHRlcjsKKworICAgIGF1dG8mIGZpbHRlckVmZmVjdHMgPSBmaWx0ZXIuZmlsdGVyRWZmZWN0cygp
OworICAgIGVuY29kZXIgPDwgZmlsdGVyRWZmZWN0cy5zaXplKCk7CisKKyAgICBmb3IgKGF1dG8m
IGVmZmVjdCA6IGZpbHRlckVmZmVjdHMpCisgICAgICAgIGVuY29kZUZpbHRlckVmZmVjdChlZmZl
Y3QsIGVuY29kZXIpOworICAgIAorICAgIGF1dG8mIGV4cHJlc3Npb24gPSBmaWx0ZXIuZXhwcmVz
c2lvbigpOworICAgIGVuY29kZXIgPDwgZXhwcmVzc2lvbi5zaXplKCk7CisKKyAgICBmb3IgKGF1
dG8gW3R5cGUsIGluZGV4LCBsZXZlbF0gOiBleHByZXNzaW9uKSB7CisgICAgICAgIGVuY29kZXIg
PDwgdHlwZTsKKyAgICAgICAgZW5jb2RlciA8PCBpbmRleDsKKyAgICAgICAgZW5jb2RlciA8PCBs
ZXZlbDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZUNTU0ZpbHRlcihjb25zdCBXZWJD
b3JlOjpDU1NGaWx0ZXImIGZpbHRlciwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBlbmNvZGVy
IDw8IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXI7CisgICAgZW5jb2Rl
ciA8PCBmaWx0ZXIuZnVuY3Rpb25zKCkuc2l6ZSgpOworICAgIAorICAgIGZvciAoYXV0byYgZnVu
Y3Rpb24gOiBmaWx0ZXIuZnVuY3Rpb25zKCkpIHsKKyAgICAgICAgaWYgKGlzPFdlYkNvcmU6OlNW
R0ZpbHRlcj4oZnVuY3Rpb24pKQorICAgICAgICAgICAgZW5jb2RlU1ZHRmlsdGVyKGRvd25jYXN0
PFdlYkNvcmU6OlNWR0ZpbHRlcj4oZnVuY3Rpb24uZ2V0KCkpLCBlbmNvZGVyKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW5jb2RlRmlsdGVyRWZmZWN0KGRvd25jYXN0PFdlYkNvcmU6OkZp
bHRlckVmZmVjdD4oZnVuY3Rpb24uZ2V0KCkpLCBlbmNvZGVyKTsKKyAgICB9Cit9CisKK3N0YXRp
YyBSZWZQdHI8V2ViQ29yZTo6RmlsdGVyRWZmZWN0PiBkZWNvZGVGaWx0ZXJFZmZlY3QoRGVjb2Rl
ciYgZGVjb2RlciwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKK3sKKyAgICBp
ZiAoISh0eXBlID49IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1pbmltdW0gJiYg
dHlwZSA8PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNYXhpbXVtKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZDoKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4OgorICAgIGNhc2UgV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CisgICAgY2FzZSBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb3NpdGU6CisgICAgY2FzZSBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeDoKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZzoKKyAgICBjYXNlIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcDoKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3c6CisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVGbG9vZDoKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUdhdXNzaWFuQmx1cjoKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFTWVyZ2U6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVNb3JwaG9sb2d5OgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0OgorICAgICAgICBpZiAoYXV0byBlZmZl
Y3QgPSBXZWJDb3JlOjpGRU9mZnNldDo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0
dXJuIHsgKCplZmZlY3QpLnB0cigpIH07CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nOgorICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVGlsZToKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVR1cmJ1bGVuY2U6CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGE6CisgICAg
Y2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlR3JhcGhpYzoKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpTVkdGaWx0ZXI+IGRlY29k
ZVNWR0ZpbHRlcihEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90
PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUgfHwgISpzaXplKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFdlYkNvcmU6OkZpbHRlckVmZmVjdFZlY3Rv
ciBmaWx0ZXJFZmZlY3RzOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKnNpemU7
ICsraSkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlPiB0eXBlOworICAgICAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgICAgIGlmICghdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgICAgICBhdXRvIGVmZmVjdCA9
IGRlY29kZUZpbHRlckVmZmVjdChkZWNvZGVyLCAqdHlwZSk7CisgICAgICAgIGlmICghZWZmZWN0
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgICAgIGZpbHRlckVmZmVj
dHMuYXBwZW5kKGVmZmVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICBkZWNvZGVy
ID4+IHNpemU7CisgICAgaWYgKCFzaXplIHx8ICEqc2l6ZSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBXZWJDb3JlOjpTVkdGaWx0ZXJFeHByZXNzaW9uIGV4cHJlc3Npb247CisgICAg
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAqc2l6ZTsgKytpKSB7CisgICAgICAgIHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlPiB0eXBlOworICAgICAgICBkZWNv
ZGVyID4+IHR5cGU7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAKKyAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gaW5kZXg7Cisg
ICAgICAgIGRlY29kZXIgPj4gaW5kZXg7CisgICAgICAgIGlmICghaW5kZXgpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBsZXZl
bDsKKyAgICAgICAgZGVjb2RlciA+PiBsZXZlbDsKKyAgICAgICAgaWYgKCFsZXZlbCkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGV4cHJlc3Npb24uYXBwZW5kKHsgKnR5
cGUsICppbmRleCwgKmxldmVsIH0pOworICAgIH0KKworICAgIHJldHVybiBXZWJDb3JlOjpTVkdG
aWx0ZXI6OmNyZWF0ZShXVEZNb3ZlKGZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKGV4cHJlc3Npb24p
LCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKK30KKworc3RhdGljIFJl
ZlB0cjxXZWJDb3JlOjpDU1NGaWx0ZXI+IGRlY29kZUNTU0ZpbHRlcihEZWNvZGVyJiBkZWNvZGVy
KQoreworICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6
ZTsKKyAgICBpZiAoIXNpemUgfHwgISpzaXplKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIFZlY3RvcjxSZWY8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24+PiBmdW5jdGlvbnM7CisgICAg
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgc3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gdHlwZTsKKyAgICAgICAgZGVj
b2RlciA+PiB0eXBlOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICBpZiAoKnR5cGUgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU6OlNWR0ZpbHRlcikgeworICAgICAgICAgICAgaWYgKGF1dG8gZmlsdGVyID0gZGVjb2RlU1ZH
RmlsdGVyKGRlY29kZXIpKSB7CisgICAgICAgICAgICAgICAgZnVuY3Rpb25zLmFwcGVuZChmaWx0
ZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAg
IGF1dG8gZWZmZWN0ID0gZGVjb2RlRmlsdGVyRWZmZWN0KGRlY29kZXIsICp0eXBlKTsKKyAgICAg
ICAgaWYgKCFlZmZlY3QpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisg
ICAgICAgIGZ1bmN0aW9ucy5hcHBlbmQoZWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0K
KworICAgIHJldHVybiBXZWJDb3JlOjpDU1NGaWx0ZXI6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9u
cyksIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOworfQorCitzdGF0aWMg
UmVmUHRyPFdlYkNvcmU6OkZpbHRlcj4gZGVjb2RlRmlsdGVyKERlY29kZXImIGRlY29kZXIpCit7
CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gdHlwZTsK
KyAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGlmICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
Q1NTRmlsdGVyKQorICAgICAgICByZXR1cm4gZGVjb2RlQ1NTRmlsdGVyKGRlY29kZXIpOworCisg
ICAgaWYgKCp0eXBlID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIp
CisgICAgICAgIHJldHVybiBkZWNvZGVTVkdGaWx0ZXIoZGVjb2Rlcik7CisgICAgCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZUZpbHRlcihjb25zdCBXZWJDb3Jl
OjpGaWx0ZXImIGZpbHRlciwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBpZiAoaXM8V2ViQ29y
ZTo6Q1NTRmlsdGVyPihmaWx0ZXIpKQorICAgICAgICBlbmNvZGVDU1NGaWx0ZXIoZG93bmNhc3Q8
V2ViQ29yZTo6Q1NTRmlsdGVyPihmaWx0ZXIpLCBlbmNvZGVyKTsKKyAgICBlbHNlCisgICAgICAg
IGVuY29kZVNWR0ZpbHRlcihkb3duY2FzdDxXZWJDb3JlOjpTVkdGaWx0ZXI+KGZpbHRlciksIGVu
Y29kZXIpOworfQorCit2b2lkIEZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlRmlsdGVyKG1fZmlsdGVyLCBlbmNvZGVyKTsKK30KKwor
c3RkOjpvcHRpb25hbDxGaWx0ZXJSZWZlcmVuY2U+IEZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCit7CisgICAgaWYgKGF1dG8gZmlsdGVyID0gZGVjb2RlRmlsdGVyKGRl
Y29kZXIpKQorICAgICAgICByZXR1cm4geyBmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSB9OworICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmggYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMGMyZmEx
NDhkNGE1Y2EwNzA5NWI3MWUyZTYzZDQ2ZmM3YTM3YTdiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmgKQEAgLTAsMCArMSw0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9GaWx0ZXIu
aD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIEVuY29kZXI7CitjbGFzcyBEZWNvZGVyOwor
CitjbGFzcyBGaWx0ZXJSZWZlcmVuY2UgeworcHVibGljOgorICAgIEZpbHRlclJlZmVyZW5jZShS
ZWY8V2ViQ29yZTo6RmlsdGVyPiYmKTsKKworICAgIFJlZjxXZWJDb3JlOjpGaWx0ZXI+IHRha2VG
aWx0ZXIoKSB7IHJldHVybiBXVEZNb3ZlKG1fZmlsdGVyKTsgfQorCisgICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbHRlclJlZmVyZW5j
ZT4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBSZWY8V2ViQ29yZTo6RmlsdGVy
PiBtX2ZpbHRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggNDFjNzZiZGI4ZGE3MTY0NWYzODUzYTMzZmFkNWRk
MjVlZDc4NDQxYy4uZTc3ODQ5YTNiMmQ4YWNhYjViMzc4YzlkZWU1MzFkZDYyMmViMzU1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9T
b3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yOTAsNyArMjkwLDYg
QEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAg
J1dlYkNvcmU6Ok1lZGlhS2V5U3lzdGVtUmVxdWVzdElkZW50aWZpZXInLAogICAgICAgICAnV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6Ok1lZGlhU2Vz
c2lvbklkZW50aWZpZXInLAotICAgICAgICAnV2ViQ29yZTo6TmF0aXZlSW1hZ2VSZWZlcmVuY2Un
LAogICAgICAgICAnV2ViQ29yZTo6UGFnZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6
UGxheWJhY2tUYXJnZXRDbGllbnRDb250ZXh0SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3Jl
OjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291
cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IGM0YTg0ZTFmYjZmNDY2
YjhmYmQ1NGU2Y2E0NmM0NzI0MjJiM2IwYzguLmQzNTNlNTJiODQ2MDJjNGQyNjFkODBhM2E3ZTM0
ZTM4NmM4NWQ0MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMTYzLDYgKzE2Myw3IEBAIFBsYXRmb3JtL0lQ
Qy9BdHRhY2htZW50LmNwcCBAbm8tdW5pZnkKIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcCBA
bm8tdW5pZnkKIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcCBAbm8tdW5pZnkKIFBsYXRmb3JtL0lQ
Qy9FbmNvZGVyLmNwcCBAbm8tdW5pZnkKK1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuY3Bw
IEBuby11bmlmeQogUGxhdGZvcm0vSVBDL0pTSVBDQmluZGluZy5jcHAgQG5vLXVuaWZ5CiBQbGF0
Zm9ybS9JUEMvTWVzc2FnZVJlY2VpdmVRdWV1ZU1hcC5jcHAgQG5vLXVuaWZ5CiBQbGF0Zm9ybS9J
UEMvTWVzc2FnZVJlY2VpdmVyTWFwLmNwcCBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGVkMjA0MWZhNTJkZjM2YTkxNjZm
YzcyODJlMTliNjRiOTFkNDliM2UuLmFkZGEyNDg1MzU5MmVjNjJlYWQyNGJlMmRlNGYzNWZjMTIy
YmY1OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTMzMiw2ICsxMzMyLDkgQEAKIAkJNzFCQUE3MzMyNUZGRDA5ODAwRDdDRDVEIC8q
IFdLTW9kZWxWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MUJBQTczMTI1RkZDQ0JBMDBEN0NENUQgLyogV0tNb2RlbFZpZXcuaCAqLzsgfTsKIAkJ
NzFGQjgxMEIyMjYwNjI3RTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rp
c3BhdGNoUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MUZCODEwQTIyNjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZl
bnRzRGlzcGF0Y2hQb2xpY3kuaCAqLzsgfTsKIAkJNzI4RTg2RjExNzk1MTg4QzAwODc4NzlFIC8q
IFdlYkNvbG9yUGlja2VyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjhFODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMu
aCAqLzsgfTsKKwkJNzJFRTc5QkIyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkVFNzlC
ODI3MEU1QUIxMDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmNwcCAqLzsgfTsKKwkJNzJFRTc5
QkMyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkVFNzlCOTI3MEU1QUI5MDA0
Q0U0MEUgLyogRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCAqLzsgfTsKKwkJNzJFRTc5QkQyNzBF
NUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJFRTc5QkEyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRl
clJlZmVyZW5jZS5oICovOyB9OwogCQk3NUE4RDJDODE4N0NDRkFCMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk3NUE4RDJENjE4
N0QxQzBFMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThEMkQ0MTg3RDFDMDEwMEMz
OUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovOyB9OwogCQk3NjJCNzQ4RDEy
MEJDNzVDMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2MkI3NDg0MTIwQkJBMkQwMDgxOTMz
OSAvKiBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NzAyLDYgKzQ3MDUsOSBAQAogCQk3MjhFODZGMDE3
OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJCNTMxNTcyNTNDMUU0RDAwNDkyOTVBIC8qIFJlbW90ZVJlc291
cmNlQ2FjaGVQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZXNvdXJjZUNhY2hl
UHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI1MzE1ODI1M0MxRTRE
MDA0OTI5NUEgLyogUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZVJlc291cmNlQ2FjaGVQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkVFNzlCODI3MEU1QUIxMDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlZmVyZW5jZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRUU3OUI5MjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJH
ZW9tZXRyeVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0
ZXJHZW9tZXRyeVJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkVF
NzlCQTI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNTE4N0NDRjlGMDBDMzlDOUUg
LyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJu
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3Jl
SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjQsNiArNzMzMCw5
IEBACiAJCQkJQkMwMzJEOUUxMEY0MzdEMTAwNThDMTVBIC8qIERlY29kZXIuaCAqLywKIAkJCQlC
QzAzMkQ5RjEwRjQzN0QxMDA1OEMxNUEgLyogRW5jb2Rlci5jcHAgKi8sCiAJCQkJQkMwMzJEQTAx
MEY0MzdEMTAwNThDMTVBIC8qIEVuY29kZXIuaCAqLywKKwkJCQk3MkVFNzlCOTI3MEU1QUI5MDA0
Q0U0MEUgLyogRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCAqLywKKwkJCQk3MkVFNzlCODI3MEU1
QUIxMDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmNwcCAqLywKKwkJCQk3MkVFNzlCQTI3MEU1
QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8sCiAJCQkJOUJEOEFCNDkyNTgyMEU1
MjAwNTM4NkY4IC8qIEZvbnRSZWZlcmVuY2UuaCAqLywKIAkJCQk0MTUxRTVDMzFGQkI5MEE5MDBF
NDdFMkQgLyogRm9ybURhdGFSZWZlcmVuY2UuaCAqLywKIAkJCQlDMENFNzJBQzEyNDdFNzhEMDBC
QzBFQzQgLyogSGFuZGxlTWVzc2FnZS5oICovLApAQCAtMTIyNzYsNiArMTIyODUsOCBAQAogCQkJ
CTkzMTJCQUQ2MjZGMzNDMjkwMEZEREY1RiAvKiBGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM1QjU3OUEyNkY1MTkzMzAwOEI0OEFDIC8qIEZpbGVTeXN0ZW1T
dG9yYWdlSGFuZGxlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMTJCQUQ1MjZGMzND
MjYwMEZEREY1RiAvKiBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyRUU3OUJDMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzJFRTc5QkQyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJl
ZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDBCOTY2MUExOEUyNUFFMTAwQ0UxRjg4IC8q
IEZpbmRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOTBDMUY0MTI2NEZENzEwMDNFNDRE
NCAvKiBGaW5kQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU5QzRBNTkxOEI4MTE3
NDAwN0JEQ0I2IC8qIEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLApA
QCAtMTM2NjcsNyArMTM2NzgsNiBAQAogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJv
amVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYXR0cmlidXRlcyA9
IHsKLQkJCQlEZWZhdWx0QnVpbGRTeXN0ZW1UeXBlRm9yV29ya3NwYWNlID0gT3JpZ2luYWw7CiAJ
CQkJTGFzdFN3aWZ0VXBkYXRlQ2hlY2sgPSAxMzAwOwogCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAx
MTQwOwogCQkJCVRhcmdldEF0dHJpYnV0ZXMgPSB7CkBAIC0xNDQ1OSw2ICsxNDQ2OSw3IEBACiAJ
CQkJMkQ5MkE3ODAyMTJCNkE3MTAwRjQ5M0ZEIC8qIEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQ0RDREM5OUUyNDhGRThEQTAwQTY5NTIyIC8qIEVuZG93bWVudFN0YXRlVHJhY2tlci5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTFBQTU3NjAyMTQ5NkI5NzkwMEE0RUUwNiAvKiBFdmVudERp
c3BhdGNoZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzJFRTc5QkIy
NzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDREE5M0RCMTIyRjhCQ0Y0MDA0OTBBNjkgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGlj
UGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMUExNTJENzI0RTVBMjlBMDA5NzhD
OEIgLyogSGFuZGxlWFBDRW5kcG9pbnRNZXNzYWdlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI3
NDlGNjQ0MjE0NjU2MUIwMDgzODBCRiAvKiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IDhjZWM5MjQyNjg3
NTE0YzZjMmM3N2I3ODk4YzBhMzRjOTA3ZDViYzQuLmVlMjUxNjM0Y2FmZmNhOGNiZWFmMjEwMWVm
OGE0NmU4NzdiYjFkOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0yMDMsNiAr
MjAzLDE0IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIGJpdG1hcC0+Y3JlYXRlSW1hZ2Uo
KTsKICAgICB9CiAKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29u
c3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0
ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQorICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZl
cihtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgZmlsdGVyLCBXVEZNb3ZlKGdlb21ldHJ5
KSk7CisgICAgfQorCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0
UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQmIGRlc3RpbmF0aW9u
Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBmaW5hbAogICAg
IHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggNzcyZmJjYTY4
ZmE3ZjAzMWFkMDQyMDFlOWZlMDE2ZGVkN2I1NzE5Yi4uYTUyNGFiMWEyZWEyYzM3NDRmODQzOGJi
OTdiMDJjYjdjODlkMzQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1
ZGUgIkRpc3BsYXlMaXN0V3JpdGVySGFuZGxlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNl
LmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKQEAg
LTIzNyw2ICsyMzgsMjQgQEAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpnZXRTaGFyZWFibGVCaXRtYXAoUmVuZGVyaW4KICAgICByZXR1cm4gU2hh
cmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKIH0KIAorUmVmUHRyPEltYWdlPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGNvbnN0IEZpbHRlciYgZmlsdGVy
LCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpCit7CisgICAgc2Vu
ZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSBoYW5kbGU7CisgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihp
bWFnZUJ1ZmZlciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgeyBSZWY8RmlsdGVyPiB7IGNvbnN0X2Nh
c3Q8RmlsdGVyJj4oZmlsdGVyKSB9IH0sIElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UoV1RG
TW92ZShnZW9tZXRyeSkpKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldEZp
bHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSwgMV9zKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNlbmRSZXN1bHQsIHNlbmRS
ZXN1bHQpOworCisgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAKKyAgICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7
CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgcmV0dXJu
IGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKK30KKwogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhh
bmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDYWNo
ZU5hdGl2ZUltYWdlKGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VF
dmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmgKaW5kZXggMjM5NGZmNWFkYzRkNzgzYjhhZmQyZGMxMzIxZjJmNTQ3NWEyMTI4NS4u
M2JhNWE0MjM3NDVjNmQwODc1NzgzMzM5NTc1Y2I1MDlkOWIxOWQwMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCiAKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oIgorI2lu
Y2x1ZGUgIkZpbHRlclJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9u
LmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJJUENTZW1hcGhvcmUuaCIKQEAgLTEwMiw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZp
ZXIgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAg
IFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGdldFNoYXJlYWJsZUJpdG1hcChXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbik7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIo
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGaWx0
ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+JiYpOwogICAgIHZv
aWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVm
PFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440769</attachid>
            <date>2021-10-11 03:04:10 -0700</date>
            <delta_ts>2021-10-12 01:22:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211011030409.patch</filename>
            <type>text/plain</type>
            <size>722342</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzODg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJhMDA2NDYzZjNkOGRk
NzAxZTg2ODJlNGIzZmJiZjY5NGVkNWVkMC4uMGViZDYzZTdkOTM4ZWU3YmViYThhNGU0Y2Q5MWFj
Y2NlZTRlNTRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1MyBAQAorMjAyMS0xMC0xMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXND
b2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZpbHRlckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29j
b2EubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5oLgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFnZTo6c2V0SW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcklm
RXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFnZTo6aW1hZ2VC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFw
aGljQ29yZUltYWdlLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VHcmFwaGljOjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVCbGVuZDo6RkVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpzZXRCbGVuZE1v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YXBwbHkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVCbGVuZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbG9yTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeDo6RkVDb2xvck1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1h
dHJpeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjplZmZlY3RUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4Lmg6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKGlzVHlw
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OnNldEsxKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRL
Mik6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0SzMpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb21wb3NpdGU6OnNldEs0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBw
bHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0T3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBCeXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmFyaXRobWV0aWNTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb21wb3NpdGVPcGVy
YXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6b3BlcmF0aW9uIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRy
aXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZHJhd2luZ1JlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6YXBwbHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjbGFtcFJHQkFWYWx1ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0
ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6
c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2
ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVD
b252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGln
aHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpkaWZmdXNlQ29u
c3RhbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1l
bnRNYXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVE
aXNwbGFjZW1lbnRNYXApOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNl
dFhDaGFubmVsU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6
OnNldFlDaGFubmVsU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRN
YXA6OnNldFNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpyZXN1
bHRDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1h
cDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFj
ZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Ynl0ZU9mZnNldE9mUGl4ZWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5k
ZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnlDaGFubmVs
SW5kZXggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAg
IChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnNoYWRvd0NvbG9yIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVGbG9vZDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9v
ZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZs
b29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVz
c2lhbkJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoZ2F1c3NpYW5L
ZXJuZWxGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsUG9zaXRpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlh
dGlvblgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0
ZERldmlhdGlvblkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OnNldEVkZ2VNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9u
bHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpzdGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6
c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0
U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRn
ZU1vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpz
ZXREaWZmdXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3Bl
Y3VsYXJDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTcGVjdWxh
ckV4cG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRM
ZW5ndGhYKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5n
dGhZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9w
Um93Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
aW50ZXJpb3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3Jt
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFp
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eUdlbmVyaWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpkcmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRpZmZ1c2VD
b25zdGFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzcGVjdWxhckNv
bnN0YW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNwZWN1bGFyRXhw
b25lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c291cmNlIGNvbnN0
KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjps
aWdodGluZ0NvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OmxpZ2h0U291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OkFscGhhV2luZG93Ojp0b3BMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0
b3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFX
aW5kb3c6OmNlbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpBbHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3ApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3BS
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRv
dzo6c2V0UmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxw
aGFXaW5kb3c6OnNldEJvdHRvbVJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnQpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRU1lcmdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTWVyZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9y
cGhvbG9neTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21w
b25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9y
cGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5oOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0
b3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRy
YXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6
OnNldER5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgIChpc1R5cGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFy
Q29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5n
OjpzZXRTcGVjdWxhckV4cG9uZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVT
cGVjdWxhckxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJFeHBvbmVudCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpkcmF3aW5nUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFwcGx5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OkZFVHVyYnVsZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFR1cmJ1
bGVuY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1
ZW5jeVgpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5
WSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRTZWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJi
dWxlbmNlOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWlu
dGluZ0RhdGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1
cmJ1bGVuY2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnR1cmJ1bGVuY2VUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6YXBwbHkgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzZXRTb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6ZmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXI6OnNldEZpbHRlclJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpmaWx0ZXJTY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXI6OnNldEZpbHRlclNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6YWJzb2x1dGVUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpzZXRSZW5kZXJpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6aXNTVkdGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyOjppc0NTU0ZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
Qm91bmRhcnlTZXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhv
bG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OkZp
bHRlckJvdW5kYXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp4
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjphcHBseVBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y29sbGVjdEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRp
cGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpw
cmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29w
eVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFj
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0
ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJl
c3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6cmVzdWx0Q29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnNldE9wZXJhdGluZ0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAgICAgIChpc1R5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpudW1iZXJPZkVmZmVjdElucHV0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlzQWxwaGFJ
bWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNl
dElzQWxwaGFJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmFic29sdXRlUGFpbnRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6c2V0QWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjptYXhFZmZlY3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0TWF4RWZmZWN0UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVj
dFR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpv
dXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
aGFzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNl
dEhhc1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNZIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzWSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1dpZHRoIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzV2lkdGgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNIZWlnaHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNIZWln
aHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjplZmZlY3RCb3VuZGFyaWVzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RWZmZWN0Qm91bmRhcmllcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldFVuY2xpcHBlZEFic29s
dXRlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y2xpcHNUb0JvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldENsaXBzVG9Cb3VuZHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1hbGl6ZWRGbG9hdHMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1ZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyR2VvbWV0cnkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6RmlsdGVyR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZp
bHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291
cmNlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Ojph
YnNvbHV0ZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6cmVzb2x1dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
Ym91bmRhcnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmNv
bnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyR2VvbWV0cnk6OmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OnJlc29sdmVUb0ZpbHRlckNvb3JkaW5h
dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9B
YnNvbHV0ZUNvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21l
dHJ5OjpjbGlwVG9QcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0
cHV0OjpjcmVhdGVGaWx0ZXJSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3V0cHV0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck91dHB1dDo6
cmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OnJlbmRlcmluZ01vZGUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVz
ZW50YXRpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
UmVzdWx0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJl
c3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1
bHQ6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Z2V0UGl4
ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpyZXF1aXJlc1BpeGVs
QnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Y29weVBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6bG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyUmVzdWx0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJSZXN1bHQ6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJSZXN1bHQ6OnNldElzQWxwaGFJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXN1bHRWZWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb2lu
dExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFs
cGhhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhh
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjplZmZlY3ROYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKTogRGVsZXRlZC4K
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmVmZmVjdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6bm9ybWFs
aXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjphcHBseVNvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGFtcEJ5dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUFy
aXRobWV0aWNQaXhlbHNVbmNsYW1wZWQpOgorICAgICAgICAoV2ViQ29yZTo6YXJpdGhtZXRpY1Nv
ZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseUFyaXRobWV0aWNTb2Z0d2FyZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBwbHlOb25Bcml0aG1ldGlj
U29mdHdhcmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5U29m
dHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNv
ZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRp
bmcuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5U29mdHdhcmUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lT
b2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjphcHBs
eVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFw
cGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0UmVuZGVyZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdFNvZnR3YXJl
OjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgorICAgICAg
ICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L1NvdXJjZUFscGhhU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUFscGhhOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdy
YXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTZXBpYUVmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0
RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dFZmZlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
RmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgIChpc1R5cGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJz
OjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6Omlu
cHV0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9j
YXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJG
aWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJzLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRkVC
bGVuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1
aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9y
Pjo6aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojpmcm9tU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlw
ZT46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPENvbXBv
c2l0ZU9wZXJhdGlvblR5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6ZnJvbVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGw6CisgICAg
ICAgICogc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAg
KiBzdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3Bs
YWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6Omxp
Z2h0U291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RFbGVtZW50Lmg6CisgICAgICAgICogc3Zn
L1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjppbWFnZUJ1ZmZlckZvckVmZmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQgY29u
c3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRUxpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAg
ICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVN
b3JwaG9sb2d5RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yPjo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
Pjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9w
ZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlw
ZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmlkbDoKKyAgICAgICAgKiBzdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVBvaW50TGlnaHRFbGVtZW50Ojps
aWdodFNvdXJjZSBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ZFVGlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVUaWxlRWxlbWVudDo6
YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50Lmg6CisgICAgICAg
ICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAg
KiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJF
bGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6RkVJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUltYWdlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
Y3JlYXRlV2l0aEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNy
ZWF0ZVdpdGhJUklSZWZlcmVuY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFn
ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZTo6cmVmZXJlbmNlZFJlbmRlcmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OlNWR0ZpbHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmluZGV4ZWRFZmZlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpsYXN0RWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlcjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoKKyAgICAgICAgKGlzVHlwZSk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VHcmFwaGljIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNvdXJjZUFscGhhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZE5hbWVkRWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6Om5hbWVkRWZmZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZm
ZWN0UmVmZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWls
ZGVyOjpjbGVhckVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
QnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXJCdWlsZGVyOjpzZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjp0YXJnZXRCb3VuZGluZ0JveCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpwcmltaXRpdmVVbml0
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpz
ZXRQcmltaXRpdmVVbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJC
dWlsZGVyOjpsYXN0RWZmZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OmVmZmVjdFJlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6IERlbGV0
ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckV4cHJlc3Npb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckdlb21ldHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJHZW9tZXRyeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5
OjpTVkdGaWx0ZXJHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJHZW9tZXRy
eTo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RmlsdGVyR2VvbWV0cnk6OmJvdW5kYXJ5U2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckdlb21ldHJ5Ojpjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9GaWx0ZXJDb29yZGlu
YXRlcyBjb25zdCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR2Vv
bWV0cnkuaDogQWRkZWQuCisgICAgICAgICogeG1sL1hQYXRoR3JhbW1hci5jcHA6CisgICAgICAg
ICogeG1sL1hQYXRoR3JhbW1hci55OgorCiAyMDIxLTEwLTEwICBTaWh1aSBMaXUgIDxzaWh1aV9s
aXVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBpdGVyYXRpbmcgRmlsZVN5
c3RlbURpcmVjdG9yeUhhbmRsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzMDk0NDkwNTE4OGQ5Zjg4N2E1ZTU3ZjMz
Y2UxMjI4MjQ2MTdlY2UzLi43NDdkNTM2NGFjNTFiMWFhODM3NTAxOTBiOGYwNzM2NTUxZDZjZGJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIxLTEwLTExICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gRW5hYmxlIGZpbHRl
cnMgaW4gR1BVIFByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMTI1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zp
bHRlckdlb21ldHJ5UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZTo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjpG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTo6dGFrZUdlb21ldHJ5KToKKyAgICAgICAgKElQQzo6Rmls
dGVyR2VvbWV0cnlSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRl
ckdlb21ldHJ5UmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0
ZXJSZWZlcmVuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjpG
aWx0ZXJSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjplbmNvZGVGaWx0ZXJFZmZlY3QpOgorICAg
ICAgICAoSVBDOjplbmNvZGVTVkdGaWx0ZXIpOgorICAgICAgICAoSVBDOjplbmNvZGVDU1NGaWx0
ZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoSVBDOjpk
ZWNvZGVTVkdGaWx0ZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVDU1NGaWx0ZXIpOgorICAgICAg
ICAoSVBDOjpkZWNvZGVGaWx0ZXIpOgorICAgICAgICAoSVBDOjplbmNvZGVGaWx0ZXIpOgorICAg
ICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6
OkZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRmlsdGVy
UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OnRha2VG
aWx0ZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAo
dHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCk6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoKKwogMjAyMS0xMC0xMCAg
U2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBm
b3IgaXRlcmF0aW5nIEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
MmIwM2ZhNzE5YTAxYjlkYTkyOWY4YjU5NGFhN2IwMjA4MTNiMGMwMC4uZjk2ZjJjNjE1ZDAxNDQ3
NDA1ZjA3NDUzZGJkY2M0NDNjYTUwMWM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwNTQsMTQgKzIw
NTQsMzQgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbnMuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0
ZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZv
bHZlTWF0cml4U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT0JveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09PcmlnaW5hbEZvcm1hdEJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09Qcm90
ZWN0aW9uU2NoZW1lSW5mb0JveC5jcHAKQEAgLTI2NDQsNiArMjY2NCw3IEBAIHN2Zy9ncmFwaGlj
cy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAKIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuY3BwCiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyR2VvbWV0cnkuY3BwCiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmNwcAog
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5jcHAK
IHN2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZUFuaW1hdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKaW5kZXggYTRjMGE3NjI3YzM3ODFkZmNkMDQ5MDZmYzUyMzMwOWM5MDczMGMyYy4uMGJk
ZGI5OWMyMzhhZDBlNzExZDMzOTI3MGEzZWM1MWU5MWQ2NjI1NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CkBAIC0zOTgsNyArMzk4LDggQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRp
ZXMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW0KIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCi1wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCiBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVRGV2aWNlTWV0YWwubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNw
bGF5UmVmcmVzaE1vbml0b3JJT1MubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggZmFjYjNiZGQwMjhjZjJkMDZmMGZmMThlZTAyOTYzNzg3NjA0MzE3Mi4uZWEzNTRjNDQ3
NjgzMDg5NjY0ZjU0NTU3NzQxMzFlMjdmMjYyODBiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjM1LDcgKzIzNSw2IEBACiAJ
CTA4MTY2OEQ0MTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2NjhEMjEyNTYwM0JG
MDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRlci5oICovOyB9OwogCQkwODE2NjhEQTEyNTYw
M0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNW
R1RleHRMYXlvdXRFbmdpbmUuaCAqLzsgfTsKIAkJMDgxQUE4REExMTExMjM3RTAwMkFCMDZFIC8q
IFNWR0VsZW1lbnRSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDgxQUE4RDkxMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0
YS5oICovOyB9OwotCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxRUJG
MzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLzsgfTsKIAkJMDgzREFF
QTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZC
MDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJMDgzREFF
QTkwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTUwRjAxQTdG
QjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oICovOyB9OwogCQkwODQ1
NjgwODEyQjkwREE2MDA5NjBBOUYgLyogRm9udE1ldHJpY3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5RiAvKiBG
b250TWV0cmljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NzcsOCArNzc2LDYgQEAKIAkJMkFFRjZGREQyNkU3RUNDRjAwMzI2RDAyIC8qIENT
U051bWVyaWNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyQUVGNkZDRTI2RTcxRjJEMDAzMjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCAqLzsgfTsK
IAkJMkIzNjVDODQxNTI1MTE5RTAwOTFEMjdCIC8qIFJlbmRlclNWR0VsbGlwc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCNDIzNUEwMTUyNTBGNjAw
MERCQkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNlLmggKi87IH07CiAJCTJCRThFMkM3MTJBNTg5RUMw
MEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1M
TWV0YUNoYXJzZXRQYXJzZXIuaCAqLzsgfTsKLQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8q
IEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuaCAqLzsgfTsKLQkJMkNBQTRBM0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQ0FBNEEzOTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UuaCAqLzsgfTsKIAkJMkQwNjIxNDQxREE2MzlCNjAwQTdGQjI2IC8qIFdlYktp
dE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQyMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtl
eU1lc3NhZ2VFdmVudC5jcHAgKi87IH07CiAJCTJEMDYyMTQ1MURBNjM5QkEwMEE3RkIyNiAvKiBX
ZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDMxREE2Mzk4ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlh
S2V5TWVzc2FnZUV2ZW50LmggKi87IH07CiAJCTJEMDYyMTREMURBNjNBOEIwMEE3RkIyNiAvKiBX
ZWJLaXRNZWRpYUtleXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQwNjIxNDkxREE2M0E3OTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAg
Ki87IH07CkBAIC0yMjk3LDcgKzIyOTQsMTggQEAKIAkJNzI5OUJDNjgyM0Q2QTUzRTAwQ0M2ODgz
IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI5RDA1MzAy
NTMxNDI0MzAwNDIyMDk4IC8qIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5RDA1MkUyNTMxM0UyNjAw
NDIyMDk4IC8qIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyQTczQkVGMjQ1QTNGOTAwMDFDOUQw
MyAvKiBBbmltYXRpb25GcmFtZVJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFt
ZVJhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkFBNDZDMzI3MTQzNDQ3MDAzRTg4QzQgLyogRmlsdGVyR2VvbWV0cnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDgzMjcwNjY3NEMwMDND
NUFBRSAvKiBGaWx0ZXJHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM1MjcxNDM1MjMwMDNFODhDNCAvKiBGaWx0ZXJCb3Vu
ZGFyeVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJBQTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2QzYyNzE0MzVG
RDAwM0U4OEM0IC8qIEZpbHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2NjI3MDNENjZEMDAzQzVBQUUgLyogRmlsdGVyRnVu
Y3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkFBNDZDNzI3MTQzNjlBMDAzRTg4QzQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJEMjcxNDMw
QjEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM4MjcxNDM3MzMwMDNFODhDNCAv
KiBGaWx0ZXJSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQzkwQTNBMjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDOTI3MTQz
N0QxMDAzRTg4QzQgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0EyNzE0
MzkwMTAwM0U4OEM0IC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0
NkNCMjcxNDM5OTcwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJCMjcxNDMwQjAwMDNFODhD
NCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDQzI3MTQzOUQ5MDAzRTg4QzQgLyogU1ZHRmlsdGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2
QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0QyNzE0MzlFNTAwM0U4OEM0IC8qIFNW
R0ZpbHRlckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQUE0NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJC
QUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQTUyM0UxNzMyODAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyRUJDN0REMjcxMTNEMzEwMEYwQTIwRiAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJGNjY3RTEyNjBDMjZBQzAwRUUzNkFEIC8qIERp
YWdub3N0aWNMb2dnaW5nRG9tYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkY2NjdERjI2MEMyNjQ0MDBFRTM2QUQgLyogRGlhZ25vc3RpY0xvZ2dp
bmdEb21haW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEw
OEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1Nzkz
RTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBN
ZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTI3MDAsOCArMjcwOCw2IEBACiAJCTg0MjI0MTk0MTA3
RTc4QTcwMDc2NkE4NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3OEE3MDA3NjZBODcg
LyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oICovOyB9OwogCQk4NDMwMEJENjEyMEM5QUFDMDAy
MTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhT
dHJpbmdTb3VyY2UuaCAqLzsgfTsKIAkJODQzMDBCRDgxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1Bh
dGhTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg0MzAwQkQ3MTIwQzlBRDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi87IH07Ci0JCTg0
NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0
ZXIuaCAqLzsgfTsKLQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRkEwRkQy
NjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oICovOyB9OwogCQk4NDY1MEU3RTIzODdBRDdEMDA2
MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQ2NTBFN0MyMzg3QUQ3QzAwNjI2NkUyIC8qIE1lZGlhUXVl
cnlMaXN0RXZlbnQuaCAqLzsgfTsKIAkJODQ3MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3Rh
bnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3MzBENUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICov
OyB9OwogCQk4NDczMEQ3OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUMxMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguaCAqLzsgfTsKQEAgLTI3MTEsNyArMjcx
Nyw3IEBACiAJCTg0NzMwRDgxMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2NDEyNDhGMEIz
MDBEM0E5QzkgLyogRkVMaWdodGluZy5oICovOyB9OwogCQk4NDczMEQ4MzEyNDhGMEIzMDBEM0E5
QzkgLyogRkVNZXJnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3MzBENjYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuaCAqLzsgfTsKIAkJODQ3
MzBEODUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTW9ycGhvbG9neS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjgxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFTW9ycGhvbG9neS5oICovOyB9OwotCQk4NDczMEQ4NzEyNDhGMEIzMDBEM0E5QzkgLyogRkVP
ZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oICovOyB9OworCQk4NDczMEQ4NzEy
NDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg0NzMw
RDg5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZDMTI0OEYwQjMwMEQzQTlD
OSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCAqLzsgfTsKIAkJODQ3MzBEOEIxMjQ4RjBCMzAwRDNB
OUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovOyB9OwogCQk4NDcz
MEQ4RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyog
RkVUdXJidWxlbmNlLmggKi87IH07CkBAIC02MTAwLDggKzYxMDYsNiBAQAogCQkwODE2NjhENzEy
NTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRM
YXlvdXRFbmdpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExh
eW91dEVuZ2luZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODFBQThEOTExMTEy
MzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5
IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHRmlsdGVyQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVB
MjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAz
NDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNjI0OCw4ICs2MjUyLDYgQEAKIAkJMEY0OTY2QTgxREI0MEM0MzAwQTI3NEJCIC8q
IEpTRE9NUG9pbnRSZWFkT25seS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RPTVBvaW50UmVhZE9ubHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjQ5NjZBOTFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xs
VHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAv
KiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQz
NCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXll
ckZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzU4LDEwICs3MzYwLDYgQEAKIAkJMkI0MjM1QTAxNTI1
MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAg
LyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQ0FBNEEzNzI0QkUxOEExMDA5REVFNzAg
LyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQyMURBNjM5ODgwMEE3RkIy
NiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQzMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRN
ZWRpYUtleU1lc3NhZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDA2MjE0NzFEQTYzQTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlOZWVkZWRFdmVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU5l
ZWRlZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTMyLDkgKzEw
NTMwLDUwIEBACiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZpbHRlck91dHB1dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWx0ZXJPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBG
aWx0ZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJGdW5jdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAv
KiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZDMjcwM0RDM0EwMDNDNUFB
RSAvKiBDU1NGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q1NTRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkQyNzAz
REMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDU1NGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkUy
NzAzREZEODAwM0M1QUFFIC8qIEZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVB
QUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJj
ZUdyYXBoaWNTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8qIEZFTW9ycGhvbG9neVNv
ZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzQyNzA1ODM3RDAwM0M1QUFFIC8q
IEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1lcmdlU29mdHdhcmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVB
QUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29s
b3JNYXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9vZFNvZnR3YXJlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZFRmxvb2RTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5z
ZmVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0IyNzA1QjJD
OTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQTgzRDdDMjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFFIC8qIEZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEaXNwbGFj
ZW1lbnRNYXBTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDdFMjcwNjMzNkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGRVRpbGVTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBGRVR1cmJ1bGVuY2VTb2Z0
d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBG
RUxpZ2h0aW5nU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVMaWdodGluZ1NvZnR3
YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEODIyNzA2NTExQjAw
M0M1QUFFIC8qIEZFQmxlbmRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUJsZW5k
U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MzI3MDY2
NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyR2Vv
bWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjQyNzE0MkNFQjAw
M0U4OEM0IC8qIEZpbHRlclJlc3VsdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1
bHRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjYyNzE0MkYz
NzAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBQTQ2QjcyNzE0MkYzODAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpbHRlclJlc3VsdFNvZnR3YXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQUE0NkI4MjcxNDJGNzkwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2Uu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI5MjcxNDJG
NzkwMDNFODhDNCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkEyNzE0MkY3QTAwM0U4OEM0IC8qIEZpbHRl
clJlc3VsdENvcmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2
QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkMyNzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlck91dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJPdXRwdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCRDI3MTQzMEIxMDAzRTg4QzQg
LyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmlsdGVyUmVwcmVzZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBQTQ2QkUyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkFBNDZCRjI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhw
cmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXJFeHBy
ZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkMwMjcxNDMyREYw
MDNFODhDNCAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR0ZpbHRlckJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkFBNDZDMTI3MTQzMkRGMDAzRTg4QzQgLyogU1ZHRmlsdGVyR2VvbWV0cnkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyR2VvbWV0cnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QzIyNzE0MzJFMDAwM0U4OEM0IC8qIFNW
R0ZpbHRlckdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0ZpbHRlckdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJB
QTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckJvdW5kYXJ5U2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyQkFDM0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJh
Y2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZm
ZXJCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTUyM0Ux
NzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA1NDYsNiArMTA1ODUsOCBAQAogCQk3
MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQzkwQTM5MjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmlsdGVyUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJDOTBBM0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaWx0ZXJSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJF
NDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTQ3OCw5ICsxMTUxOSw2IEBACiAJCTg0MzAwQkQ1MTIw
QzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFNvdXJjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJEOTEyMEM5QUVEMDAyMTk1NEEgLyogU1ZHUGF0
aFN0cmluZ1NvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdQYXRoU3RyaW5nU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1
RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcy
RjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NDVFNzJGQTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NDY1MEU3QzIzODdBRDdDMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdGMjM4N0FEOEEwMDYyNjZFMiAv
KiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NDY1MEU4MDIzODdBRDhCMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFRdWVyeUxpc3RFdmVudC5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTUxMiw4ICsxOTU1MCw5IEBACiAJCTJDRTExODk4MjRD
MjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCTJDQUE0QTM5MjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZS5oICovLAotCQkJCTJDQUE0QTM3MjRCRTE4QTEwMDlERUU3MCAv
KiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFBNDZCQTI3MTQy
RjdBMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0Q29yZUltYWdlLmggKi8sCisJCQkJNzJBQTQ2Qjgy
NzE0MkY3OTAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdENvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFB
NDZCOTI3MTQyRjc5MDAzRTg4QzQgLyogU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbSAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gY29yZWltYWdlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTIzMTI5LDYgKzIzMTY4LDMyIEBACiAJCQlwYXRoID0gIm1vZGVsLWVsZW1lbnQiOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzJBODNENkYyNzA1NzREMDAwM0M1QUFFIC8q
IHNvZnR3YXJlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQk3MkE4M0Q4MjI3MDY1MTFCMDAzQzVBQUUgLyogRkVCbGVuZFNvZnR3YXJlLmNwcCAqLywKKwkJ
CQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAq
LywKKwkJCQk3MkE4M0Q3QTI3MDVBREZBMDAzQzVBQUUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NjI3MDU4OTAyMDAzQzVBQUUgLyogRkVDb21wb3Np
dGVTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0MyNzA1QkQ4NjAwM0M1QUFFIC8qIEZFQ29u
dm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFF
IC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdFMjcwNjMz
NkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzgy
NzA1OEMwMzAwM0M1QUFFIC8qIEZFRmxvb2RTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0Iy
NzA1QjJDOTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovLAorCQkJCTcy
QTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQTgzRDc0MjcwNTgzN0QwMDNDNUFBRSAvKiBGRU1lcmdlU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQTgzRDczMjcwNTdDQkUwMDNDNUFBRSAvKiBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAgKi8s
CisJCQkJNzJBODNENzIyNzA1NzlDNzAwM0M1QUFFIC8qIEZFT2Zmc2V0U29mdHdhcmUuY3BwICov
LAorCQkJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAgKi8s
CisJCQkJNzJBODNEODAyNzA2NDFCNjAwM0M1QUFFIC8qIEZFVHVyYnVsZW5jZVNvZnR3YXJlLmNw
cCAqLywKKwkJCQk3MkFBNDZCNjI3MTQyRjM3MDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0U29mdHdh
cmUuY3BwICovLAorCQkJCTcyQUE0NkI3MjcxNDJGMzgwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRT
b2Z0d2FyZS5oICovLAorCQkJCTcyQTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBo
YVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNl
R3JhcGhpY1NvZnR3YXJlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gc29mdHdhcmU7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QzAxMUYzQzI0RkFEMzYwMDA1QkVGMTAg
LyogU2V0dGluZ3NUZW1wbGF0ZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKApAQCAtMjUxODMsNiArMjUyNDgsNyBAQAogCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0
ODEgLyogZmlsdGVycyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJNzJBODNENkYyNzA1NzREMDAwM0M1QUFFIC8qIHNvZnR3YXJlICovLAogCQkJCUExRTEx
NTQzMTMwMTVDM0QwMDU0QUM4QyAvKiBEaXN0YW50TGlnaHRTb3VyY2UuY3BwICovLAogCQkJCTg0
NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAqLywKIAkJCQlB
NzVFOEI4MDBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5jcHAgKi8sCkBAIC0yNTIxOSwxNSAr
MjUyODUsMjQgQEAKIAkJCQk4NDczMEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmggKi8s
CiAJCQkJODQ3MzBENkYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgKi8sCiAJ
CQkJODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovLAotCQkJCTg0
NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2RTI3MDNE
RkQ4MDAzQzVBQUUgLyogRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVB
QUUgLyogRmlsdGVyLmggKi8sCisJCQkJNzJBQTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRl
ckJvdW5kYXJ5U2V0LmggKi8sCiAJCQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRl
ckVmZmVjdC5jcHAgKi8sCiAJCQkJMDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVm
ZmVjdC5oICovLAotCQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RS
ZW5kZXJlci5jcHAgKi8sCi0JCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVm
ZmVjdFJlbmRlcmVyLmggKi8sCisJCQkJNzJBQTQ2QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZpbHRl
ckVmZmVjdFZlY3Rvci5oICovLAorCQkJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBGaWx0
ZXJGdW5jdGlvbi5oICovLAorCQkJCTcyQTgzRDgzMjcwNjY3NEMwMDNDNUFBRSAvKiBGaWx0ZXJH
ZW9tZXRyeS5oICovLAogCQkJCTQ5RUNFQjYzMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uY3BwICovLAogCQkJCTQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uaCAqLywKIAkJCQk0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0
aW9ucy5jcHAgKi8sCiAJCQkJNDlFQ0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJh
dGlvbnMuaCAqLywKKwkJCQk3MkFBNDZCQzI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyT3V0cHV0
LmNwcCAqLywKKwkJCQk3Mjk3OEQ0MzI2RkU5REU3MDBGRDJDNTYgLyogRmlsdGVyT3V0cHV0Lmgg
Ki8sCisJCQkJNzJBQTQ2QkQyNzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9u
LmggKi8sCisJCQkJNzJDOTBBMzkyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5jcHAg
Ki8sCisJCQkJNzJDOTBBM0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovLAor
CQkJCTcyQUE0NkI0MjcxNDJDRUIwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRWZWN0b3IuaCAqLywK
IAkJCQk4NDczMEQ3NDEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLywKIAkJCQlB
MUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9pbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJ
ODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLywKQEAgLTI2
OTkwLDEwICsyNzA2NSwxMyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjI1NTk4RUEwRDAwRDhC
OTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuY3BwICovLAogCQkJCUIyNTU5OEVCMEQwMEQ4QjkwMEJC
ODI1QyAvKiBTVkdGRUltYWdlLmggKi8sCi0JCQkJODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8q
IFNWR0ZpbHRlci5jcHAgKi8sCi0JCQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0Zp
bHRlci5oICovLAotCQkJCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWls
ZGVyLmNwcCAqLywKLQkJCQkwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVp
bGRlci5oICovLAorCQkJCTcyQTgzRDZBMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuY3Bw
ICovLAorCQkJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuaCAqLywKKwkJ
CQk3MkFBNDZDMDI3MTQzMkRGMDAzRTg4QzQgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8sCisJ
CQkJNzJBQTQ2QkUyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLywKKwkJ
CQk3MkFBNDZCRjI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oICovLAor
CQkJCTcyQUE0NkMyMjcxNDMyRTAwMDNFODhDNCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5jcHAgKi8s
CisJCQkJNzJBQTQ2QzEyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRlckdlb21ldHJ5LmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IGZpbHRlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMzAxMDAsOCArMzAxNzgsOCBAQAogCQkJCUNBN0U5QjQ3MjQzNjFEQzUwMDRFODlGNiAvKiBD
b250ZW50ZnVsUGFpbnRDaGVja2VyLmggKi8sCiAJCQkJOTM5MkYxNEYwQUQxODYyMzAwNjkxQkQ0
IC8qIENvdW50ZXJOb2RlLmNwcCAqLywKIAkJCQk5MzkyRjE0QjBBRDE4NjFCMDA2OTFCRDQgLyog
Q291bnRlck5vZGUuaCAqLywKLQkJCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmls
dGVyLmNwcCAqLywKLQkJCQkwRjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmgg
Ki8sCisJCQkJNzJBODNENkMyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5jcHAgKi8sCisJ
CQkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovLAogCQkJCUUzQkJD
MjQ1MjM4MzU1MUEwMDZFQzM5RiAvKiBDU1NWYWx1ZUtleS5oICovLAogCQkJCUU0QThEMjE1MjI1
NzhEQTAwMEE4NDYzQyAvKiBFdmVudFJlZ2lvbi5jcHAgKi8sCiAJCQkJRTRBOEQyMTQyMjU3OERB
MDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmggKi8sCkBAIC0zMTUyNCw2ICszMTYwMiw3IEBACiAJ
CQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk3MkVCQzdERDI3MTEzRDMxMDBGMEEyMEYgLyogKG51
bGwpIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NEMEUyQjgxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NEMEUyQkYxRjgwQTU2RTAwMTZBNENF
IC8qIEFib3J0U2lnbmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkI5NTE5NTIwN0Q2MzM0MDBB
N0QyREQgLyogQWJzdHJhY3RET01XaW5kb3cuaCBpbiBIZWFkZXJzICovLApAQCAtMzIxODMsNiAr
MzIyNjIsNyBAQAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFn
ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3OUUxNDFCQjIxNUJCMDBDQUE4QkYgLyog
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTQ0NzZCREIxREZD
QUMwMzAwNjkwRTIzIC8qIENTU0RlZmVycmVkUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MkFBNDZDQTI3MTQzOTAxMDAzRTg4QzQgLyogQ1NTRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGQkIwQzVCODE3QkJENjI5MDAzRDM2NzcgLyogQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM2NEI0RDYwQ0I0Mjk4QTAwNUYyQjYyIC8qIENTU0ZvbnRGYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNGRDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTRm9udEZh
Y2VSdWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNjg3LDEyICszMjc2NywxNiBAQAogCQkJCTkz
MEU0NDg2MjcwQzM3MjIwMERFN0FCNyAvKiBGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjlGMEU4MURBRUIwMEIyNTk2NSAvKiBG
aWxsTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDgzMUZFODY1REQwMDIwMzFDQyAv
KiBGaWxsTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRjgwRkQyNjFFRTAwQTg3RDc5
IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzkyNzE0MzdEMTAwM0U4OEM0
IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzUyNzE0MzUyMzAwM0U4OEM0
IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEM5MjUxQTBGQ0M3
QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkyQzg1NjUz
NDI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCTJDQUE0QTNBMjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2Q0IyNzE0Mzk5NzAwM0U4OEM0IC8q
IEZpbHRlckVmZmVjdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzYyNzE0MzVG
RDAwM0U4OEM0IC8qIEZpbHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZD
MzI3MTQzNDQ3MDAzRTg4QzQgLyogRmlsdGVyR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDNzI3MTQzNjlBMDAzRTg4QzQgLyogRmlsdGVyUmVw
cmVzZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM4MjcxNDM3MzMwMDNFODhD
NCAvKiBGaWx0ZXJSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MkMwMEQ5MTI5NjE5Rjgw
MDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEYwQTE1
NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTZG
QjdEMkREMjUwRkQ4MjgwMDAyMDdBQSAvKiBGbGV4Rm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzU1OTAsOSArMzU2NzQsOSBAQAogCQkJCUIyMjI3QTAzMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
QTA2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMjIyN0EwOTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0Zp
bHRlckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkNDMjcxNDM5RDkwMDNFODhD
NCAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBDMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGaWx0ZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDRDI3
MTQzOUU1MDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBMEYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTIwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR0ZpdFRvVmlld0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMUYyQUIwQ0VGMEFC
RjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM2MzU1LDcg
KzM2NDM5LDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0
ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJRGVm
YXVsdEJ1aWxkU3lzdGVtVHlwZUZvcldvcmtzcGFjZSA9IE9yaWdpbmFsOwogCQkJCUxhc3RTd2lm
dFVwZGF0ZUNoZWNrID0gMDcwMDsKIAkJCQlMYXN0VXBncmFkZUNoZWNrID0gMTE0MDsKIAkJCQlU
YXJnZXRBdHRyaWJ1dGVzID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zp
bHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCmluZGV4IDhjZjkwOWFlOWU1MzcyNGI5MWRiNGFjZTE0YWUyODU3MWRkOTU1MjYuLjM3
MzZiNGY5MjgyMTI0ZTkxMThlMmJhNDM3ZjEyZGNlYTIzOTkxNmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJDU1NGaWx0ZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
IlJlbmRlckVsZW1lbnQuaCIKQEAgLTExNiwyNiArMTE3LDIzIEBAIFJlZlB0cjxJbWFnZT4gQ1NT
RmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZs
b2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAv
LyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFs
bHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGF1dG8gcmVuZGVyaW5nTW9k
ZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisgICAgYXV0byB0ZXh0dXJlID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBpZiAoIXRleHR1cmUpCiAg
ICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCiAgICAgYXV0byBpbWFnZVJlY3Qg
PSBGbG9hdFJlY3QgeyB7IH0sIHNpemUgfTsKICAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJhd0lt
YWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKIAotICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVy
OjpjcmVhdGUoKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUodGV4dHVy
ZSkpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7Ci0gICAg
Y3NzRmlsdGVyLT5zZXRGaWx0ZXJSZWdpb24oaW1hZ2VSZWN0KTsKLSAgICBpZiAoIWNzc0ZpbHRl
ci0+YnVpbGQocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXI6OkZp
bHRlckZ1bmN0aW9uKSkKKyAgICBhdXRvIGZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRl
cmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmlsdGVy
KQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKLSAgICBjc3NGaWx0ZXItPmFw
cGx5KCk7CiAKLSAgICBhdXRvKiBvdXRwdXQgPSBjc3NGaWx0ZXItPm91dHB1dCgpOwotICAgIGlm
ICghb3V0cHV0KQotICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKKyAgICBhdXRv
IGdlb21ldHJ5ID0gbWFrZVVuaXF1ZTxGaWx0ZXJHZW9tZXRyeT4oaW1hZ2VSZWN0LCBpbWFnZVJl
Y3QpOworICAgIGlmIChhdXRvIGZpbHRlcmVkSW1hZ2UgPSB0ZXh0dXJlLT5maWx0ZXJlZEltYWdl
KCpmaWx0ZXIsIFdURk1vdmUoZ2VvbWV0cnkpKSkKKyAgICAgICAgcmV0dXJuIGZpbHRlcmVkSW1h
Z2U7CiAKLSAgICByZXR1cm4gb3V0cHV0LT5jb3B5SW1hZ2UoKTsKKyAgICByZXR1cm4gJkltYWdl
OjpudWxsSW1hZ2UoKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXJJbWFnZVZhbHVlOjpmaWx0ZXJJbWFn
ZUNoYW5nZWQoY29uc3QgSW50UmVjdCYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKaW5kZXggYTVkZDI4YjczN2JjODM1
ZTg2ZWEzZWYyMDJhNzRlNDZhYjIyMjE4MS4uODhhMzEwMjc3OTgyZjMyN2QyNDM5NDZlZWVmNTI2
ZTVmNzIwOTc0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29uY3JldGVJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKIApAQCAtMTM4LDYgKzEzOSwxOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIFJlZlB0cjxJbWFnZT4gZmlsdGVy
ZWRJbWFnZShjb25zdCBGaWx0ZXImIGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21l
dHJ5PiYmIGdlb21ldHJ5KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCk7CisgICAgICAgIGlmICghYmFja2VuZCkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0
ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKworICAgICAgICBS
ZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAgICAgICBzdGQ6OnRpZShpbWFnZUJ1
ZmZlciwgc3RkOjppZ25vcmUpID0gZmlsdGVyLmFwcGx5KHRoaXMsIFdURk1vdmUoZ2VvbWV0cnkp
KTsKKyAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVyID8gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZSgp
IDogbnVsbHB0cjsKKyAgICB9CisKICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAKaW5kZXggODVlM2QyNGJlYjBjMjA0YzMyNWEyNjU2ZDljYTU0MDQwODY2ZmI3Mi4uY2U4
OWY0YmQzYWRmNzhlMjI1ODkxZWQ2NzM3M2M5OWYwYzk2OTJmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0yOCw2
ICsyOCw4IEBACiAKICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTYwOSw2ICs2MTEsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlLCBjb25zdAogICAgIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2Up
LCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIoRmlsdGVyJiBmaWx0ZXIsIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21l
dHJ5KQoreworICAgIGF1dG8gW2ZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0XSA9IGZpbHRlci5hcHBs
eShzb3VyY2VJbWFnZSwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgIGlmIChmaWx0ZXJkSW1hZ2Up
CisgICAgICAgIGRyYXdJbWFnZUJ1ZmZlcigqZmlsdGVyZEltYWdlLCBpbWFnZVJlY3QpOworfQor
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QpCiB7CiAgICAgUGF0aCBwYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBkNmUyNTY3N2JlZjcxNWJh
NDljZjA0MWUxNGM5ZWM4MDFjNWM5N2MzLi5iNjFmNTQ0YTQ4ZGMxNDY5NWI0MDlkNzZjODQzYzc2
ZWEzNWZmZWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaApAQCAtODUsNiArODUsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
VUludDg7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2Ns
YXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OwogY2xhc3MgRmxvYXRSb3VuZGVkUmVj
dDsKIGNsYXNzIEdyYWRpZW50OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OwpAQCAtNDQyLDYgKzQ0NCw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFBv
aW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKaW5kZXggMTM5NzgwMWI0ZDhlMGZmY2Q2OTQ2N2NhMTQyMjBkMDA1M2NmMTVlZS4u
YWIzNGM5NjU2M2UwYmVmZWY1NDFkZjk5ZWVhYjhkYzJkOTBlNmUwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC00Miw2ICs0Miw5IEBA
IGNsYXNzIERyYXdpbmdDb250ZXh0Owogc3RydWN0IEl0ZW1CdWZmZXJIYW5kbGU7CiB9CiAKK2Ns
YXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OworCiBjbGFzcyBJbWFnZUJ1ZmZlciA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbWFnZUJ1ZmZlciwgV1RGOjpEZXN0cnVjdGlv
blRocmVhZDo6TWFpbj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxJbWFnZUJ1ZmZlcj4gewogcHVi
bGljOgogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFp
bHVyZS4KQEAgLTEwNiw2ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFJlZlB0cjxO
YXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlPiBmaWx0ZXJlZEltYWdlKGNvbnN0IEZpbHRlciYsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJH
ZW9tZXRyeT4mJikgPSAwOwogCiAgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8g
dGhpcyBuZXcgb25lLgogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCmluZGV4
IGQ0ZmEzYzRiZmFkMzRhYWYzMDkzYTlmMDI0ODZiYjcyN2Y5OGQ0YWEuLmQ0NWFiMzNjNDQwOGVk
NjM2MDc0NjE0ZDQ2ZjQ1OWRhNmY1MWQ2MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRl
cnNDb2NvYS5tbQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8v
IEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2UgdmFsdWVzIHdpdGggQ1NTRmlsdGVyOjpidWlsZCgp
IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgorLy8gRklY
TUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBGaWx0ZXI6OmJ1aWxkKCkgKGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjAwOCkuCiBzdGF0aWMgY29uc3Qg
ZG91YmxlIHNlcGlhRnVsbENvbnN0YW50c1szXVszXSA9IHsKICAgICB7IDAuMzkzLCAwLjc2OSwg
MC4xODkgfSwKICAgICB7IDAuMzQ5LCAwLjY4NiwgMC4xNjggfSwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGU2YzhkZjRkNTViNDU2MTM1NDllM2FmNDkxOTJhMjZlMmMwNDRhZjcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0KLSNpbXBvcnQgIkZpbHRlckVmZmVj
dFJlbmRlcmVyLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCi0jaW1wb3J0IDx3
dGYvVmVjdG9yLmg+Ci0KLU9CSkNfQ0xBU1MgQ0lJbWFnZTsKLU9CSkNfQ0xBU1MgQ0lGaWx0ZXI7
Ci1PQkpDX0NMQVNTIENJQ29udGV4dDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBG
RUNvbG9yTWF0cml4OwotY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlcjsKLWNsYXNzIFNvdXJjZUdy
YXBoaWM7Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlIDogcHVibGljIEZp
bHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAK
LXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlPiB0cnlDcmVhdGUoRmlsdGVyRWZmZWN0Jik7Ci0gICAgUmV0YWluUHRyPENJQ29u
dGV4dD4gc2hhcmVkQ0lDb250ZXh0KCk7Ci0gICAgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVyRWZm
ZWN0JikgZmluYWw7Ci0gICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X291dHB1dEltYWdlOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0IGZpbmFsOwot
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3QmKSBjb25zdCBmaW5hbDsK
LSAgICB2b2lkIGNsZWFyUmVzdWx0KCkgZmluYWw7Ci0gICAgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2UoKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPENJSW1hZ2U+IGNvbm5l
Y3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVy
KEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQ29yZUltYWdl
UmVuZGVyaW5nKEZpbHRlckVmZmVjdCYpOwotICAgIHN0YXRpYyBib29sIGNhblJlbmRlclVzaW5n
Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOwotICAgIAotICAgIFJldGFpblB0cjxDSUltYWdlPiBp
bWFnZUZvclNvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYyYpOwotICAgIFJldGFpblB0cjxDSUlt
YWdlPiBpbWFnZUZvckZFQ29sb3JNYXRyaXgoY29uc3QgRkVDb2xvck1hdHJpeCYsIGNvbnN0IFZl
Y3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7Ci0gICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdl
Rm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVyJiwgVmVjdG9y
PFJldGFpblB0cjxDSUltYWdlPj4mKTsKLSAgICAKLSAgICBSZWZQdHI8SU9TdXJmYWNlSW1hZ2VC
dWZmZXI+IG1fb3V0cHV0SW1hZ2VCdWZmZXI7Ci0gICAgUmV0YWluUHRyPENJSW1hZ2U+IG1fb3V0
cHV0SW1hZ2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1Yzg2ZmM0YzIzYWY5NTQ1NTU3YTU1OGM4YzQ1MWUxOWE4YTM4
ZmI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKgotKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0q
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UuaCIKLQotI2lmIFVTRShDT1JFX0lNQUdFKQotCi0jaW1wb3J0ICJGRUNv
bG9yTWF0cml4LmgiCi0jaW1wb3J0ICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCi0jaW1wb3J0ICJG
aWx0ZXIuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdC5oIgotI2ltcG9ydCAiRmlsdGVyT3BlcmF0
aW9uLmgiCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbXBvcnQgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCi0jaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgot
I2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgotI2ltcG9ydCA8Q29yZUltYWdlL0NJQ29udGV4dC5o
PgotI2ltcG9ydCA8Q29yZUltYWdlL0NJRmlsdGVyLmg+Ci0jaW1wb3J0IDxDb3JlSW1hZ2UvQ29y
ZUltYWdlLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjp0cnlDcmVhdGUoRmlsdGVyRWZmZWN0JiBs
YXN0RWZmZWN0KQotewotICAgIGlmIChjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhsYXN0RWZmZWN0
KSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U+KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFpblB0cjxDSUNvbnRleHQ+IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzaGFyZWRDSUNvbnRleHQoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0lDb250ZXh0Pj4gY2lDb250ZXh0ID0gW0NJ
Q29udGV4dCBjb250ZXh0V2l0aE9wdGlvbnM6IEB7IGtDSUNvbnRleHRXb3JraW5nQ29sb3JTcGFj
ZTogKF9fYnJpZGdlIGlkKUNHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VT
UkdCKX1dOwotICAgIHJldHVybiBjaUNvbnRleHQ7Ci19Ci0KLXN0YXRpYyBib29sIGlzTnVsbE9y
TGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVy
JiBlZmZlY3QpCi17Ci0gICAgYXV0byBpc051bGxPckxpbmVhciA9IFtdIChjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikgewotICAgICAgICByZXR1cm4gZnVuY3Rpb24u
dHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTgotICAgICAgICAgICAgfHwg
ZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgIH07
Ci0gICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5yZWRGdW5jdGlvbigpKSAmJiBpc051
bGxPckxpbmVhcihlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKQotICAgICAgICAmJiBpc051bGxPckxp
bmVhcihlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpICYmIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5hbHBo
YUZ1bmN0aW9uKCkpOwotfQotCi1ib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpz
dXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKLXsKLSAgICAv
LyBGSVhNRTogY2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVt
ZW50ZWQKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgewotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1h
dHJpeDogewotICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCku
dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAg
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoK
LSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uKGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCkpOwotCi0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0
cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxhckxp
Z2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpTb3VyY2VBbHBoYToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZm
ZWN0cyhGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgbV9vdXRwdXRJbWFnZSA9IGNv
bm5lY3RDSUZpbHRlcnMobGFzdEVmZmVjdCk7Ci0gICAgaWYgKCFtX291dHB1dEltYWdlKQotICAg
ICAgICByZXR1cm47Ci0gICAgcmVuZGVyVG9JbWFnZUJ1ZmZlcihsYXN0RWZmZWN0KTsKLX0KLQot
UmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0
Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQotewotICAgIFZlY3RvcjxSZXRhaW5QdHI8
Q0lJbWFnZT4+IGlucHV0SW1hZ2VzOwotICAgIAotICAgIGZvciAoYXV0byBpbiA6IGVmZmVjdC5p
bnB1dEVmZmVjdHMoKSkgewotICAgICAgICBhdXRvIGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0
ZXJzKCppbik7Ci0gICAgICAgIGlmICghaW5wdXRJbWFnZSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICBpbnB1dEltYWdlcy5hcHBlbmQoaW5wdXRJbWFnZSk7Ci0gICAgfQot
ICAgIGVmZmVjdC5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIGVmZmVjdC5zZXRS
ZXN1bHRDb2xvclNwYWNlKGVmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIAotICAg
IGlmIChlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVm
ZmVjdENsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdy
YXBoaWM6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoZG93bmNhc3Q8U291
cmNlR3JhcGhpYz4oZWZmZWN0KSk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9y
TWF0cml4OgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4KGRvd25jYXN0PEZF
Q29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvckZFQ29t
cG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZmZWN0KSwgaW5w
dXRJbWFnZXMpOwotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aG9zZSBmaWx0ZXJzIHVzaW5n
IENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxpZCBDSUltYWdlCi0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZl
TWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxh
ckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpTb3VyY2VBbHBoYToKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGljKFNvdXJjZUdy
YXBoaWMmIGVmZmVjdCkKLXsKLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBlZmZlY3Qu
ZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoaXM8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpz
b3VyY2VJbWFnZSkpCi0gICAgICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhJT1N1cmZhY2U6
ZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkuc3VyZmFjZSgpLnN1
cmZhY2UoKV07Ci0gICAgCi0gICAgcmV0dXJuIFtDSUltYWdlIGltYWdlV2l0aENHSW1hZ2U6c291
cmNlSW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCldOwotfQot
Ci1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdl
Rm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0cml4JiBlZmZlY3QsIGNvbnN0IFZlY3Rv
cjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykKLXsKLSAgICBhdXRvIGlucHV0SW1h
Z2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKLQotICAgIGF1dG8gdmFsdWVzID0gRkVDb2xvck1hdHJp
eDo6bm9ybWFsaXplZEZsb2F0cyhlZmZlY3QudmFsdWVzKCkpOwotICAgIGZsb2F0IGNvbXBvbmVu
dHNbOV07Ci0gICAgCi0gICAgc3dpdGNoIChlZmZlY3QudHlwZSgpKSB7Ci0gICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0
ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgICAgICBicmVh
azsKLSAgICAKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAg
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywg
dmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfTUFUUklYOgotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFO
Q0VUT0FMUEhBOiAvLyBGSVhNRTogQWRkIEx1bWluYW5jZSB0byBBbHBoYSBJbXBsZW1lbnRhdGlv
bgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgCi0gICAgYXV0byAqY29sb3JN
YXRyaXhGaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07
Ci0gICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0KCkgZm9yS2V5
OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgewot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURTogewotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbMF0gWTpjb21wb25lbnRzWzFdIFo6
Y29tcG9uZW50c1syXSBXOjBdIGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICBbY29s
b3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNb
M10gWTpjb21wb25lbnRzWzRdIFo6Y29tcG9uZW50c1s1XSBXOjBdIGZvcktleTpAImlucHV0R1Zl
Y3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOmNvbXBvbmVudHNbNl0gWTpjb21wb25lbnRzWzddIFo6Y29tcG9uZW50c1s4XSBX
OjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIg
c2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAg
ICAgIFo6MCAgICAgICAgICAgICBXOjFdIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAg
ICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAg
ICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjBdIGZvcktleTpAImlu
cHV0Qmlhc1ZlY3RvciJdOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1
ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzBdICBZOnZhbHVlc1sxXSAgWjp2YWx1ZXNb
Ml0gIFc6dmFsdWVzWzNdXSAgZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07Ci0gICAgICAgIFtjb2xv
ck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzVdICBZ
OnZhbHVlc1s2XSAgWjp2YWx1ZXNbN10gIFc6dmFsdWVzWzhdXSAgZm9yS2V5OkAiaW5wdXRHVmVj
dG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6dmFsdWVzWzEwXSBZOnZhbHVlc1sxMV0gWjp2YWx1ZXNbMTJdIFc6dmFsdWVzWzEz
XV0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBz
ZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzE1XSBZOnZhbHVlc1sxNl0gWjp2
YWx1ZXNbMTddIFc6dmFsdWVzWzE4XV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9yIl07Ci0gICAgICAg
IFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVz
WzRdICBZOnZhbHVlc1s5XSAgWjp2YWx1ZXNbMTRdIFc6dmFsdWVzWzE5XV0gZm9yS2V5OkAiaW5w
dXRCaWFzVmVjdG9yIl07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X1VOS05PV046Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gY29s
b3JNYXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2U7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGNv
bnN0IEZFQ29tcG9uZW50VHJhbnNmZXImIGVmZmVjdCwgVmVjdG9yPFJldGFpblB0cjxDSUltYWdl
Pj4mIGlucHV0SW1hZ2VzKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlIHJlc3Qgb2Yg
RkVDb21wb25lbnRUcmFuc2ZlciBmdW5jdGlvbnMKLSAgICBBU1NFUlQoaXNOdWxsT3JMaW5lYXJD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGVmZmVjdCkpOwotCi0gICAgYXV0byBpbnB1dEltYWdl
ID0gaW5wdXRJbWFnZXMuYXQoMCk7Ci0gICAgYXV0byBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVy
V2l0aE5hbWU6QCJDSUNvbG9yUG9seW5vbWlhbCJdOwotICAgIAotICAgIFtmaWx0ZXIgc2V0VmFs
dWU6aW5wdXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFnZUtleV07Ci0gICAgCi0gICAg
YXV0byBzZXRDb2VmZmljaWVudHMgPSBbJl0gKE5TU3RyaW5nICprZXksIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAgICAgIGlmIChmdW5jdGlvbi50eXBl
ID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIpCi0gICAgICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpmdW5jdGlvbi5pbnRlcmNlcHQgWTpmdW5j
dGlvbi5zbG9wZSBaOjAgVzowXSBmb3JLZXk6a2V5XTsKLSAgICB9OwotICAgIHNldENvZWZmaWNp
ZW50cyhAImlucHV0UmVkQ29lZmZpY2llbnRzIiwgZWZmZWN0LnJlZEZ1bmN0aW9uKCkpOwotICAg
IHNldENvZWZmaWNpZW50cyhAImlucHV0R3JlZW5Db2VmZmljaWVudHMiLCBlZmZlY3QuZ3JlZW5G
dW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEJsdWVDb2VmZmljaWVudHMi
LCBlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0QWxw
aGFDb2VmZmljaWVudHMiLCBlZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKLSAgICAKLSAgICByZXR1
cm4gZmlsdGVyLm91dHB1dEltYWdlOwotfQotCi1ib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlOjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKLXsK
LSAgICBpZiAoIXN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKGVmZmVjdCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3Rz
KCkpIHsKLSAgICAgICAgaWYgKCFzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygqaW4pIHx8ICFj
YW5SZW5kZXJVc2luZ0NJRmlsdGVycygqaW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAotewotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlcmluZyAiIDw8IHRoaXMgPDwgIiB1c2luZyBDb3JlSW1h
Z2VcbiIpOwotICAgIHJldHVybiBtX291dHB1dEltYWdlQnVmZmVyLmdldCgpOwotfQotICAgIAot
dm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihG
aWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0g
SW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCksIGxh
c3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlm
ICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewotICAgICAgICBjbGVhclJlc3VsdCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgW3NoYXJlZENJQ29udGV4dCgpLmdldCgpIHJlbmRlcjog
bV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogbV9vdXRwdXRJbWFnZUJ1ZmZlci0+c3Vy
ZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFzdEVmZmVjdCkgY29sb3JTcGFjZTps
YXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKS5wbGF0Zm9ybUNvbG9yU3BhY2UoKV07Ci19Ci0g
ICAgCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNv
bnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGRlc3RT
aXplID0gbGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkZXN0U2l6
ZS5zY2FsZShsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0UmVj
dCBkZXN0UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RTaXplKTsKLSAgICByZXR1
cm4gZGVzdFJlY3Q7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNs
ZWFyUmVzdWx0KCkKLXsKLSAgICBtX291dHB1dEltYWdlQnVmZmVyID0gbnVsbHB0cjsKLSAgICBt
X291dHB1dEltYWdlID0gbnVsbHB0cjsKLX0KLQotRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCkKLSAgICA6IEZpbHRlckVmZmVjdFJl
bmRlcmVyKCkKLXsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyUmVzdWx0Q29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FiZTU2MWI3MDFi
Y2EwNWIyNDRlNTI1ZTE3OGVjMjRmNmRkZDFmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2Uu
aApAQCAtMCwwICsxLDU3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBt
ZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNpbXBvcnQgIkZpbHRlclJlc3VsdC5oIgorCitPQkpD
X0NMQVNTIENJSW1hZ2U7CitPQkpDX0NMQVNTIENJQ29udGV4dDsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UgOiBwdWJsaWMgRmlsdGVyUmVzdWx0
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdDsKKworICAg
IHZvaWQgc2V0SW1hZ2UoUmV0YWluUHRyPENJSW1hZ2U+JiYpOworICAgIAorcHJpdmF0ZToKKyAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgb3ZlcnJpZGU7Cisg
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJpZGU7CisKKyAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gbV9pbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6RmlsdGVyUmVzdWx0Q29yZUltYWdlKQorICAgIHN0YXRpYyBib29sIGlz
VHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0
LnJlbmRlcmluZ01vZGUoKSA9PSBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsg
fQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyUmVzdWx0Q29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyNzkyYjFhYmU5NzBkOGNkZjg5YWY4
NWE1OGQ1NGQ1YWI4MDBiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorCisj
aW1wb3J0IDxDb3JlSW1hZ2UvQ0lDb250ZXh0Lmg+CisjaW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUlt
YWdlLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIEZpbHRlclJlc3VsdENvcmVJbWFnZTo6c2V0SW1hZ2UoUmV0YWluUHRyPENJ
SW1hZ2U+JiYgaW1hZ2UpCit7CisgICAgQVNTRVJUKGltYWdlKTsKKyAgICBtX2ltYWdlID0gV1RG
TW92ZShpbWFnZSk7Cit9CisKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4mIEZpbHRlclJlc3VsdENvcmVJ
bWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cygpCit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXI7
Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U6OmltYWdlQnVmZmVyKCkK
K3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzVjNDg0OGEwMjczNTk4ZDA0NjFhZjkzZmMwMjI3YWQ2NDNiY2ZlZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFw
aGljQ29yZUltYWdlLm1tCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTb3VyY2VHcmFwaGljLmgiCisKKyNpZiBVU0Uo
Q09SRV9JTUFHRSkKKworI2ltcG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UoRmlsdGVy
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoc291cmNlSW1hZ2UpOworICAgIGlmICgh
c291cmNlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDSUlt
YWdlPiBpbWFnZTsKKyAgICBpZiAoaXM8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFn
ZSkpCisgICAgICAgIGltYWdlID0gW0NJSW1hZ2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0
PElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpLnN1cmZhY2UoKS5zdXJmYWNlKCld
OworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBbQ0lJbWFnZSBpbWFnZVdpdGhDR0ltYWdlOnNv
dXJjZUltYWdlLT5jb3B5TmF0aXZlSW1hZ2UoKS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKKwor
ICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBkb3duY2Fz
dDxGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U+KHJlc3VsdCkuc2V0SW1hZ2UoV1RGTW92ZShpbWFnZSkp
OworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9m
aWx0ZXJzL0ZFQmxlbmRORU9OLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
cHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAppbmRleCAyNjExMGNkZmIwYmI2Y2Y0OTA0NTgz
ODc3ODdhYzEwZmExNzFjZjE4Li5iM2QyYTU5NDY5NDIyMzUzMjM0MzkzMjg2NTZlOTY0ZTljMTZl
ZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJt
L2ZpbHRlcnMvRkVCbGVuZE5FT04uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaApAQCAtMTA3LDE1ICsxMDcsMTggQEAg
cHVibGljOgogICAgIH0KIH07CiAKLXZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK0ZpbHRlclJlc3VsdCogRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKEZpbHRlclJl
c3VsdHMmIHJlc3VsdHMsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIGF1
dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3Qo
KTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSByZXN1bHRzLmdldCh7ICp0aGlzIH0pKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyKCkuY3Jl
YXRlRmlsdGVyUmVzdWx0KGFic29sdXRlUGFpbnRSZWN0KCksIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgYXV0
byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcmVzdWx0LT5waXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJbnRSZWN0IGVm
ZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7CkBAIC0xMjksNyArMTMyLDcgQEAgdm9pZCBGRUJsZW5kOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgaWYgKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgg
Pj0gOCkgewogICAgICAgICBwbGF0Zm9ybUFwcGx5TkVPTihzb3VyY2VQaXhlbEFycmF5QS0+ZGF0
YSgpLCBzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0
YSgpLCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9CiAgICAgLy8gSWYgdGhlcmUgaXMganVzdCBv
bmUgcGl4ZWwgd2UgZXhwYW5kIGl0IHRvIHR3by4KICAgICBBU1NFUlQoc291cmNlUGl4ZWxBcnJh
eUxlbmd0aCA+IDApOwpAQCAtMTQwLDYgKzE0Myw4IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKICAgICBzb3VyY2VCQW5kRGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpKVswXTsKICAgICBwbGF0Zm9ybUFw
cGx5TkVPTihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VBKSwgcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oc291cmNlQkFuZERlc3QpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
Pihzb3VyY2VCQW5kRGVzdCksIDgpOwogICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBdOworCisg
ICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7CiB9CiAKIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1B
cHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNy
Y1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDVmMzZhOWMzYjcyZGE2MTljMjE4YmE4
MmY2ZjE4MGJkYmExNTIwOWIuLmUzNjlkMzMxNDgwYWUzMTFlYzEyMGJhOTcyMGRmYjQ1ZTk2ZjQ4
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTE4Miw2
ICsxODIsMTQgQEAgdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QKICAgICByZWNvcmREcmF3UGF0dGVy
bihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsK
IH0KIAordm9pZCBSZWNvcmRlcjo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKEZpbHRlciYsIEltYWdl
QnVmZmVyKiwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKQoreworLy8gICAgaWYg
KG1fZGVsZWdhdGUpCisvLyAgICAgICAgbV9kZWxlZ2F0ZS0+cmVjb3JkSW1hZ2VCdWZmZXJVc2Uo
KnNvdXJjZUltYWdlKTsKKy8vICAgIHJlY29yZEZpbHRlclVzZShmaWx0ZXIpOworLy8gICAgYXBw
ZW5kPERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oZmlsdGVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpLCBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGdlb21l
dHJ5KTsKK30KKwogdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7CiAgICAgcmVjb3JkU2F2ZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggNDg2NmM4MmNhYzk0MzBk
N2MzNzRhYzNmYTViZThjMDc3Y2Q5M2E0MS4uZDAxN2U2MDJiYzg4MWQzOGVjOTYyMWUyZDc4MTNm
N2M5YWMxM2Y4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0y
MzEsNiArMjMxLDggQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0
dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJikgZmluYWw7CisKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2NzA0Y2Q2
N2ZiMGE3YWZlOWFmMThmYmI2MmMyY2VkOS4uMTZkYTAyODBkMWE2ZjYyMGQ3Nzg0NWE2NDYxMzll
YTNlYzk1MzkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJp
Z2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsyNiw0NCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRORU9OLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+CisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQo
RmlsdGVyJiBmaWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRl
ciwgVHlwZTo6QmxlbmQpCi0gICAgLCBtX21vZGUobW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5k
OjpjcmVhdGUoQmxlbmRNb2RlIG1vZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVC
bGVuZChtb2RlKSk7CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQorRkVCbGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkK
KyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUJsZW5kKQorICAgICwgbV9tb2RlKG1vZGUpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChmaWx0ZXIsIG1vZGUpKTsKIH0KIAog
Ym9vbCBGRUJsZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCiB7Ci0gICAgaWYgKG1f
bW9kZSA9PSBtb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb2RlID0gbW9kZTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX21vZGUsIG1vZGUp
ICE9IG1fbW9kZTsKIH0KIAotI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZF
QmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFQmxlbmQ6OmFw
cGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91
bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwor
ICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwor
ICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0byByZXN1
bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVz
dWx0OwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQ
b2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4sIGluMiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQotI2VuZGlm
CiAKLVRleHRTdHJlYW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJl
YW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQmxlbmQi
OwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwogICAgIHRzIDw8ICIgbW9kZT1cIiIgPDwgKG1fbW9kZSA9PSBCbGVuZE1vZGU6Ok5v
cm1hbCA/ICJub3JtYWwiIDogY29tcG9zaXRlT3BlcmF0b3JOYW1lKENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VPdmVyLCBtX21vZGUpKSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5k
ZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmgKaW5kZXggNzBlODQwN2JmNWMyMDBkNDUyMTZiOGY5YzA4NTE3YjUwNzllNzk2Ni4u
YjVkOGFlNmExMjVjM2VmYzA5MWM3M2I0MGU5ZjU0NDU5NDNiNmIzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKQEAgLTMsNiAr
Myw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDMyICsyNSwyNyBAQAogCiAj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUJsZW5kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUJsZW5kPiBjcmVhdGUoRmlsdGVyJiwgQmxlbmRNb2Rl
KTsKKyAgICBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShCbGVuZE1vZGUpOwogCiAgICAgQmxl
bmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgc2V0
QmxlbmRNb2RlKEJsZW5kTW9kZSk7CiAKIHByaXZhdGU6CisgICAgRkVCbGVuZChCbGVuZE1vZGUp
OworCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RUJsZW5kIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJy
YXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4
ZWxBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlM
ZW5ndGgpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBk
c3RQaXhlbEFycmF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JB
cnJheUxlbmd0aCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBw
bHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgRkVCbGVuZChGaWx0ZXImLCBCbGVuZE1vZGUpOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBCbGVuZE1vZGUgbV9tb2Rl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRl
eCAzODA2NWNiOTZjN2I0YjRiMDNmYzZiMGVlZDg1YWM0YjZjOTY4YTU0Li5iZDk5MmZmNDAwNjU4
NWI3YzlhYTE1ODExZmUyYWRjY2UzMzMzY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTMs
NiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDI4ICsyNCwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUu
aD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29sb3JNYXRyaXg6OkZFQ29s
b3JNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8Zmxv
YXQ+JiYgdmFsdWVzKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29sb3JNYXRy
aXgpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVzKSkK
K1JlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBl
IHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVDb2xvck1hdHJpeCh0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAotUmVmPEZFQ29s
b3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQ29sb3JNYXRy
aXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCitGRUNvbG9yTWF0cml4OjpGRUNv
bG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQor
ICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29sb3JNYXRyaXgpCisgICAgLCBtX3R5cGUodHlw
ZSkKKyAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVzKSkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUNvbG9yTWF0cml4KGZpbHRlciwgdHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CiB9
CiAKIGJvb2wgRkVDb2xvck1hdHJpeDo6c2V0VHlwZShDb2xvck1hdHJpeFR5cGUgdHlwZSkKQEAg
LTYzLDI1OCArNTYsNDMgQEAgYm9vbCBGRUNvbG9yTWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVj
dG9yPGZsb2F0PiAmdmFsdWVzKQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBt
YXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhh
LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi17Ci0gICAgZmxvYXQgciA9IHJlZDsKLSAg
ICBmbG9hdCBnID0gZ3JlZW47Ci0gICAgZmxvYXQgYiA9IGJsdWU7Ci0gICAgZmxvYXQgYSA9IGFs
cGhhOwotCi0gICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2
YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKLSAgICBn
cmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlcyBbN10gKiBi
ICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OwotICAgIGJsdWUgICAgPSB2YWx1
ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNd
ICogYSArIHZhbHVlc1sxNF0gKiAyNTU7Ci0gICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsg
dmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVz
WzE5XSAqIDI1NTsKLX0KLQotaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMp
Cit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpCiB7Ci0gICAgZmxvYXQgciA9IHJlZDsKLSAgICBmbG9h
dCBnID0gZ3JlZW47Ci0gICAgZmxvYXQgYiA9IGJsdWU7Ci0KLSAgICByZWQgICAgID0gciAqIGNv
bXBvbmVudHNbMF0gKyBnICogY29tcG9uZW50c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOwotICAg
IGdyZWVuICAgPSByICogY29tcG9uZW50c1szXSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNv
bXBvbmVudHNbNV07Ci0gICAgYmx1ZSAgICA9IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBv
bmVudHNbN10gKyBiICogY29tcG9uZW50c1s4XTsKLX0KLQotLy8gRklYTUU6IHRoaXMgc2hvdWxk
IHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KLWlu
bGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVl
LCBmbG9hdCYgYWxwaGEpCi17Ci0gICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBn
cmVlbiArIDAuMDcyMSAqIGJsdWU7Ci0gICAgcmVkID0gMDsKLSAgICBncmVlbiA9IDA7Ci0gICAg
Ymx1ZSA9IDA7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLXRlbXBsYXRlPENvbG9yTWF0cml4
VHlwZSBmaWx0ZXJUeXBlPgotYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNv
bXBvbmVudHNbOV0sIEludFNpemUgYnVmZmVyU2l6ZSkKLXsKLSAgICBBU1NFUlQocGl4ZWxBcnJh
eS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOwotICAgIAotICAgIGlmIChmaWx0
ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKLSAgICAgICAgLy8gdkltYWdl
TWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUg
aW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKLSAgICAg
ICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCi0gICAgICAg
IGlmICh2YWx1ZXNbNF0gIT0gMCB8fCB2YWx1ZXNbOV0gIT0gMCB8fCB2YWx1ZXNbMTRdICE9IDAg
fHwgdmFsdWVzWzE5XSAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGNvbnN0IGludDMyX3QgZGl2aXNvciA9IDI1NjsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4
ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGgg
PSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0
KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICBzcmMu
ZGF0YSA9IGRhdGE7Ci0gICAgCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBidWZmZXJTaXplLmhl
aWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAg
IGRlc3QuZGF0YSA9IGRhdGE7Ci0KLSAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRy
aXhbNCAqIDRdID0gewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZh
bHVlc1sgMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWyA1XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNV0gKiBkaXZpc29yKSksCi0KLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDFdICogZGl2aXNvcikpLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNl0gKiBkaXZp
c29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEx
XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbMTZdICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYodmFsdWVzWyAyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDddICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMl0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE3XSAqIGRpdmlzb3IpKSwK
LQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgM10gKiBk
aXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVz
WyA4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbMTNdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sxOF0gKiBkaXZpc29yKSksCi0gICAgICAgIH07Ci0gICAgICAgIHZJ
bWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3Is
IG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7Ci0gICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4
WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21w
b25lbnRzWzBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKGNvbXBvbmVudHNbM10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAg
IDAsCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRz
WzFdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KGNvbXBvbmVudHNbNF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIDAsCi0K
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzJdICog
ZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBv
bmVudHNbNV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYoY29tcG9uZW50c1s4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIDAsCi0KLSAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIGRp
dmlzb3IsCi0gICAgICAgIH07Ci0gICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4
KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VO
b0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX0xVTUlOQU5DRVRPQUxQSEE6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAq
IDRdID0gewotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMjEyNSAqIGRpdmlzb3Ip
KSwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuNzE1NCAqIGRpdmlzb3IpKSwK
LQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMDcyMSAqIGRpdmlzb3IpKSwKLQot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgo
JnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5v
RmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0
cnVlOworICAgIGNvbXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVlKTsKKyAgICBj
b21wb25lbnRzWzFdID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1sy
XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbM10gPSAoMC4yMTMg
LSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsgMC4yODUgKiB2
YWx1ZSk7CisgICAgY29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAg
IGNvbXBvbmVudHNbNl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRz
WzddID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s4XSA9ICgwLjA3
MiArIDAuOTI4ICogdmFsdWUpOwogfQotI2VuZGlmCiAKLXRlbXBsYXRlPENvbG9yTWF0cml4VHlw
ZSBmaWx0ZXJUeXBlPgotdm9pZCBlZmZlY3RUeXBlKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFy
cmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIEludFNpemUgYnVmZmVyU2l6ZSkKK3Zv
aWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQgdmFsdWUpCiB7Ci0gICAgZmxvYXQgY29tcG9uZW50c1s5XTsKLQotICAg
IGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKLSAgICAgICAg
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZh
bHVlc1swXSk7Ci0gICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21w
b25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0KLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5
TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAg
IGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVl
cywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOwotI2VuZGlmCi0KLSAgICBzd2l0Y2ggKGZpbHRlclR5
cGUpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJh
eUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3Jl
ZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBm
bG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAg
ICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7
Ci0gICAgICAgICAgICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7Ci0g
ICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
OgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5
TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVl
biA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZs
b2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAg
ICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsK
LSAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBv
bmVudHMpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQp
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4p
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7
Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNl
dCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNl
dCArPSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbHVtaW5hbmNl
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0
ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0
ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRl
T2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAg
ICBmbG9hdCBjb3NIdWUgPSBjb3ModmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKKyAgICBmbG9hdCBz
aW5IdWUgPSBzaW4odmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKKyAgICBjb21wb25lbnRzWzBdID0g
MC4yMTMgKyBjb3NIdWUgKiAwLjc4NyAtIHNpbkh1ZSAqIDAuMjEzOworICAgIGNvbXBvbmVudHNb
MV0gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1IC0gc2luSHVlICogMC43MTU7CisgICAgY29tcG9u
ZW50c1syXSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgKyBzaW5IdWUgKiAwLjkyODsKKyAgICBj
b21wb25lbnRzWzNdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyArIHNpbkh1ZSAqIDAuMTQzOwor
ICAgIGNvbXBvbmVudHNbNF0gPSAwLjcxNSArIGNvc0h1ZSAqIDAuMjg1ICsgc2luSHVlICogMC4x
NDA7CisgICAgY29tcG9uZW50c1s1XSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgLSBzaW5IdWUg
KiAwLjI4MzsKKyAgICBjb21wb25lbnRzWzZdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyAtIHNp
bkh1ZSAqIDAuNzg3OworICAgIGNvbXBvbmVudHNbN10gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1
ICsgc2luSHVlICogMC43MTU7CisgICAgY29tcG9uZW50c1s4XSA9IDAuMDcyICsgY29zSHVlICog
MC45MjggKyBzaW5IdWUgKiAwLjA3MjsKIH0KIAotdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUNvbG9yTWF0cml4OjphcHBseShGaWx0
ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0
JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlm
IChpbkJ1ZmZlcikKLSAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZm
ZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBz
dGFjay50YWtlTGFzdCgpOwogCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJl
c3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0
SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKLSAgICBpZiAoIXBpeGVs
QnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxC
dWZmZXItPmRhdGEoKTsKLSAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZm
ZXItPnNpemUoKTsKLQotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0
cyhtX3ZhbHVlcyk7Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBF
X01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKLSAgICAg
ICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZh
bHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5z
aW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlO
QU5DRVRPQUxQSEE6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlO
QU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwot
ICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAg
ICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpw
aXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlw
ZSYgdHlwZSkKQEAgLTMzOSwxMCArMTE3LDkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKICAgICByZXR1
cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8
IGluZGVudCA8PCAiW2ZlQ29sb3JNYXRyaXgiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgdHlwZT1cIiIg
PDwgbV90eXBlIDw8ICJcIiI7CiAgICAgaWYgKCFtX3ZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgdHMgPDwgIiB2YWx1ZXM9XCIiOwpAQCAtMzU3LDkgKzEzNCw2IEBAIFRleHRTdHJlYW0mIEZF
Q29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJl
c2VudGF0aW9uCiAgICAgICAgIHRzIDw8ICJcIiI7CiAgICAgfQogICAgIHRzIDw8ICJdXG4iOwot
ICAgIAotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAyOWU0MWE4YWVkMWU0
ZjBiNTM5NzAzYWM0ZGI1NTI0ZWZhNGMxMjNmLi42ZDY1YmI1MzIxNjg2MTZkYzRmNWM3MzBmZGRh
ODg0ZDBmNTBjMThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNyArMzcs
NyBAQCBlbnVtIENvbG9yTWF0cml4VHlwZSB7CiAKIGNsYXNzIEZFQ29sb3JNYXRyaXggOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29sb3JNYXRyaXg+
IGNyZWF0ZShGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7CisgICAg
c3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8
ZmxvYXQ+JiYpOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KICAgICBib29sIHNldFR5cGUoQ29sb3JNYXRyaXhUeXBlKTsKQEAgLTQ2LDU0ICs0
NSwyMyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXM7IH0KICAgICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8Zmxv
YXQ+Jik7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25l
bnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Ci0gICAgc3RhdGljIGlubGluZSB2
b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0
IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxv
YXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVI
dWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAg
c3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+
JiB2YWx1ZXMpOwogCiBwcml2YXRlOgotICAgIEZFQ29sb3JNYXRyaXgoRmlsdGVyJiwgQ29sb3JN
YXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRy
aXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbG9yTWF0cml4IjsgfQogCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZp
bHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYs
IGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIG1fdHlwZTsKICAgICBWZWN0
b3I8ZmxvYXQ+IG1fdmFsdWVzOwogfTsKIAotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2Fs
Y3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkK
LXsKLSAgICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2YWx1ZSk7Ci0gICAgY29t
cG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMl0g
PSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzNdID0gKDAuMjEzIC0g
MC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s0XSA9ICgwLjcxNSArIDAuMjg1ICogdmFs
dWUpOwotICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBj
b21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s3
XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbOF0gPSAoMC4wNzIg
KyAwLjkyOCAqIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCi17
Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgZmxv
YXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgY29tcG9uZW50c1sw
XSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKLSAgICBjb21wb25l
bnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNv
bXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7Ci0g
ICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0
MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAq
IDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2lu
SHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMg
LSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAw
LjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1
ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXgp
Ci0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZm
ZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19FTkQoKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCA4NDdlYTU4ZjVm
OWIwMzg2NmQ5ZWFjNTdmMTBjY2Y1NzQwMmY5ZTYzLi43OTQxYjg5OTdlZDU5ZGFlOWFhYjRmYmZl
YWU2M2ZkNmJmOTY1MDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKQEAgLTQs
NiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxOCArMjUsMjAgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCiAK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5j
bHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0VmVjdG9yLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAgIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6
OkNvbXBvbmVudFRyYW5zZmVyKQorUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5j
dGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIocmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24sIGJs
dWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOworfQorCitGRUNvbXBvbmVudFRyYW5zZmVyOjpG
RUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1
bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBGaWx0ZXJFZmZlY3Qo
VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKICAgICAsIG1fcmVkRnVuY3Rpb24ocmVkRnVuY3Rp
b24pCiAgICAgLCBtX2dyZWVuRnVuY3Rpb24oZ3JlZW5GdW5jdGlvbikKICAgICAsIG1fYmx1ZUZ1
bmN0aW9uKGJsdWVGdW5jdGlvbikKQEAgLTQzLDExOSArNDYsMTUgQEAgRkVDb21wb25lbnRUcmFu
c2Zlcjo6RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXIKIHsKIH0KIAotUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
Z3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIoZmlsdGVyLCByZWRG
dW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7Ci19
Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3Vw
VGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKLXsKLX0KLQotdm9pZCBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1
ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCitG
aWx0ZXJSZXN1bHQqIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0
cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0
KSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNm
ZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6
ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAgICAgcmV0dXJuOyAgICAgICAgICAgIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91
YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBrID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0g
dGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWlu
KChrICsgMSksIChuIC0gMSkpXTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsg
KGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgw
LjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkp
OworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi12b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVz
OwotICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7Ci0gICAgaWYgKG4gPCAxKQot
ICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChp
ICogbikgLyAyNTUuMCk7Ci0gICAgICAgIGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7Ci0gICAgICAg
IGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVlc1trXTsKLSAgICAgICAgdmFsID0gc3RkOjpt
YXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91
dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAK
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUg
KiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4w
LCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0
cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEg
ZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBw
b3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAg
ICBMb29rdXBUYWJsZSByZWRUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBncmVlblRhYmxlOwotICAg
IExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlOwotICAg
IGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxw
aGFUYWJsZSk7Ci0KLSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVu
bXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxl
bmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRh
ID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVs
T2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBp
eGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtk
YXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVu
VGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCAr
IDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07Ci0gICAgICAgIGRhdGFbcGl4
ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsKLSAgICB9
Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29r
dXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYg
Ymx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVkVGFibGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlZFRhYmxlW2ldID0g
Z3JlZW5UYWJsZVtpXSA9IGJsdWVUYWJsZVtpXSA9IGFscGhhVGFibGVbaV0gPSBpOwotCi0gICAg
dXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsK
LSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAg
IC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRlRGlzY3Jl
dGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAg
Y29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVB
UgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfR0FNTUEKLSAgICB9OwotCi0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xF
TkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
c3RhdGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVO
R1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihz
dGF0aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdU
SChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3Rh
dGljX2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RI
KGNhbGxFZmZlY3QpKTsKLQotICAgIGNhbGxFZmZlY3RbbV9yZWRGdW5jdGlvbi50eXBlXShyZWRU
YWJsZSwgbV9yZWRGdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2dyZWVuRnVuY3Rpb24udHlw
ZV0oZ3JlZW5UYWJsZSwgbV9ncmVlbkZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fYmx1ZUZ1
bmN0aW9uLnR5cGVdKGJsdWVUYWJsZSwgbV9ibHVlRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3Rb
bV9hbHBoYUZ1bmN0aW9uLnR5cGVdKGFscGhhVGFibGUsIG1fYWxwaGFGdW5jdGlvbik7CisgICAg
cmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBi
b3VuZGFyeVNldCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBDb21wb25lbnRUcmFuc2ZlclR5cGUgdHlwZSkKQEAgLTIwOSwxMCArMTA4LDkgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGYKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0m
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W2ZlQ29tcG9uZW50VHJhbnNmZXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICJcbiI7CiAgICAgewogICAg
ICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgMik7CkBAIC0yMjEs
OSArMTE5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW4KICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJ7Ymx1ZTogIiA8PCBtX2JsdWVGdW5jdGlvbiA8PCAifVxuIjsKICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJ7YWxwaGE6ICIgPDwgbV9hbHBoYUZ1bmN0aW9uIDw8ICJ9XVxuIjsKICAgICB9
Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5w
dXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggMmI1
ODZkZWY3ZmI0MmEzN2IyZTEyM2VkYTg3MTE5YzRlYjM0OGE1MS4uN2QwMDY4NzIyMjBkOGIwNDcy
ZGIyNzJmMTliZTE2ODE2OTRmMjU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAg
LTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDkg
KzI0LDYgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVu
dW0gQ29tcG9uZW50VHJhbnNmZXJUeXBlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVi
bGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRy
YW5zZmVyPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
cmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBhbHBoYUZ1bmMpOworICAgIHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRl
KGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGFscGhhRnVuY3Rpb24pOwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRG
dW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuRnVu
Y3Rpb247IH0KQEAgLTYyLDI0ICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBhbHBoYUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1bmN0aW9u
OyB9CiAKIHByaXZhdGU6Ci0gICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBncmVlbkZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgYWxwaGFGdW5jKTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVDb21wb25l
bnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKTsKIAotICAgIHVzaW5nIExvb2t1cFRhYmxlID0g
c3RkOjphcnJheTx1aW50OF90LCAyNTY+OworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KIAotICAgIHN0YXRp
YyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUo
TG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3Rh
dGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxl
KExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0
YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0
JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRh
YmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9v
a3VwVGFibGUmIGFscGhhVGFibGUpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1
bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fcmVkRnVuY3Rpb247
CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX2dyZWVuRnVuY3Rpb247CkBAIC04OCw3
ICs3NiwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKLSAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3Qp
IHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhiNTllNjZkZTlmZThkNjM5MTZjYmU1Y2U2
ZGQ0MDM4ZmE0Y2IyYTguLjZjOTNjZmJlNzg5NDI2NmUwNmExNDkwOWRlZTM2ZjkwMzUyNjc5ZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjQsMTcgKzI1LDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05FT04uaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVk
ZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZp
bHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlwZSkKK1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21w
b3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9h
dCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVPcGVyYXRvciwgazEsIGsyLCBrMywgazQpKTsK
K30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAg
IDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29tcG9zaXRlKQorICAgICwgbV9jb21wb3NpdGVPcGVy
YXRvcihjb21wb3NpdGVPcGVyYXRvcikKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQog
ICAgICwgbV9rMyhrMykKQEAgLTQyLDI2NCArNDYsNjIgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9z
aXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBm
bG8KIHsKIH0KIAotUmVmPEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RUNvbXBvc2l0ZShmaWx0ZXIsIHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVD
b21wb3NpdGU6OnNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCitib29s
IEZFQ29tcG9zaXRlOjpzZXRDb21wb3NpdGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wZXJhdG9yKQogewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV9jb21wb3NpdGVPcGVyYXRvciwgY29tcG9zaXRlT3BlcmF0b3Ip
ICE9IG1fY29tcG9zaXRlT3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZs
b2F0IGsxKQogewotICAgIGlmIChtX2sxID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV9rMSA9IGsxOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdl
KG1fazEsIGsxKSAhPSBtX2sxOwogfQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMihmbG9hdCBr
MikKIHsKLSAgICBpZiAobV9rMiA9PSBrMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
azIgPSBrMjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2sy
LCBrMikgIT0gbV9rMjsKIH0KIAogYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzMoZmxvYXQgazMpCiB7
Ci0gICAgaWYgKG1fazMgPT0gazMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2szID0g
azM7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMywgazMp
ICE9IG1fazM7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogewotICAg
IGlmIChtX2s0ID09IGs0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rNCA9IGs0Owot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazQsIGs0KSAhPSBt
X2s0OwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KQorRmxvYXRSZWN0IEZFQ29tcG9zaXRlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBpZiAobV90eXBlICE9IEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZv
cmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci19Ci0gICAgCi1zdGF0aWMgdW5zaWduZWQg
Y2hhciBjbGFtcEJ5dGUoaW50IGMpCi17Ci0gICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKLSAgICB1bnNpZ25lZCB1YyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKLSAgICByZXR1cm4gYnVmZlshISh1YyAmIH4weGZm
KSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKLX0KLQotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0
Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVkIGNo
YXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVu
Z3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9h
dCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAgICAgIHNj
YWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRLNCA9IGs0
ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGky
ID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBp
MjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEg
KiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0Owot
Ci0gICAgICAgICpkZXN0aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOwotICAgICAgICArK3Nv
dXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLS8vIGNvbXB1dGVBcml0
aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0ZUFyaXRo
bWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwotLy8gaXMgbm90
IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6YXRpb25z
IHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgot
c3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFy
cmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAg
ICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAg
ICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRL
NCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBj
aGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsg
azMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsx
ICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxl
ZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IHJlc3VsdDsKLSAgICAgICAgKytzb3VyY2U7
Ci0gICAgICAgICsrZGVzdGluYXRpb247Ci0gICAgfQotfQotCi0jaWYgIUhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWdu
ZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJy
YXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewotICAg
IGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6Om1heCgwLjBmLCBr
MikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBrNDsKLSAgICBmbG9hdCBsb3dlckxpbWl0ID0gc3Rk
OjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjptaW4oMC4wZiwgazMp
ICsgazQ7Ci0gICAgaWYgKChrNCA+PSAwLjBmICYmIGs0IDw9IDEuMGYpICYmICh1cHBlckxpbWl0
ID49IDAuMGYgJiYgdXBwZXJMaW1pdCA8PSAxLjBmKSAmJiAobG93ZXJMaW1pdCA+PSAwLjBmICYm
IGxvd2VyTGltaXQgPD0gMS4wZikpIHsKLSAgICAgICAgaWYgKGs0KSB7Ci0gICAgICAgICAgICBp
ZiAoazEpCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8
MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywg
azQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzVW5jbGFtcGVkPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChr
MSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwxLCAw
Pihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHNVbmNsYW1wZWQ8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwg
azEsIGsyLCBrMywgazQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoazQpIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0
aWNQaXhlbHM8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEs
IGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRp
Y1BpeGVsczwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
b21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFy
cmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfQotfQotI2VuZGlmCisgICAgLy8gRm9y
IEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQg
b2YKKyAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBh
aW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KKyAgICBpZiAobV9jb21wb3NpdGVP
cGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiB8fCBtX2NvbXBvc2l0ZU9wZXJhdG9y
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1ApCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5j
bGlwVG9QcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzWzFdLT5kcmF3aW5nUmVjdCgpLCBwcmltaXRp
dmVTdWJyZWdpb24pOwogCi1pbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1l
dGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKLXsKLSAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOwotICAgIEFTU0VSVChsZW5n
dGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0aW5hdGlvbi5sZW5ndGgoKSkpOwotICAgIC8vIFRo
ZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkuCi0j
aWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIEFTU0VSVCghKGxlbmd0aCAmIDB4Mykp
OwotICAgIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24u
ZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSNlbHNlCi0gICAgYXJpdGhtZXRpY1Nv
ZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIs
IGszLCBrNCk7Ci0jZW5kaWYKLX0KKyAgICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0aGUg
Y29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKKyAgICAvLyBvcHRp
bWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0b3Ig
PT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICAgICAgcmV0dXJuIHByaW1p
dGl2ZVN1YnJlZ2lvbjsKIAotdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9JTjoKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAg
IC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0aGUg
cmVzdWx0IG9mCi0gICAgICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUg
YWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgotICAgICAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgxKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgotICAgICAgICAvLyBBcml0aG1l
dGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28g
d2UgY2FuJ3QKLSAgICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAg
ICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3Qo
KSkpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGFrZSB0aGUg
dW5pb24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgcmV0
dXJuIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoaW5wdXRzLCBnZW9tZXRyeSwgcHJpbWl0aXZl
U3VicmVnaW9uKTsKIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK0ZpbHRlclJlc3VsdCogRkVDb21wb3NpdGU6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBj
b25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgaWYgKG1fdHlwZSA9PSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICAgICAg
aWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICAg
ICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBp
eGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotCi0g
ICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0
aW5hdGlvblBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0g
ICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KTsKLQotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICBy
ZXR1cm47CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBz
dGFjay50YWtlTGFzdCgpOworICAgIAorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1
bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzd2l0
Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5
IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25S
ZWN0ID0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25S
ZWN0LmludGVyc2VjdChhYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0
aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBh
ZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRS
ZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRp
b25SZWN0IC0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50
UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJl
Y3QoKS5sb2NhdGlvbigpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJl
Y3Qoc291cmNlMlJlY3QpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJl
Y3Qoc291cmNlUmVjdCksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwg
aW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0
aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
VE9QOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIy
LCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwot
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KElu
dFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZUF0b3ApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX1hPUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkp
KTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVj
dChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJh
dG9yOjpYT1IpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X0xJR0hURVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwg
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJl
Y3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVy
YXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluLCBp
bjIgfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRkVDb21wb3NpdGVPcGVyYXRvciYgY29tcG9zaXRlT3BlcmF0b3IpCiB7Ci0gICAg
c3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRvcikgewogICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04i
OwogICAgICAgICBicmVhazsKQEAgLTMyOCwxOCArMTMwLDEzIEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBl
JiB0eXBlCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNvbXBvc2l0ZTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJl
cHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVDb21wb3NpdGU6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAog
ewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29tcG9zaXRlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAi
IG9wZXJhdGlvbj1cIiIgPDwgbV90eXBlIDw8ICJcIiI7Ci0gICAgaWYgKG1fdHlwZSA9PSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAgIHRzIDw8ICIgb3BlcmF0aW9uPVwiIiA8
PCBtX2NvbXBvc2l0ZU9wZXJhdG9yIDw8ICJcIiI7CisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0
b3IgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKICAgICAgICAgdHMgPDwgIiBr
MT1cIiIgPDwgbV9rMSA8PCAiXCIgazI9XCIiIDw8IG1fazIgPDwgIlwiIGszPVwiIiA8PCBtX2sz
IDw8ICJcIiBrND1cIiIgPDwgbV9rNCA8PCAiXCIiOwogICAgIHRzIDw8ICJdXG4iOwotCi0gICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0
KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5w
dXRFZmZlY3QoMSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1
OGUzYTM3YzMyYWUyZjc2YWVhMGMzLi44ZjdiNTUxZGM5NmQxZmQ3N2MzYjE5ODE3ZjZlMWZmNGQ2
YjEyNWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMywxMiArMjQsOSBAQAogCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5
cGUgeworZW51bSBGRUNvbXBvc2l0ZU9wZXJhdG9yIHsKICAgICBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9VTktOT1dOICAgID0gMCwgCiAgICAgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUiAgICAgICA9
IDEsCiAgICAgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU4gICAgICAgICA9IDIsCkBAIC00MSwxMCAr
MzksMTAgQEAgZW51bSBDb21wb3NpdGVPcGVyYXRpb25UeXBlIHsKIAogY2xhc3MgRkVDb21wb3Np
dGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29t
cG9zaXRlPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBj
cmVhdGUoRkVDb21wb3NpdGVPcGVyYXRvciwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywg
ZmxvYXQgazQpOwogCi0gICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRpb25UeXBlKTsKKyAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvcjsgfQorICAgIGJvb2wgc2V0Q29tcG9z
aXRlT3BlcmF0b3IoRkVDb21wb3NpdGVPcGVyYXRvcik7CiAKICAgICBmbG9hdCBrMSgpIGNvbnN0
IHsgcmV0dXJuIG1fazE7IH0KICAgICBib29sIHNldEsxKGZsb2F0KTsKQEAgLTU4LDMwICs1Niwy
MyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgazQoKSBjb25zdCB7IHJldHVybiBtX2s0OyB9CiAgICAg
Ym9vbCBzZXRLNChmbG9hdCk7CiAKLXByb3RlY3RlZDoKLSAgICBib29sIHJlcXVpcmVzVmFsaWRQ
cmVNdWx0aXBsaWVkUGl4ZWxzKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlICE9IEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KLQogcHJpdmF0ZToKLSAgICBGRUNvbXBvc2l0ZShG
aWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQpOworICAgIEZFQ29tcG9zaXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsx
LCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUiOyB9CiAKLSAgICB2b2lk
IGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZp
bHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29m
dHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7Cisg
ICAgYm9vbCBhcHBseUFyaXRobWV0aWNTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAg
ICBib29sIGFwcGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Owor
ICAgIAorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5T
SUNTKQotICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLSAgICBzdGF0aWMgaW5saW5lIHZv
aWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXJpdGht
ZXRpY05lb24oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxv
YXQgazQpOwotI2VuZGlmCi0KLSAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIG1fdHlwZTsKKyAg
ICBGRUNvbXBvc2l0ZU9wZXJhdG9yIG1fY29tcG9zaXRlT3BlcmF0b3I7CiAgICAgZmxvYXQgbV9r
MTsKICAgICBmbG9hdCBtX2syOwogICAgIGZsb2F0IG1fazM7CkBAIC04OSw0ICs4MCwzIEBAIHBy
aXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwCmluZGV4IDc1YjJlN2M2ZWExM2MyYzFjMmY4ZjY1ZDNkYjRlZDVjYzNhZmRhOGYuLjdl
OGQxZmVjMjE2YmIyMDFlOTQ3ZjcyNWNkODdiZjZkOTNmMTcxYjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVn
IDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE4ICsyNSwx
OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIK
IAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNs
dWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNv
bnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRT
aXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IElu
dFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBG
bG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5
cGU6OkNvbnZvbHZlTWF0cml4KQorUmVmPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRy
aXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1v
ZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBo
YSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoa2VybmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFy
Z2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwgcHJlc2VydmVBbHBoYSwga2Vy
bmVsTWF0cml4KSk7Cit9CisKK0ZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoY29u
c3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3Qg
SW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbnZv
bHZlTWF0cml4KQogICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAgICAgLCBtX2Rpdmlz
b3IoZGl2aXNvcikKICAgICAsIG1fYmlhcyhiaWFzKQpAQCAtNDksMTQgKzUxLDYgQEAgRkVDb252
b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6
ZSYga2VybmVsU2l6ZSwKICAgICBBU1NFUlQobV9rZXJuZWxTaXplLmhlaWdodCgpID4gMCk7CiB9
CiAKLVJlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwg
ZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJl
c2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoZmlsdGVyLCBrZXJuZWxTaXplLCBk
aXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAot
ICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKLX0KLQogdm9pZCBGRUNvbnZv
bHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUpCiB7CiAg
ICAgQVNTRVJUKGtlcm5lbFNpemUud2lkdGgoKSA+IDApOwpAQCAtMTIwLDMxOCArMTE0LDIwIEBA
IGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxw
aGEpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgICAgQ29udm9sdmVNYXRyaXggaW1wbGVtZW50YXRpb24KLSAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIFRoZSBpbWFnZSByZWN0YW5n
bGUgaXMgc3BsaXQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLSAgICAgICstLS0tLS0tLS0tLS0t
LS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEEgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8Ci0gICAgICB8IEIg
fCAgICAgIEMgICAgICB8IEQgfAotICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKLSAgICAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEUgICAgICAgICAgfAot
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgV2hlcmUgcmVnaW9uIEMgY29udGFp
bnMgdGhvc2UgcGl4ZWxzLCB3aG9zZSB2YWx1ZXMKLSAgIGNhbiBiZSBjYWxjdWxhdGVkIHdpdGhv
dXQgY3Jvc3NpbmcgdGhlIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZS4KLQotICAgRXhhbXBsZToKLSAg
ICAgIEltYWdlIHNpemU6IHdpZHRoOiAxMCwgaGVpZ2h0OiAxMAotCi0gICAgICBPcmRlciAoa2Vy
bmVsIG1hdHJpeCBzaXplKTogd2lkdGg6IDMsIGhlaWdodCA0Ci0gICAgICBUYXJnZXQ6IHg6MSwg
eTozCi0KLSAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSB0YXJnZXQgaW5zaWRl
IHRoZSBrZXJuZWwgbWF0cml4OgotCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAg
Li4uCi0gICAgICAgIC5YLgotCi0gICBUaGUgcmVnaW9ucyBpbiB0aGlzIGNhc2UgYXJlIHRoZSBm
b2xsb3dpbmc6Ci0gICAgICBOb3RlOiAoeDEsIHkxKSB0b3AtbGVmdCBhbmQgKHgyLCB5MikgaXMg
dGhlIGJvdHRvbS1yaWdodCBjb3JuZXIKLSAgICAgIE5vdGU6IHJvdyB4MiBhbmQgY29sdW1uIHky
IGlzIG5vdCBwYXJ0IG9mIHRoZSByZWdpb24KLSAgICAgICAgICAgIG9ubHkgdGhvc2UgKHgsIHkp
IHBpeGVscywgd2hlcmUgeDEgPD0geCA8IHgyIGFuZCB5MSA8PSB5IDwgeTIKLQotICAgICAgUmVn
aW9uIEE6IHgxOiAwLCB5MTogMCwgeDI6IDEwLCB5MjogMwotICAgICAgUmVnaW9uIEI6IHgxOiAw
LCB5MTogMywgeDI6IDEsIHkyOiAxMAotICAgICAgUmVnaW9uIEM6IHgxOiAxLCB5MTogMywgeDI6
IDksIHkyOiAxMAotICAgICAgUmVnaW9uIEQ6IHgxOiA5LCB5MTogMywgeDI6IDEwLCB5MjogMTAK
LSAgICAgIFJlZ2lvbiBFOiB4MTogMCwgeTE6IDEwLCB4MjogMTAsIHkyOiAxMCAoZW1wdHkgcmVn
aW9uKQotCi0gICBTaW5jZSByZWdpb24gQyAob2Z0ZW4pIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIHBp
eGVscywgd2UgaW1wbGVtZW50ZWQKLSAgIGEgZmFzdCBhbGdvcml0bSB0byBjYWxjdWxhdGUgdGhl
c2UgdmFsdWVzLCBjYWxsZWQgZmFzdFNldEludGVyaW9yUGl4ZWxzLgotICAgRm9yIG90aGVyIHJl
Z2lvbnMsIGZhc3RTZXRPdXRlclBpeGVscyBpcyB1c2VkLCB3aGljaCBjYWxscyBnZXRQaXhlbFZh
bHVlLAotICAgdG8gaGFuZGxlIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBpbWFnZS4gSW4gYSByYXJl
IHNpdHVhdGlvbnMsIHdoZW4KLSAgIGtlcm5lbCBtYXRyaXggaXMgYmlnZ2VyIHRoYW4gdGhlIGlt
YWdlLCBhbGwgcGl4ZWxzIGFyZSBjYWxjdWxhdGVkIGJ5IHRoaXMKLSAgIGZ1bmN0aW9uLgotCi0g
ICBBbHRob3VnaCB0aGVzZSB0d28gZnVuY3Rpb25zIGhhdmUgbG90IGluIGNvbW1vbiwgSSBkZWNp
ZGVkIG5vdCB0byBtYWtlCi0gICBjb21tb24gYSB0ZW1wbGF0ZSBmb3IgdGhlbSwgc2luY2UgdGhl
cmUgYXJlIGtleSBkaWZmZXJlbmNlcyBhcyB3ZWxsLAotICAgYW5kIHdvdWxkIG1ha2UgaXQgcmVh
bGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4KLSovCi0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2ln
bmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtYXgg
PSAyNTUpCitGbG9hdFJlY3QgRkVDb252b2x2ZU1hdHJpeDo6ZHJhd2luZ1JlY3QoY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBpZiAoY2hhbm5lbCA8PSAwKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCi0gICAgICAgIHJldHVybiBt
YXg7Ci0gICAgcmV0dXJuIGNoYW5uZWw7CisgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsK
IH0KIAotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2
b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQ
aXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCog
dG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzKQorRmlsdGVyUmVzdWx0KiBGRUNvbnZv
bHZlTWF0cml4OjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNv
bnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICB1bnNpZ25l
ZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZh
bHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgY2xhbXBSR0JBVmFsdWUo
dG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7Ci0KLSAgICBpZiAocHJlc2Vy
dmVBbHBoYVZhbHVlcykgewotICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCwgc291cmNlUGl4
ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAgICAgKytwaXhlbDsKLSAgICB9IGVsc2UKLSAgICAgICAg
ZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwotfQotCi0jaWYgQ09NUElMRVIoTVNW
QykKLS8vIEluY29ycmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRlIG9mIHN0YWNrIGluIHx0b3Rh
bHN8IGR1ZSB0byB8cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkK
LSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlmCi0KLS8vIE9ubHkgZm9yIHJl
Z2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5F
IHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFy
dCwgaW50IHlFbmQpCi17Ci0gICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBw
aXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRh
LndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAgaW50IGtlcm5lbEluY3JlYXNl
ID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53aWR0
aCgpIC0gMSkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVu
dHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsK
LQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7Ci0KLSAgICAvLyBTa2lwIHRo
ZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKLSAgICBwaXhlbCArPSAoY2xpcEJv
dHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwotICAgIGlu
dCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAo
Y2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQotICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+IHlT
dGFydDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsg
LS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtl
cm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7
CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtl
TGFzdCgpOwogCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAgdG90YWxz
WzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBpZiAoIXBy
ZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKyAgICBp
ZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkg
ewotICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4
W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxB
cnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAg
ICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVs
VmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0
ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZh
bHVlcykKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJu
ZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5l
bFBpeGVsOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAg
aWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsICs9IGtlcm5l
bEluY3JlYXNlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0
aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0
RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4ocGFpbnRpbmdEYXRhLnNyY1Bp
eGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rp
dmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKLSAgICAgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwg
Kz0gNDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0
YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSBp
bnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgaW50IHgsIGludCB5KQotewotICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0
YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJl
dHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKG1f
ZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9OT05FCi0gICAgICAgIHJldHVy
biAtMTsKLSAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKLSAgICAgICAgaWYgKHggPCAwKQot
ICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHggPj0gcGFpbnRpbmdEYXRhLndp
ZHRoKQotICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7Ci0gICAgICAgIGlm
ICh5IDwgMCkKLSAgICAgICAgICAgIHkgPSAwOwotICAgICAgICBlbHNlIGlmICh5ID49IHBhaW50
aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgICAgICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIDE7
Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAg
Y2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAgICB3aGlsZSAoeCA8IDApCi0gICAgICAgICAgICB4
ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICAgICAgeCAlPSBwYWludGluZ0RhdGEud2lkdGg7
Ci0gICAgICAgIHdoaWxlICh5IDwgMCkKLSAgICAgICAgICAgIHkgKz0gcGFpbnRpbmdEYXRhLmhl
aWdodDsKLSAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0OwotICAgICAgICByZXR1cm4g
KHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAgIH0KLX0KLQotLy8gRm9yIG90
aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci12
b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIGludCBw
aXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAqIDQ7Ci0gICAgaW50IGhlaWdo
dCA9IHkyIC0geTE7Ci0gICAgaW50IHdpZHRoID0geDIgLSB4MTsKLSAgICBpbnQgYmVnaW5LZXJu
ZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQ
aXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5
MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsKLSAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0
YS53aWR0aCAtIHdpZHRoKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkg
Y29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAw
IDogMSldOwotCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9kaXZpc29yKTsKLQotICAgIGZv
ciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHdp
ZHRoOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4
ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0g
c3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUu
d2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFs
c1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFw
cmVzZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7Ci0KLSAg
ICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaW50
IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBr
ZXJuZWxQaXhlbFkpOwotICAgICAgICAgICAgICAgIGlmIChwaXhlbEluZGV4ID49IDApIHsKLSAg
ICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMSkpOwotICAg
ICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtr
ZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXkuaXRlbShwaXhlbEluZGV4ICsgMikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQotICAgICAg
ICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJu
ZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXku
aXRlbShwaXhlbEluZGV4ICsgMykpOwotICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwot
ICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdp
ZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4
ZWxYOwotICAgICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAg
ICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZl
QWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0
UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcyk7
Ci0gICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICB9Ci0gICAgICAgIHBp
eGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5l
bFBpeGVsWDsKLSAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsKLSAgICB9Ci19Ci0KLSNpZiBD
T01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8gRGlzYWJsZSBvZiA0Nzg5Ci0j
ZW5kaWYKLQotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9y
UGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xp
cEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8gTXVzdCBiZSBpbXBsZW1l
bnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdBWVNfSU5MSU5FCi0gICAgLy8g
ZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291cmNlIGZpbGUgYXMgd2VsbAot
ICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczx0
cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsK
LSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczxmYWxzZT4ocGFpbnRpbmdE
YXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIC8v
IEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRvIHRoZSBoZWFkZXIsIGl0IGlz
IGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldEludGVyaW9yUGl4ZWxzIGlzIGFs
c28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZh
c3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKLSAg
ICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCB4
MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0K
LSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0KLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7Ci0gICAgaWYgKG1f
cHJlc2VydmVBbHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQo
ZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFzb3Vy
Y2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9
IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIo
KS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7Ci0g
ICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXks
Ci0gICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAotICAgICAgICBwYWludFNpemUuaGVpZ2h0KCks
Ci0gICAgICAgIG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9ybWFsaXplZEZsb2F0cyhtX2tlcm5l
bE1hdHJpeCkKLSAgICB9OwotCi0gICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwot
ICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0
aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxT
aXplLmhlaWdodCgpOwotCi0gICAgaWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDAp
IHsKLSAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAot
ICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0
aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIGFic29s
dXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbikgewotICAg
ICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlvbnM7Ci0gICAgICAgIGludCBj
aHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAvIHN0cmlkZTsKLQotICAgICAg
ICBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShjaHVua0NvdW50LCBbJl0oc2l6ZV90IGluZGV4
KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAqIGluZGV4KTsKLSAgICAgICAg
ICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAoaW5kZXggKyAxKSwgY2xpcEJv
dHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xp
cFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAgICAgICB9KTsKLSAgICB9IGVs
c2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNs
aXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zm
c2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwot
ICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkp
OwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBzZXRP
dXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgp
LCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQot
ICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0Lnko
KSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAgICBpZiAoY2xpcFJpZ2h0IDwg
cGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwg
Y2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90
dG9tKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwg
Z2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkKQEAgLTQ1MywxMCAr
MTQ5LDkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZF
Q29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29u
dm9sdmVNYXRyaXgiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgb3JkZXI9XCIiIDw8IG1fa2VybmVsU2l6
ZSA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxNYXRyaXg9XCIiIDw8IG1fa2VybmVsTWF0cml4
ICA8PCAiXCIgIgogICAgICAgIDw8ICJkaXZpc29yPVwiIiA8PCBtX2Rpdmlzb3IgPDwgIlwiICIK
QEAgLTQ2NSw5ICsxNjAsNiBAQCBUZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdAogICAgICAgIDw8ICJl
ZGdlTW9kZT1cIiIgPDwgbV9lZGdlTW9kZSA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxVbml0
TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGggPDwgIlwiICIKICAgICAgICA8PCAicHJl
c2VydmVBbHBoYT1cIiIgPDwgbV9wcmVzZXJ2ZUFscGhhIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4g
dHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKaW5kZXggNjdkNGM2NTY3ZmNlNmIyN2VlNWFi
ODk1YTZlMWU1MDA1NGUxM2RiYS4uZWI5MTQ4MDNiMjVmMTdlZDFjODIyNjViY2ViNTVmYWJlOWNk
YzdmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTI0LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDkgKzM4LDcgQEAgZW51bSBFZGdl
TW9kZVR5cGUgewogCiBjbGFzcyBGRUNvbnZvbHZlTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoRmls
dGVyJiwgY29uc3QgSW50U2l6ZSYsCi0gICAgICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IElu
dFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwKLSAgICAgICAgICAgIGJv
b2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAgICBzdGF0aWMgUmVmPEZFQ29udm9sdmVNYXRy
aXg+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0
IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAogICAgIEludFNpemUga2VybmVsU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsU2l6ZTsgfQogICAgIHZvaWQgc2V0S2VybmVsU2l6ZShj
b25zdCBJbnRTaXplJik7CkBAIC02Nyw0MSArNjUsMTcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0
UHJlc2VydmVBbHBoYShib29sKTsKIAogcHJpdmF0ZToKLQotICAgIHN0cnVjdCBQYWludGluZ0Rh
dGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKLSAg
ICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0
aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgZmxvYXQgYmlhczsKLSAgICAgICAgVmVj
dG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7Ci0gICAgfTsKLQotICAgIEZFQ29udm9sdmVNYXRyaXgo
RmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBmbG9hdCwKLSAgICAgICAgICAgIGNvbnN0
IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwgYm9vbCwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYpOworICAgIEZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2Vy
bmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdl
dE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3Ro
LCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7
CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
Q29udm9sdmVNYXRyaXgiOyB9CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVm
ZmVjdFJlY3QoKSkpOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJy
aWRlOwotCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxv
YXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4K
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0
YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7
CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEFMV0FZ
U19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsK
KyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0
cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTQsNCArODgsMyBAQCBwcml2YXRlOgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3Bw
CmluZGV4IGVlYjE3MjhkYjM1ZThhYzMwMmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLmEzOWRkZGFk
NDZmMzk5MWNhOWJiMjFiZTFlMjNmZmJmNzA2MGNhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI3LDM2ICsyOCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVzZUxp
Z2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNl
TGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAw
LCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRT
b3VyY2UpLCBUeXBlOjpEaWZmdXNlTGlnaHRpbmcpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZF
RGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2Nh
bGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlKQorRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VT
Y2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRpbmcoZmlsdGVyLCBsaWdodGlu
Z0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgs
IGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRURpZmZ1
c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCi1ib29sIEZFRGlm
ZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50KQot
ewotICAgIGlmIChtX2RpZmZ1c2VDb25zdGFudCA9PSBkaWZmdXNlQ29uc3RhbnQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX2RpZmZ1c2VDb25zdGFudCA9IGRpZmZ1c2VDb25zdGFudDsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSBy
ZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFRGlmZnVzZUxpZ2h0aW5nOjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZURpZmZ1c2VMaWdodGluZyI7Ci0gICAg
RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
CiAgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAi
CiAgICAgICAgPDwgImRpZmZ1c2VDb25zdGFudD1cIiIgPDwgbV9kaWZmdXNlQ29uc3RhbnQgPDwg
IlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVu
Z3RoWCA8PCAiLCAiIDw8IG1fa2VybmVsVW5pdExlbmd0aFkgPDwgIlwiXVxuIjsKLQotICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgw
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVy
biB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCmluZGV4IGRmNjExNGQwZmI4ZTJmM2Ux
MTI4Yjg0MjYxNWU0NzUxM2EwZGRkYzMuLjk2MDA2MjA0OWEyMmZlNWE4NWNiZmViYjM0OWVjZjFh
YmQ0MTc5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjEgKzI2LDE2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTGlnaHRTb3VyY2U7Ci0KIGNsYXNzIEZFRGlmZnVzZUxp
Z2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVE
aWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFRGlm
ZnVzZUxpZ2h0aW5nKCk7Ci0KLSAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdCB7IHJl
dHVybiBtX2RpZmZ1c2VDb25zdGFudDsgfQotICAgIGJvb2wgc2V0RGlmZnVzZUNvbnN0YW50KGZs
b2F0KTsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0
YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1
cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKIHByaXZh
dGU6Ci0gICAgRkVEaWZmdXNlTGlnaHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAgICBGRURpZmZ1c2VM
aWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNv
bnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgCisgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJGRURpZmZ1c2VMaWdodGluZyI7IH0KKworICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggMDQ3NDkzMzkyYmIy
ODE0NmQ4YjE2OWJhMGE3YzMyYjE2YzU2M2ZhMS4uMjQ0ZWY4NTJjNWVhOWZkY2ZhMDQ5ZWZiODhl
M2I3YzcyMTY2YzBiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTQsNiArNCw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDEzMiArMjUsNjQgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgogCi0jaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4
ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKEZpbHRl
ciYgZmlsdGVyLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCi0gICAgOiBGaWx0ZXJF
ZmZlY3QoZmlsdGVyLCBUeXBlOjpEaXNwbGFjZW1lbnRNYXApCi0gICAgLCBtX3hDaGFubmVsU2Vs
ZWN0b3IoeENoYW5uZWxTZWxlY3RvcikKLSAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5l
bFNlbGVjdG9yKQotICAgICwgbV9zY2FsZShzY2FsZSkKK1JlZjxGRURpc3BsYWNlbWVudE1hcD4g
RkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2Vs
ZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUp
CiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxT
ZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0KIAotUmVmPEZFRGlzcGxhY2Vt
ZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBDaGFubmVs
U2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5
Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKK0ZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3Bs
YWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoVHlwZTo6RkVEaXNwbGFjZW1lbnRNYXApCisgICAgLCBtX3hDaGFubmVsU2VsZWN0b3Io
eENoYW5uZWxTZWxlY3RvcikKKyAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVj
dG9yKQorICAgICwgbV9zY2FsZShzY2FsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RURpc3BsYWNlbWVudE1hcChmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0
b3IsIHNjYWxlKSk7CiB9CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFubmVsU2Vs
ZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKQogewotICAg
IGlmIChtX3hDaGFubmVsU2VsZWN0b3IgPT0geENoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1feENoYW5uZWxTZWxlY3RvciA9IHhDaGFubmVsU2VsZWN0b3I7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV94Q2hhbm5lbFNlbGVj
dG9yLCB4Q2hhbm5lbFNlbGVjdG9yKSAhPSBtX3hDaGFubmVsU2VsZWN0b3I7CiB9CiAKIGJvb2wg
RkVEaXNwbGFjZW1lbnRNYXA6OnNldFlDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKQogewotICAgIGlmIChtX3lDaGFubmVsU2VsZWN0b3Ig
PT0geUNoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1feUNoYW5u
ZWxTZWxlY3RvciA9IHlDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV95Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yKSAh
PSBtX3lDaGFubmVsU2VsZWN0b3I7CiB9CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNj
YWxlKGZsb2F0IHNjYWxlKQogewotICAgIGlmIChtX3NjYWxlID09IHNjYWxlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9zY2FsZSA9IHNjYWxlOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2NhbGUsIHNjYWxlKSAhPSBtX3NjYWxlOwogfQogCi12
b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYpCitjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2Vt
ZW50TWFwOjpyZXN1bHRDb2xvclNwYWNlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
KSBjb25zdAogewogICAgIC8vIFNwZWM6IFRoZSAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJz
JyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgdG8gdGhlICdpbjInIHNvdXJjZSBpbWFnZQogICAgIC8v
IGFuZCBkb2VzIG5vdCBhcHBseSB0byB0aGUgJ2luJyBzb3VyY2UgaW1hZ2UuIFRoZSAnaW4nIHNv
dXJjZSBpbWFnZSBtdXN0IHJlbWFpbiBpbiBpdHMKICAgICAvLyBjdXJyZW50IGNvbG9yIHNwYWNl
LgogICAgIC8vIFRoZSByZXN1bHQgaXMgaW4gdGhhdCBzbWFlIGNvbG9yIHNwYWNlIGJlY2F1c2Ug
aXQgaXMgYSBkaXNwbGFjZW1lbnQgb2YgdGhlICdpbicgaW1hZ2UuCi0gICAgRmlsdGVyRWZmZWN0
OjpzZXRSZXN1bHRDb2xvclNwYWNlKGlucHV0RWZmZWN0KDApLT5yZXN1bHRDb2xvclNwYWNlKCkp
OworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIHJldHVybiBpbnB1dHNbMF0t
PmNvbG9yU3BhY2UoKTsKIH0KIAotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCitGbG9hdFJl
Y3QgRkVEaXNwbGFjZW1lbnRNYXA6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0CiB7Ci0gICAgLy8gRG8gbm90IHRyYW5zZm9ybSB0aGUgZmlyc3QgcHJpbWl0
aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYgKGluZGV4KQotICAgICAgICBpbi0+
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIHJl
dHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0
ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMp
CitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXJPdXRwdXQmIG91
dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNl
dCkgY29uc3QKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKLSAgICBy
ZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7Ci19Ci0KLXZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZl
Y3QoMSk7Ci0KLSAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9X
Tik7Ci0gICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwot
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAg
ICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKLQotICAgIEludFJl
Y3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2lu
ZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9u
LXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgotICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2Ug
PSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOwotICAgIAotICAg
IGlmICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFnZS0+
bGVuZ3RoKCkpOwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50
U2l6ZS5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGUg
PSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsK
LSAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKLSAgICBm
bG9hdCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQg
c2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7Ci0gICAgZmxvYXQgc2Nh
bGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxlLmhlaWdodCgpICogMC41OworICAgIGF1dG8gaW4gPSBz
dGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKICAgICAK
LSAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7Ci0gICAgaW50
IGRpc3BsYWNlbWVudENoYW5uZWxZID0geUNoYW5uZWxJbmRleCgpOwotCi0gICAgaW50IHJvd0J5
dGVzID0gcGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1
dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IHBhaW50U2l6ZS5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAg
IGludCBsaW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7Ci0KLSAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBpbnQgZGVz
dGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0OwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JY
ICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVu
dENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsg
c3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVt
KGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZ
KTsKLQotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9uUGl4ZWxQdHIgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSArIGRlc3Rp
bmF0aW9uSW5kZXgpOwotICAgICAgICAgICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gcGFpbnRT
aXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWludFNpemUuaGVpZ2h0KCkpIHsK
LSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9IDA7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpkZXN0aW5hdGlvblBp
eGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5kYXRhKCkg
KyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOwotICAgICAgICB9Ci0g
ICAgfQorICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiwgaW4yIH0sIG51bGxw
dHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQpA
QCAtMTc0LDE3ICsxMDcsMTIgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRz
OwogfQogCi1UZXh0U3RyZWFtJiBGRURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBj
b25zdAorVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlRGlzcGxhY2VtZW50TWFwIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHNj
YWxlPVwiIiA8PCBtX3NjYWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInhDaGFubmVsU2VsZWN0b3I9
XCIiIDw8IG1feENoYW5uZWxTZWxlY3RvciA8PCAiXCIgIgogICAgICAgIDw8ICJ5Q2hhbm5lbFNl
bGVjdG9yPVwiIiA8PCBtX3lDaGFubmVsU2VsZWN0b3IgPDwgIlwiXVxuIjsKLQotICAgIFRleHRT
dHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZm
ZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAg
cmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggZGQ3MzJhODgxMDcz
ZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uYzY1NTQ3ZjEyOGZkYWQwMmFiZDZlOTUzNjY5
YTJjMDIxZWY1MTMzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtMiw2ICsyLDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTM3LDcgKzM2LDcgQEAgZW51bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKIAogY2xhc3Mg
RkVEaXNwbGFjZW1lbnRNYXAgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoRmlsdGVyJiwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IsIGZsb2F0IHNjYWxlKTsKKyAgICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBj
cmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKIAogICAgIENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxl
Y3RvcjsgfQogICAgIGJvb2wgc2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0
b3JUeXBlKTsKQEAgLTQ4LDIyICs0NywyMyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBj
b25zdCB7IHJldHVybiBtX3NjYWxlOyB9CiAgICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7CiAKLSAg
ICB2b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVj
dCosIGNvbnN0IGludCkgb3ZlcnJpZGU7Ci0KIHByaXZhdGU6Ci0gICAgRkVEaXNwbGFjZW1lbnRN
YXAoRmlsdGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVs
U2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKKyAgICBGRURpc3BsYWNlbWVu
dE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3Rv
clR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOworCisgICAgaW50IHhDaGFubmVs
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50
IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9
CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
RGlzcGxhY2VtZW50TWFwIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBv
dmVycmlkZTsKKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3Bh
Y2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZs
b2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAgICBGaWx0ZXJSZXN1bHQqIGFw
cGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFy
eVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3hDaGFu
bmVsU2VsZWN0b3I7CiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3lDaGFubmVsU2VsZWN0b3I7
CkBAIC03MSw0ICs3MSwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCA1Y2U3YmUzYTQ3MWI0N2I4ZGQ1NDI2ZDk2NWJiZmU3
ODlmNmJiZGQ4Li5kOTBjMDljNTQxZmVlZWNhMDQ1Mjk5MGJiMzYwZDk3ZmNmODQzNDhjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIzLDE2ICsyNCwxOSBAQAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXph
dGlvbi5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
KyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLUZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93
KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQg
ZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKLSAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRyb3BTaGFkb3cpCisKK1JlZjxGRURyb3BTaGFk
b3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4
LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBk
eCwgZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7Cit9CisKK0ZFRHJvcFNoYWRvdzo6
RkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorICAgIDogRmls
dGVyRWZmZWN0KFR5cGU6OkZFRHJvcFNoYWRvdykKICAgICAsIG1fc3RkWChzdGRYKQogICAgICwg
bV9zdGRZKHN0ZFkpCiAgICAgLCBtX2R4KGR4KQpAQCAtNDIsMTAwICs0Niw1MSBAQCBGRURyb3BT
aGFkb3c6OkZFRHJvcFNoYWRvdyhGaWx0ZXImIGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQgc3Rk
WSwgZmxvYXQgZHgsIGZsbwogewogfQogCi1SZWY8RkVEcm9wU2hhZG93PiBGRURyb3BTaGFkb3c6
OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgs
IGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkp
CitJbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgsIGR5LCBz
aGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IEZF
R2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Cisg
ICAgcmV0dXJuIHsKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgp
IC0gbV9keSksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsg
bV9keCksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIG1f
ZHkpLAorICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSAtIG1fZHgp
CisgICAgfTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkKK0Zsb2F0UmVjdCBGRURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEZpbHRlciYgZmls
dGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3Qg
PSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGbG9hdFJlY3QgYWJz
b2x1dGVPZmZzZXRQYWludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpOwotICAgIGFic29sdXRlT2Zm
c2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgs
IG1fZHkgfSkpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKGFic29sdXRlT2Zmc2V0UGFp
bnRSZWN0KTsKLQotICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxj
dWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBBU1NFUlQo
aW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5k
cmF3aW5nUmVjdCgpOwogCisgICAgZHJhd2luZ1JlY3QubW92ZShnZW9tZXRyeS5yZXNvbHZlVG9G
aWx0ZXJDb29yZGluYXRlcyh7IG1fZHgsIG1fZHkgfSkpOworICAgIAorICAgIGRyYXdpbmdSZWN0
LnVuaXRlKGlucHV0c1swXS0+ZHJhd2luZ1JlY3QoKSk7CisgICAgCisgICAgSW50U2l6ZSBrZXJu
ZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1f
c3RkWSB9KTsKKyAgICAKICAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBt
dWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1l
cy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgp
ICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUu
aGVpZ2h0KCkgKiAwLjVmKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFi
c29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKKyAgICBkcmF3
aW5nUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJh
d2luZ1JlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAg
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3Qp
KTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGRyYXdpbmdS
ZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCogRkVEcm9wU2hhZG93OjphcHBseShGaWx0
ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0
JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFj
ay50YWtlTGFzdCgpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0
U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBt
X3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1
dGlvbih7IG1fZHgsIG1fZHkgfSk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3Vs
dHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRy
YXdpbmdSZWdpb24pOwotICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsK
LQotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIGlmICghc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCYgcmVzdWx0Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgcmVz
dWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRvd09wYWNpdHkpOwotICAgIHJlc3VsdENvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQpOwot
ICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEoMSk7Ci0KLSAgICBTaGFkb3dCbHVyIGNvbnRleHRT
aGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9yKTsKLQotICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07Ci0gICAgSW50UmVjdCBz
aGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBh
dXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hh
ZG93QXJlYSk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgY29udGV4
dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZm
ZXItPnNpemUoKSwgNCAqIHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7Ci0gICAgCi0gICAg
cmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7Ci0K
LSAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRv
cjo6U291cmNlSW4pOwotICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKLSAg
ICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6
RGVzdGluYXRpb25PdmVyKTsKLQotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdl
QnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbik7Ci19Ci0KLUludE91dHNldHMgRkVE
cm9wU2hhZG93OjpvdXRzZXRzKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwot
ICAgIHJldHVybiB7Ci0gICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQo
KSAtIG1fZHkpLAotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSAr
IG1fZHgpLAotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgKyBt
X2R5KSwKLSAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgLSBtX2R4
KQotICAgIH07CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxw
dHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFRHJvcFNoYWRv
dzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25U
eXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVEcm9wU2hhZG93OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiBy
ZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNoYWRv
dyI7CiAgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAi
IDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8
ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQo
bV9zaGFkb3dDb2xvcikgPDwiXCIgZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5
IDw8ICJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMp
OwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggYjRl
MGEyMDEyZmVkYjdiNzdiZjNlMDU3MzRlZTg4YTI5ZWZmMzg0Yy4uNGY4NWEzOTdlNWM4YTgyM2E3
NjZiYjBlYzBhYWJhM2MyYTQ1MWIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDE0ICsyMSwxMyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBj
bGFzcyBGRURyb3BTaGFkb3cgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRHJvcFNo
YWRvdz4gY3JlYXRlKGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwg
Y29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgo
KSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxv
YXQgc3RkWCkgeyBtX3N0ZFggPSBzdGRYOyB9CkBAIC00MSwyNCArNDEsMjYgQEAgcHVibGljOgog
ICAgIGZsb2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9keTsgfQogICAgIHZvaWQgc2V0RHkoZmxv
YXQgZHkpIHsgbV9keSA9IGR5OyB9CiAKLSAgICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IoKSBj
b25zdCB7IHJldHVybiBtX3NoYWRvd0NvbG9yOyB9IAorICAgIGNvbnN0IENvbG9yJiBzaGFkb3dD
b2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93Q29sb3I7IH0KICAgICB2b2lkIHNldFNoYWRv
d0NvbG9yKGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93
Q29sb3I7IH0KIAogICAgIGZsb2F0IHNoYWRvd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3No
YWRvd09wYWNpdHk7IH0KICAgICB2b2lkIHNldFNoYWRvd09wYWNpdHkoZmxvYXQgc2hhZG93T3Bh
Y2l0eSkgeyBtX3NoYWRvd09wYWNpdHkgPSBzaGFkb3dPcGFjaXR5OyB9CiAKIHByaXZhdGU6Ci0g
ICAgRkVEcm9wU2hhZG93KEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25z
dCBDb2xvciYsIGZsb2F0KTsKKyAgICBGRURyb3BTaGFkb3coZmxvYXQgc3RkWCwgZmxvYXQgc3Rk
WSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYsIGZsb2F0IG9wYWNpdHkpOwogCiAg
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRURyb3BT
aGFkb3ciOyB9CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwor
ICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5n
UmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0
ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYs
IGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVy
UmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9zdGRYOwogICAg
IGZsb2F0IG1fc3RkWTsKQEAgLTY5LDQgKzcxLDMgQEAgcHJpdmF0ZToKIH07CiAgICAgCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGI0MjM1NTM0YzM4YjFlYmEyMTFlZTg0
ODYxNzk5MjM4MGYzYjZiMDEuLmNlNDRkOWViODFjNzU1YjIyZmY5MWFlZWQ5YTczMjhhYWIyNjM2
YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmNwcApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwyMiArMjUsMjEgQEAK
ICNpbmNsdWRlICJGRUZsb29kLmgiCiAKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJGaWx0ZXJPdXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVGbG9vZDo6RkVGbG9vZChGaWx0ZXImIGZpbHRlciwg
Y29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKLSAgICA6IEZpbHRl
ckVmZmVjdChmaWx0ZXIsIFR5cGU6OkZsb29kKQotICAgICwgbV9mbG9vZENvbG9yKGZsb29kQ29s
b3IpCi0gICAgLCBtX2Zsb29kT3BhY2l0eShmbG9vZE9wYWNpdHkpCitSZWY8RkVGbG9vZD4gRkVG
bG9vZDo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKIHsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29kKGNvbG9yLCBvcGFjaXR5KSk7CiB9CiAKLVJlZjxG
RUZsb29kPiBGRUZsb29kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBmbG9v
ZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCitGRUZsb29kOjpGRUZsb29kKGNvbnN0IENvbG9y
JiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlw
ZTo6RkVGbG9vZCkKKyAgICAsIG1fZmxvb2RDb2xvcihmbG9vZENvbG9yKQorICAgICwgbV9mbG9v
ZE9wYWNpdHkoZmxvb2RPcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxv
b2QoZmlsdGVyLCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKIH0KIAogYm9vbCBGRUZsb29k
OjpzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTU4LDE3ICs1OCwyMCBAQCBi
b29sIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zs
b2F0UmVjdCBGRUZsb29kOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
KSBjb25zdAoreworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247Cit9CisKK0ZpbHRlclJl
c3VsdCogRkVGbG9vZDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZl
Y3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25z
dCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgSW1hZ2VCdWZm
ZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJl
c3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0
LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAg
IGF1dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxv
b2RPcGFjaXR5KCkpOwotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7Cisg
ICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IH0sIG51bGxwdHIsIGdlb21ldHJ5LCBi
b3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewog
ICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRmxvb2QiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0ZGM5Njlj
NmQ3NTg4YmNlYjBhZDhiMjQ2ODJmYTA2MTczNDhlLi40OGUwZmY4OGMyODEzMjc4OTAxZGMzOTkw
MDU5NGI1MTA4M2YxZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMiwxNCArMjMsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUZsb29kIDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUoRmls
dGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVh
dGUoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IENvbG9yJiBmbG9v
ZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9mbG9vZENvbG9yOyB9CiAgICAgYm9vbCBzZXRGbG9v
ZENvbG9yKGNvbnN0IENvbG9yJik7CkBAIC0zNywyNyArMzcsMjcgQEAgcHVibGljOgogICAgIGZs
b2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OyB9CiAgICAg
Ym9vbCBzZXRGbG9vZE9wYWNpdHkoZmxvYXQpOwogCitwcml2YXRlOgorICAgIEZFRmxvb2QoY29u
c3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKKworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9vZCI7IH0KKyAgICAKICNpZiAhVVNFKENHKQog
ICAgIC8vIGZlRmxvb2QgZG9lcyBub3QgcGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9mIGFu
eSBraW5kLCBzbyB0aGUgcmVzdWx0IGlzIGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8vIGNv
bG9yIHNwYWNlIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRpb24t
ZmlsdGVycy4KLSAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVy
RWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsgfQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmKSBvdmVycmlkZSB7IH0KICNlbmRpZgogCi1wcml2YXRlOgotICAgIEZFRmxvb2Qo
RmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9v
ZCI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAg
RmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0
YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29u
c3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBib29sIGFwcGx5U29mdHdh
cmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDb2xvciBtX2Zsb29kQ29s
b3I7CiAgICAgZmxvYXQgbV9mbG9vZE9wYWNpdHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2YzNmVi
YjZiYmI4YWIzNjM5NDM2NS4uOTdjMTA1YjViOTBjMDZiYzY4MzU3YWNlOWM0YjlmYzI1OTk5ZmI5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjYsNDUwICsyNiwzOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFR2F1c3NpYW5CbHVyLmgiCiAKLSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFj
Y2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgot
Ci1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkKLXsKLSAgICByZXR1
cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsKLX0KLQotc3RhdGljIGNvbnN0IGludCBn
TWF4S2VybmVsU2l6ZSA9IDUwMDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxpbmUgdm9p
ZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50
JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKK1JlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVz
c2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUp
CiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNm
ZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRldGFpbHMuCi0gICAgc3dpdGNoIChibHVySXRlcmF0
aW9uKSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAg
ICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMiAtIDE7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0
ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVs
dGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAgICAgICAgICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBk
ZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAg
ICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAg
ICAgICBkZWx0YVJpZ2h0LS07Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAy
OgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFSaWdodCsr
OwotICAgICAgICAgICAgcmFkaXVzKys7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
fQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2Rl
KSk7CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihGaWx0ZXImIGZpbHRlciwg
ZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZm
ZWN0KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5CbHVyKQorRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3Np
YW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZp
bHRlckVmZmVjdChUeXBlOjpGRUdhdXNzaWFuQmx1cikKICAgICAsIG1fc3RkWCh4KQogICAgICwg
bV9zdGRZKHkpCiAgICAgLCBtX2VkZ2VNb2RlKGVkZ2VNb2RlKQogewogfQogCi1SZWY8RkVHYXVz
c2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgs
IGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRUdhdXNzaWFuQmx1cihmaWx0ZXIsIHgsIHksIGVkZ2VNb2RlKSk7Ci19Ci0KLXZvaWQg
RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkKLXsKLSAgICBtX3N0ZFgg
PSB4OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkp
Ci17Ci0gICAgbV9zdGRZID0geTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1v
ZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsK
LX0KLQotLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9uIEFscGhhIGNoYW5uZWwuCi1p
bmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQ
aXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25l
ZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRl
TGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4
S2VybmVsU2l6ZSkKLXsKLSAgICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJh
eS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwot
ICAgIC8vIE1lbW9yeSBhbGlnbm1lbnQgaXM6IFJHQkEsIHplcm8taW5kZXggYmFzZWQuCi0gICAg
Y29uc3QgaW50IGNoYW5uZWwgPSAzOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RI
ZWlnaHQ7ICsreSkgewotICAgICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOwotICAgICAg
ICBpbnQgc3VtID0gMDsKLQotICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVsU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4
X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0gICAgICAgICAgICBzdW0gKz0gc3JjUHRy
W2NoYW5uZWxdOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgdW5zaWdu
ZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGUgKyBjaGFubmVsOwotICAgICAg
ICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLSAgICAg
ICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW0gLyBkeCk7Ci0KLSAgICAg
ICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkgewot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBk
eExlZnQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0g
c3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtIC09ICpzcmNQdHI7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRo
KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZz
ZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gKz0gKnNy
Y1B0cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIHZvaWQg
Ym94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFt
cGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksCi0gICAgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGlu
dCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBp
bnQgZWZmZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkK
LXsKLSAgICBjb25zdCBpbnQgbWF4S2VybmVsU2l6ZSA9IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVj
dFdpZHRoKTsKLSAgICBpZiAoYWxwaGFJbWFnZSkKLSAgICAgICAgcmV0dXJuIGJveEJsdXJBbHBo
YU9ubHkoc3JjUGl4ZWxBcnJheSwgZHN0UGl4ZWxBcnJheSwgZHgsIGR4TGVmdCwgZHhSaWdodCwg
c3RyaWRlLCBzdHJpZGVMaW5lLCAgZWZmZWN0V2lkdGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVs
U2l6ZSk7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRh
KCk7Ci0gICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwotCi0gICAg
Ly8gQ29uY2VybmluZyB0aGUgYXJyYXkgd2lkdGgvbGVuZ3RoOiBpdCBpcyBFbGVtZW50IHNpemUg
KyBNYXJnaW4gKyBCb3JkZXIuIFRoZSBudW1iZXIgb2YgcGl4ZWxzIHdpbGwgYmUKLSAgICAvLyBQ
ID0gd2lkdGggKiBoZWlnaHQgKiBjaGFubmVscy4KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVm
ZmVjdEhlaWdodDsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0g
ICAgICAgIGludCBzdW1SID0gMCwgc3VtRyA9IDAsIHN1bUIgPSAwLCBzdW1BID0gMDsKLQotICAg
ICAgICBpZiAoZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICAgICAgLy8gRmls
bCB0aGUga2VybmVsLgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxT
aXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAq
IHN0cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRh
ICsgb2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAg
ICAgICAgIHN1bUcgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0
cisrOwotICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVP
ZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICB1aW50OF90KiBkc3RQ
dHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotCi0gICAgICAgICAgICAgICAgKmRzdFB0
cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtUiAvIGR4KTsKLSAgICAgICAgICAgICAgICAq
ZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1HIC8gZHgpOwotICAgICAgICAgICAg
ICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7Ci0gICAgICAg
ICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCi0gICAgICAgICAgICAgICAgaWYgKHggPj0g
ZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhl
bEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OwotICAgICAgICAgICAgICAg
ICAgICBzdW1SIC09IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBzcmNQ
dHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gc3JjUHRyWzJdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1BIC09IHNyY1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoeCArIGR4UmlnaHQgPCBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQg
KiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNy
Y0RhdGEgKyByaWdodE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJb
MF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gc3JjUHRyWzFdOwotICAgICAgICAgICAg
ICAgICAgICBzdW1CICs9IHNyY1B0clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBz
cmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyBoZXJl
LgotICAgICAgICAgICAgLy8gR2V0IGVkZ2UgdmFsdWVzIGZvciBlZGdlTW9kZSAnZHVwbGljYXRl
Jy4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVkZ2VWYWx1ZUxlZnQgPSBzcmNEYXRhICsg
bGluZTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVkZ2VWYWx1ZVJpZ2h0ICA9IHNyY0Rh
dGEgKyAobGluZSArIChlZmZlY3RXaWR0aCAtIDEpICogc3RyaWRlKTsKLQotICAgICAgICAgICAg
Ly8gRmlsbCB0aGUga2VybmVsLgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IGR4TGVmdCAqIC0x
OyBpIDwgZHhSaWdodDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSXMgdGhpcyByaWdodCBm
b3IgbmVnYXRpdmUgdmFsdWVzIG9mICdpJz8KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBz
cmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OwotCi0gICAgICAgICAgICAgICAgaWYgKGkgPCAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1CICs9IGVkZ2VWYWx1ZUxlZnRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0g
ZWRnZVZhbHVlTGVmdFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPj0gZWZmZWN0
V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsK
LSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVSaWdodFsxXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFsdWVSaWdodFsyXTsKLSAgICAgICAgICAgICAgICAg
ICAgc3VtQSArPSBlZGdlVmFsdWVSaWdodFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBzdW1SICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAg
ICAgc3VtRyArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0
cisrOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9ICpzcmNQdHI7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAg
ICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0K
LSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8g
ZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1
bUcgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3VtQiAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oc3VtQSAvIGR4KTsKLQotICAgICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAg
ICAgICAgICAgICAgICBpZiAoeCA8IGR4TGVmdCkgewotICAgICAgICAgICAgICAgICAgICBzdW1S
IC09IGVkZ2VWYWx1ZUxlZnRbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gZWRnZVZh
bHVlTGVmdFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBlZGdlVmFsdWVMZWZ0WzJd
OwotICAgICAgICAgICAgICAgICAgICBzdW1BIC09IGVkZ2VWYWx1ZUxlZnRbM107Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNl
dCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1H
IC09IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA+PSBlZmZlY3RXaWR0aCkgewotICAg
ICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOwotICAgICAgICAgICAg
ICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwotICAgICAgICAgICAgICAgICAgICBz
dW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVk
Z2VWYWx1ZVJpZ2h0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAq
IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3Jj
RGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clsw
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNy
Y1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLWlubGluZSB2b2lkIGFjY2VsZXJhdGVCb3hC
bHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwg
aW50IGVmZmVjdEhlaWdodCkKLXsKLSAgICBpZiAoIWlvQnVmZmVyLmRhdGEoKSB8fCAhdGVtcEJ1
ZmZlci5kYXRhKCkpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZWZmZWN0V2lkdGggPD0gMCB8fCBlZmZlY3RIZWlnaHQg
PD0gMCB8fCBzdHJpZGUgPD0gMCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIG11c3QgYWx3YXlzIHVzZSBhbiBvZGQg
cmFkaXVzLgotICAgIGlmIChrZXJuZWxTaXplICUgMiAhPSAxKQotICAgICAgICBrZXJuZWxTaXpl
ICs9IDE7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGVmZmVjdEluQnVmZmVyOwotICAgIGVmZmVjdElu
QnVmZmVyLmRhdGEgPSBzdGF0aWNfY2FzdDx2b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKLSAgICBl
ZmZlY3RJbkJ1ZmZlci53aWR0aCA9IGVmZmVjdFdpZHRoOwotICAgIGVmZmVjdEluQnVmZmVyLmhl
aWdodCA9IGVmZmVjdEhlaWdodDsKLSAgICBlZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlk
ZTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZWZmZWN0T3V0QnVmZmVyOwotICAgIGVmZmVjdE91dEJ1
ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5kYXRhKCk7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLndpZHRo
ID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdo
dDsKLSAgICBlZmZlY3RPdXRCdWZmZXIucm93Qnl0ZXMgPSBzdHJpZGU7Ci0KLSAgICAvLyBEZXRl
cm1pbmUgdGhlIHNpemUgb2YgYSB0ZW1wb3JhcnkgYnVmZmVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0
aW9uIGZpcnN0IHdpdGggYSBzcGVjaWFsIGZsYWcuIHZJbWFnZSB3aWxsIHJldHVybgotICAgIC8v
IHRoZSBzaXplIG5lZWRlZCwgb3IgYW4gZXJyb3IgKHdoaWNoIGFyZSBhbGwgbmVnYXRpdmUpLgot
ICAgIHNpemVfdCB0bXBCdWZmZXJTaXplID0gdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVm
ZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCAwLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJu
ZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCB8IGt2SW1hZ2VHZXRUZW1wQnVmZmVyU2l6ZSk7
Ci0gICAgaWYgKHRtcEJ1ZmZlclNpemUgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdm9p
ZCogdG1wQnVmZmVyID0gZmFzdE1hbGxvYyh0bXBCdWZmZXJTaXplKTsKLSAgICB2SW1hZ2VCb3hD
b252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1
ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQp
OwotICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RPdXRCdWZmZXIsICZlZmZl
Y3RJbkJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBr
dkltYWdlRWRnZUV4dGVuZCk7Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVj
dEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUs
IGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICBXVEY6OmZhc3RGcmVlKHRt
cEJ1ZmZlcik7Ci0KLSAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4g
aW9CdWZmZXIuCi0gICAgQVNTRVJUKGlvQnVmZmVyLmxlbmd0aCgpID09IHRlbXBCdWZmZXIubGVu
Z3RoKCkpOwotICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCksIHRlbXBCdWZmZXIuZGF0YSgpLCBp
b0J1ZmZlci5sZW5ndGgoKSk7Ci19Ci0jZW5kaWYKLQotaW5saW5lIHZvaWQgc3RhbmRhcmRCb3hC
bHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0
cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQotewotICAgIGludCBkeExlZnQgPSAwOwotICAgIGludCBkeFJpZ2h0ID0gMDsK
LSAgICBpbnQgZHlMZWZ0ID0gMDsKLSAgICBpbnQgZHlSaWdodCA9IDA7Ci0gICAgCi0gICAgVWlu
dDhDbGFtcGVkQXJyYXkqIGZyb21CdWZmZXIgPSAmaW9CdWZmZXI7Ci0gICAgVWludDhDbGFtcGVk
QXJyYXkqIHRvQnVmZmVyID0gJnRlbXBCdWZmZXI7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDM7ICsraSkgewotICAgICAgICBpZiAoa2VybmVsU2l6ZVgpIHsKLSAgICAgICAgICAgIGtlcm5l
bFBvc2l0aW9uKGksIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQpOwotI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKLSAgICAgICAgICAgIGlmICghaXNBbHBoYUltYWdlKQotICAgICAg
ICAgICAgICAgIGJveEJsdXJORU9OKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVY
LCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6
ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYm94Qmx1cigq
ZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBz
dHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCksIHRydWUsIGVkZ2VN
b2RlKTsKLSNlbHNlCi0gICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIs
IGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7Ci0jZW5kaWYK
LSAgICAgICAgICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVyLCB0b0J1ZmZlcik7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoa2VybmVsU2l6ZVkpIHsKLSAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9u
KGksIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQpOwotI2lmIEhBVkUoQVJNX05FT05fSU5U
UklOU0lDUykKLSAgICAgICAgICAgIGlmICghaXNBbHBoYUltYWdlKQotICAgICAgICAgICAgICAg
IGJveEJsdXJORU9OKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQs
IGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgo
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZl
ciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBh
aW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCksIHRydWUsIGVkZ2VNb2RlKTsKLSNl
bHNlCi0gICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNp
emVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWlu
dFNpemUud2lkdGgoKSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7Ci0jZW5kaWYKLSAgICAgICAg
ICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVyLCB0b0J1ZmZlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0g
ICAgaWYgKCZpb0J1ZmZlciAhPSBmcm9tQnVmZmVyKSB7Ci0gICAgICAgIEFTU0VSVChpb0J1ZmZl
ci5sZW5ndGgoKSA9PSBmcm9tQnVmZmVyLT5sZW5ndGgoKSk7Ci0gICAgICAgIG1lbWNweShpb0J1
ZmZlci5kYXRhKCksIGZyb21CdWZmZXItPmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOwotICAg
IH0KLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmlj
KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVs
QXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6
ZSYgcGFpbnRTaXplKQotewotICAgIGludCBzdHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6
ZVkgJiYgKG1fZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSB8fCBtX2VkZ2VNb2RlID09IEVER0VN
T0RFX0RVUExJQ0FURSkpIHsKLSAgICAgICAgYWNjZWxlcmF0ZUJveEJsdXIoaW9CdWZmZXIsIHRt
cFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWlu
dFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBz
dGFuZGFyZEJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJu
ZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSgpLCBtX2VkZ2VNb2RlKTsK
LX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKLXsKLSAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJh
bWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVycy0+aGVpZ2h0KTsKLSAgICBwYXJhbWV0ZXJzLT5maWx0
ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJh
bWV0ZXJzLT50bXBQaXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFyYW1ldGVy
cy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFR2F1c3NpYW5C
bHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
cGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBr
ZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQorc3RhdGljIGlubGluZSBmbG9hdCBnYXVz
c2lhbktlcm5lbEZhY3RvcigpCiB7Ci0jaWYgIVVTRShBQ0NFTEVSQVRFKQotICAgIGludCBzY2Fu
bGluZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKLSAgICBpbnQgZXh0cmFIZWlnaHQgPSAzICog
a2VybmVsU2l6ZVkgKiAwLjVmOwotICAgIGludCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gKHBhaW50
U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChzX21pbmltYWxSZWN0RGltZW5z
aW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNpemUud2lkdGgoKSk7Ci0KLSAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1B
cHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1h
bFRocmVhZE51bWJlcik7Ci0KLSAgICAgICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVy
T2ZKb2JzKCk7Ci0gICAgICAgIGlmIChqb2JzID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQg
dGhlIGpvYiBpbnRvICJibG9ja0hlaWdodCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9i
cyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyBi
bG9ja0hlaWdodCAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQg
YnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQg
YmxvY2tIZWlnaHQgPSBwYWludFNpemUuaGVpZ2h0KCkgLyBqb2JzOwotICAgICAgICAgICAgY29u
c3QgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludFNpemUuaGVpZ2h0KCkgJSBqb2JzOwotCi0gICAg
ICAgICAgICBpbnQgY3VycmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsg
am9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1l
dGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAg
ICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotCi0gICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9
ICFqb2IgPyAwIDogY3VycmVudFkgLSBleHRyYUhlaWdodDsKLSAgICAgICAgICAgICAgICBjdXJy
ZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWln
aHQ7Ci0gICAgICAgICAgICAgICAgaW50IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50
WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7Ci0KLSAgICAgICAgICAgICAgICBpbnQgYmxvY2tT
aXplID0gKGVuZFkgLSBzdGFydFkpICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCFq
b2IpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZl
cjsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxB
cnJheTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwYXJh
bXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
YmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAg
ICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZl
ci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBwYXJhbXMud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsK
LSAgICAgICAgICAgICAgICBwYXJhbXMuaGVpZ2h0ID0gZW5kWSAtIHN0YXJ0WTsKLSAgICAgICAg
ICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVggPSBrZXJuZWxTaXplWDsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMua2VybmVsU2l6ZVkgPSBrZXJuZWxTaXplWTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLQotICAgICAgICAgICAgLy8gQ29weSB0
b2dldGhlciB0aGUgcGFydHMgb2YgdGhlIGltYWdlLgotICAgICAgICAgICAgY3VycmVudFkgPSAw
OwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMTsgam9iIDwgam9iczsgam9iKyspIHsKLSAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxK
b2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7Ci0g
ICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uT2Zmc2V0OwotICAgICAgICAgICAgICAgIGlu
dCBzaXplOwotICAgICAgICAgICAgICAgIGludCBhZGp1c3RlZEJsb2NrSGVpZ2h0ID0gam9iIDwg
am9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6IGJsb2NrSGVpZ2h0OwotCi0gICAgICAg
ICAgICAgICAgY3VycmVudFkgKz0gYWRqdXN0ZWRCbG9ja0hlaWdodDsKLSAgICAgICAgICAgICAg
ICBzb3VyY2VPZmZzZXQgPSBleHRyYUhlaWdodCAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3VycmVudFkgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAg
ICBzaXplID0gYWRqdXN0ZWRCbG9ja0hlaWdodCAqIHNjYW5saW5lOwotCi0gICAgICAgICAgICAg
ICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSArIGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9Q
aXhlbEFycmF5LT5kYXRhKCkgKyBzb3VyY2VPZmZzZXQsIHNpemUpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNp
bmdsZSB0aHJlYWRlZCBtb2RlLgotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gVGhlIHNlbGVjdGlv
biBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRm
b3Jtcy4KLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwg
a2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNpemUpOworICAgIHJldHVybiAzIC8gNC5m
ICogc3FydGYoMiAqIHBpRmxvYXQpOwogfQogCiBzdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNp
emUoZmxvYXQgdmFsdWUpCiB7CiAgICAgLy8gTGltaXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4g
QSBiaWdnZXIgcmFkaXVzIHdvbid0IG1ha2UgYSBiaWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3Vs
dCBpbWFnZSBidXQKICAgICAvLyBpbmZsYXRlcyB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28g
bXVjaC4gVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggRmlyZWZveCcgYmVoYXZpb3IuCisgICAgc3Rh
dGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKICAgICB1bnNpZ25lZCBzaXplID0g
c3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmbG9vcmYodmFsdWUg
KiBnYXVzc2lhbktlcm5lbEZhY3RvcigpICsgMC41ZikpKTsKICAgICByZXR1cm4gY2xhbXBUbzxp
bnQ+KHN0ZDo6bWluKHNpemUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnTWF4S2VybmVsU2l6ZSkp
KTsKIH0KLSAgICAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2Vy
bmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQorCitJbnRTaXplIEZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRp
b24pCiB7CiAgICAgQVNTRVJUKHN0ZERldmlhdGlvbi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0
aW9uLmhlaWdodCgpID49IDApOwogICAgIEludFNpemUga2VybmVsU2l6ZTsKQEAgLTQ4MywxMiAr
NzIsMTIgQEAgSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxT
aXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCiAgICAgcmV0dXJuIGtlcm5lbFNpemU7CiB9CiAK
LUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewot
ICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbihzdGREZXZpYXRpb24pKTsKKyAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2Fs
ZWRLZXJuZWxTaXplKHN0ZERldmlhdGlvbiAvKmZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRp
b24oc3RkRGV2aWF0aW9uKSovKTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3Vs
YXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikK
IHsKICAgICBhdXRvIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3Rk
RGV2aWF0aW9uKTsKIApAQCAtNDk2LDcyICs4NSw0MyBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCiAgICAgcmV0dXJu
IHsgMyAqIGtlcm5lbFNpemUud2lkdGgoKSAvIDIsIDMgKiBrZXJuZWxTaXplLmhlaWdodCgpIC8g
MiB9OwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpCitJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKIHsKLSAgICBJ
bnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3Rk
WCwgbV9zdGRZIH0pOworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNp
emUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgp
LCBvdXRzZXRTaXplLndpZHRoKCksIG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lk
dGgoKSB9OworfQogCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZl
Y3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CitGbG9hdFJlY3QgRkVHYXVzc2lhbkJsdXI6OmRy
YXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBj
b25zdAoreworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdCA9IGlucHV0c1swXS0+ZHJhd2luZ1Jl
Y3QoKTsKICAgICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRl
IHRoZSBhZmZlY3RlZCBwYWludCByZWN0LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RF
X05PTkUpIHsKLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChh
YnNvbHV0ZVBhaW50UmVjdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2Vk
Z2VNb2RlICE9IEVER0VNT0RFX05PTkUpCisgICAgICAgIHJldHVybiBkcmF3aW5nUmVjdDsKIAot
ICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGgg
dGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgotICAgIGFic29sdXRl
UGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKLSAgICBh
YnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYp
OworICAgIEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgs
IG1fc3RkWSB9KTsKIAotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRl
UGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAg
YWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKKyAgICAvLyBXZSB0YWtl
IHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNl
IHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgz
ICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVko
MyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2Vv
bWV0cnkuY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJy
ZWdpb24pOwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KQorRmlsdGVyUmVzdWx0KiBGRUdhdXNzaWFuQmx1cjo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRw
dXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVy
R2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQp
IGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEFT
U0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsK
IAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0
aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgc2V0SXNB
bHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdERyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25Q
aXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAg
ICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXpl
IGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9z
dGRZIH0pOwotICAgIGtlcm5lbFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0K
LSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAg
IHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIHRtcElt
YWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHBhaW50
U2l6ZS5hcmVhKCkgKiA0KTsKLSAgICBpZiAoIXRtcEltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgcGxhdGZvcm1BcHBseShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURh
dGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsK
LX0KLQotSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0Ci17Ci0gICAg
SW50U2l6ZSBvdXRzZXRTaXplID0gY2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZ
IH0pOwotICAgIHJldHVybiB7IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgo
KSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpIH07CisgICAgcmV0dXJu
IGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFy
eVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24p
IGNvbnN0CitUZXh0U3RyZWFtJiBGRUdhdXNzaWFuQmx1cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMg
PDwgaW5kZW50IDw8ICJbZmVHYXVzc2lhbkJsdXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc3RkRGV2
aWF0aW9uPVwiIiA8PCBtX3N0ZFggPDwgIiwgIiA8PCBtX3N0ZFkgPDwgIlwiXVxuIjsKLQotICAg
IFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVj
dCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJl
dHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCmluZGV4IDVmYjk3ZmZiMDcwYzJkYWViNmVi
MjgzYmVhYWExNzY0N2NiYjJkM2UuLjk3YzgwNDM2NjljNWY1MmUwMzMwZGEwODk5OTdlYWU0M2Ex
YzVlZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNTkgKzIzLDQwIEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUdh
dXNzaWFuQmx1ciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVHYXVzc2lhbkJsdXI+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2Rl
VHlwZSk7CisgICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4gY3JlYXRlKGZsb2F0LCBmbG9h
dCwgRWRnZU1vZGVUeXBlKTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJl
dHVybiBtX3N0ZFg7IH0KLSAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQpOworICAgIHZv
aWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4KSB7IG1fc3RkWCA9IHg7IH0KIAogICAgIGZsb2F0
IHN0ZERldmlhdGlvblkoKSBjb25zdCB7IHJldHVybiBtX3N0ZFk7IH0KLSAgICB2b2lkIHNldFN0
ZERldmlhdGlvblkoZmxvYXQpOworICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCB5KSB7
IG1fc3RkWSA9IHk7IH0KIAogICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZWRnZU1vZGU7IH0KLSAgICB2b2lkIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7Cisg
ICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpIHsgbV9lZGdlTW9kZSA9
IGVkZ2VNb2RlOyB9CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXplKGNv
bnN0IEZpbHRlciYsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXpl
IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKLSAg
ICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRp
b24pOworICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmxvYXRT
aXplJiBzdGREZXZpYXRpb24pOworICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZVVuc2NhbGVk
S2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIElu
dFNpemUgY2FsY3VsYXRlT3V0c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7
CiAKIHByaXZhdGU6Ci0gICAgRkVHYXVzc2lhbkJsdXIoRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBF
ZGdlTW9kZVR5cGUpOworICAgIEZFR2F1c3NpYW5CbHVyKGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVU
eXBlKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVHYXVzc2lhbkJsdXIiOyB9CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJl
Y3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJh
bGxlbCBqb2JzCi0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFz
cyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMgewot
ICAgICAgICBGRUdhdXNzaWFuQmx1ciogZmlsdGVyOwotICAgICAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IGlvUGl4ZWxBcnJheTsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiB0bXBQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7
Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVYOwotICAgICAgICB1bnNpZ25lZCBrZXJuZWxT
aXplWTsKLSAgICB9OwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKKyAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJh
d2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmls
dGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3Qg
RmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1
bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3Rh
dGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4
Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQg
a2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5
R2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0
ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIElu
dFNpemUmIHBhaW50U2l6ZSk7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIGZsb2F0IG1fc3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNw
cAppbmRleCBkZjE3NmY4ZTA3MGE0MThjMjA4NTE4MDkwZWU3YTZjYTExM2U1NmY1Li5kNmQ1OTQy
ZjJmZmJhMmRjMzlmYmRkODRlNmI0MmFjY2YyYzU1MDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTEs
NyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKLSAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OCw0NzAgKzI4LDc3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVMaWdodGlu
Zy5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRkVMaWdodGlu
Z05FT04uaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9QYXJhbGxl
bEpvYnMuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91
dHB1dC5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdFZlY3Rvci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIExpZ2h0aW5n
VHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJm
YWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwg
ZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UsIFR5cGUgdHlw
ZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xpZ2h0aW5nVHlw
ZShsaWdodGluZ1R5cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGlnaHRTb3VyY2Up
KQotICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0aW5nOjpGRUxp
Z2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZm
dXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIHNvdXJjZSwgRmlsdGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKKyAgICA6
IEZpbHRlckVmZmVjdCh0eXBlKQorICAgICwgbV9jb2xvcihjb2xvcikKICAgICAsIG1fc3VyZmFj
ZVNjYWxlKHN1cmZhY2VTY2FsZSkKICAgICAsIG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25z
dGFudCkKICAgICAsIG1fc3BlY3VsYXJDb25zdGFudChzcGVjdWxhckNvbnN0YW50KQogICAgICwg
bV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5lbFVuaXRM
ZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhYKQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJu
ZWxVbml0TGVuZ3RoWSkKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKIHsKIH0KIAot
Ym9vbCBGRUxpZ2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQotewot
ICAgIGlmIChtX3N1cmZhY2VTY2FsZSA9PSBzdXJmYWNlU2NhbGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNjYWxlOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IoY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IpCitib29sIEZFTGlnaHRpbmc6OnNldENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAobV9saWdodGluZ0NvbG9yID09IGxpZ2h0aW5nQ29sb3IpCisgICAg
aWYgKG1fY29sb3IgPT0gY29sb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fbGln
aHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7CisgICAgbV9jb2xvciA9IGNvbG9yOwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYKQotewotICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGhYID09
IGtlcm5lbFVuaXRMZW5ndGhYKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2tlcm5l
bFVuaXRMZW5ndGhYID0ga2VybmVsVW5pdExlbmd0aFg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExl
bmd0aFkpCi17Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFkgPT0ga2VybmVsVW5pdExlbmd0
aFkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBr
ZXJuZWxVbml0TGVuZ3RoWTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGNvbnN0ZXhw
ciBpbnQgY1BpeGVsU2l6ZSA9IDQ7Ci1zdGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVs
T2Zmc2V0ID0gMzsKLXN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0
aWNfY2FzdDx1aW50OF90PigweEZGKTsKLQotLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1h
bCBjb2VmZmljaWVudHMgY29tZSBmcm9tIHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5v
cmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCi1zdGF0aWMg
Y29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2MiA9IC0xIC8gMi5mOwotc3RhdGljIGNvbnN0ZXhw
ciBmbG9hdCBjRmFjdG9yMWRpdjMgPSAtMSAvIDMuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQg
Y0ZhY3RvcjFkaXY0ID0gLTEgLyA0LmY7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3Iy
ZGl2MyA9IC0yIC8gMy5mOwotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0Rh
dGE6OnRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50
IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAt
MiAqIGNlbnRlciArIDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAgICAgICAt
MiAqIGNlbnRlciAtIHJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0K
LQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwo
aW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0g
ICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwot
ICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9t
TGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQg
Ym90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0y
ICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAgICAg
LWxlZnQgLSAyICogY2VudGVyIC0gcmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJv
dHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjp0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAr
PSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAg
ICAtMiAqIGxlZnQgKyAyICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAg
LWxlZnQgLSAyICogY2VudGVyICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQot
Ci1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBy
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
OwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2Vu
dGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogdG9w
IC0gdG9wUmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBv
ZmZzZXQsIEFscGhhV2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKLXsKLSAgICBpbnQgcmlnaHRB
bHBoYU9mZnNldCA9IG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0Owot
ICAgIAotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0
QWxwaGFPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShyaWdodEFscGhhT2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsK
LSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdo
dEFscGhhT2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKLQotICAgIGludCBs
ZWZ0ID0gYWxwaGFXaW5kb3cubGVmdCgpOwotICAgIGludCB0b3BMZWZ0ID0gYWxwaGFXaW5kb3cu
dG9wTGVmdCgpOwotICAgIGludCB0b3AgPSBhbHBoYVdpbmRvdy50b3AoKTsKLQotICAgIGludCBi
b3R0b21MZWZ0ID0gYWxwaGFXaW5kb3cuYm90dG9tTGVmdCgpOwotICAgIGludCBib3R0b20gPSBh
bHBoYVdpbmRvdy5ib3R0b20oKTsKLQotICAgIC8vIFRoZSBhbHBoYVdpbmRvdyBoYXMgYmVlbiBz
aGlmdGVkLCBhbmQgaGVyZSB3ZSBmaWxsIGluIHRoZSByaWdodCBjb2x1bW4uCi0gICAgYWxwaGFX
aW5kb3cuYWxwaGFbMF1bMl0gPSB0b3BSaWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsxXVsy
XSA9IHJpZ2h0OwotICAgIGFscGhhV2luZG93LmFscGhhWzJdWzJdID0gYm90dG9tUmlnaHQ7Ci0g
ICAgCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgYWxwaGFXaW5kb3cgaXMgd29ya2luZyB3aXRoIHNv
bWUgc3BvdC1jaGVja3MuCi0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcExlZnQoKSA9PSBwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3BMZWZ0Ci0gICAgQVNTRVJUKGFscGhhV2lu
ZG93LnRvcCgpID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wCi0KLSAgICByZXR1cm4gewotICAg
ICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21M
ZWZ0ICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0
ICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwo
aW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0g
ICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3Ag
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAg
ICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAt
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAq
IGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0b20sCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRv
cCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tCi0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUg
RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0Ci17Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBp
bnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
cmV0dXJuIHsKLSAgICAgICAgLXRvcCArIHRvcFJpZ2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdo
dCwKLSAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBjZW50ZXIgKyByaWdodAotICAg
IH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9t
Um93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Citib29sIEZFTGlnaHRpbmc6OnNldFN1cmZhY2VT
Y2FsZShmbG9hdCBzdXJmYWNlU2NhbGUpCiB7Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50
IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50
IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9w
TGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQsCi0gICAgICAgIC10b3BMZWZ0
IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgbGVmdCArIDIgKiBjZW50ZXIgKyByaWdodAotICAgIH07
CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zdXJmYWNlU2NhbGUsIHN1cmZhY2VTY2FsZSkg
IT0gbV9zdXJmYWNlU2NhbGU7CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2Jvb2wgRkVMaWdo
dGluZzo6c2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKIHsKLSAgICBp
bnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBv
ZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAg
ICAgLXRvcExlZnQgKyB0b3AgLSAyICogbGVmdCArIDIgKiBjZW50ZXIsCi0gICAgICAgIC10b3BM
ZWZ0IC0gMiAqIHRvcCArIGxlZnQgKyAyICogY2VudGVyCi0gICAgfTsKKyAgICByZXR1cm4gc3Rk
OjpleGNoYW5nZShtX2RpZmZ1c2VDb25zdGFudCwgZGlmZnVzZUNvbnN0YW50KSAhPSBtX2RpZmZ1
c2VDb25zdGFudDsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBj
b25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZ
LCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckNv
bnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCiB7Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFs
MkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3NwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFy
Q29uc3RhbnQpICE9IHNwZWN1bGFyQ29uc3RhbnQ7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0
UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0
IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBm
bG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9h
dCBhbHBoYSkKK2Jvb2wgRkVMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCBzcGVj
dWxhckV4cG9uZW50KQogewotICAgIGZsb2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxl
OwotICAgIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBt
X2xpZ2h0U291cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5
LCB6KTsKLQotICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7Ci0gICAgaWYgKG5vcm1hbDJEVmVjdG9y
LmlzWmVybygpKSB7Ci0gICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlz
IGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09
IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGgg
PSBtX2RpZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdo
dGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
RmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAgICAgICAgICAgbGlnaHRpbmdE
YXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRW
ZWN0b3IueSgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkg
KyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsK
LSAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAg
ICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkg
LyBoYWxmd2F5VmVjdG9yTGVuZ3RoOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3Iu
eigpIC8gaGFsZndheVZlY3Rvckxlbmd0aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0g
ICAgICAgICAgICBmYWN0b3JYICogbm9ybWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFj
ZVNjYWxlLAotICAgICAgICAgICAgZmFjdG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICog
ZGF0YS5zdXJmYWNlU2NhbGUsCi0gICAgICAgICAgICAxLjBmCi0gICAgICAgIH07Ci0gICAgICAg
IGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKLQotICAg
ICAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQot
ICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZl
Y3RvciAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICog
bGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBsaWdo
dGluZ0RhdGEubGlnaHRWZWN0b3IueCgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5s
aWdodFZlY3Rvci55KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9y
LnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0
aCgpOwotICAgICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAg
ICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9y
ICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxl
bmd0aCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9
IG1fc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3Ip
IC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFy
RXhwb25lbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAx
KQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMTsKLSAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDAp
Ci0gICAgICAgIGxpZ2h0U3RyZW5ndGggPSAwOwotCi0gICAgdWludDhfdCBwaXhlbFZhbHVlWzNd
ID0gewotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRp
bmdEYXRhLmNvbG9yVmVjdG9yLngoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueSgpICogMjU1
LjBmKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0
aW5nRGF0YS5jb2xvclZlY3Rvci56KCkgKiAyNTUuMGYpCi0gICAgfTsKLSAgICAKLSAgICBkYXRh
LnBpeGVscy0+c2V0UmFuZ2UocGl4ZWxWYWx1ZSwgMywgb2Zmc2V0KTsKKyAgICByZXR1cm4gc3Rk
OjpleGNoYW5nZShtX3NwZWN1bGFyRXhwb25lbnQsIHNwZWN1bGFyRXhwb25lbnQpICE9IG1fc3Bl
Y3VsYXJFeHBvbmVudDsKIH0KIAotLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3Jp
dGUgdG8gdGhlIHNhbWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEg
Y2hhbm5lbCwgYW5kIHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5uZWxzLgotdm9pZCBGRUxpZ2h0
aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwg
Y29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZ
LCBpbnQgZW5kWSkKLXsKLSAgICAvLyBNYWtlIHN1cmUgc3RhcnRZIGlzID4gMCBzaW5jZSB3ZSBy
ZWFkIGZyb20gdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4KLSAgICBBU1NFUlQoc3RhcnRZ
KTsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZ
OyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCByb3dTdGFydE9mZnNldCA9IHkgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQgcHJldmlvdXNSb3dTdGFy
dCA9IHJvd1N0YXJ0T2Zmc2V0IC0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAg
ICAgICAgaW50IG5leHRSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0ICsgZGF0YS53aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZTsKLQotICAgICAgICAvLyBhbHBoYVdpbmRvdyBpcyBhIGxvY2FsIGNh
Y2hlIG9mIGFscGhhIHZhbHVlcy4KLSAgICAgICAgLy8gRmlsbCB0aGUgdHdvIHJpZ2h0IGNvbHVt
bnMgcHV0dGluZyB0aGUgbGVmdCBlZGdlIHZhbHVlIGluIHRoZSBjZW50ZXIgY29sdW1uLgotICAg
ICAgICAvLyBGb3IgZWFjaCBwaXhlbCwgd2Ugc2hpZnQgZWFjaCByb3cgbGVmdCB0aGVuIGZpbGwg
dGhlIHJpZ2h0IGNvbHVtbi4KLSAgICAgICAgQWxwaGFXaW5kb3cgYWxwaGFXaW5kb3c7Ci0gICAg
ICAgIGFscGhhV2luZG93LnNldFRvcChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3BSaWdo
dChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRDZW50ZXIoZGF0YS5w
aXhlbHMtPml0ZW0ocm93U3RhcnRPZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
ICAgIGFscGhhV2luZG93LnNldFJpZ2h0KGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0
ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdp
bmRvdy5zZXRCb3R0b20oZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b21SaWdodChkYXRhLnBp
eGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotCi0gICAgICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9mZnNldCArIGNQaXhlbFNpemU7
Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyAr
K3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBhbHBoYVdpbmRvdy5zaGlm
dCgpOwotICAgICAgICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5n
RGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JOb3Jt
YWwob2Zmc2V0LCBhbHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNlbnRlcigpKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtl
cihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCitib29sIEZFTGln
aHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKQogewot
ICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0
ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwg
cGFyYW1ldGVycy0+eUVuZCk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rZXJuZWxVbml0
TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFgpICE9IG1fa2VybmVsVW5pdExlbmd0aFg7CiB9CiAK
LXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRh
JiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17
Ci0gICAgdW5zaWduZWQgcm93c1RvUHJvY2VzcyA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUg
LSAxOwotICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsKLSAg
ICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0
YS53aWR0aERlY3JlYXNlZEJ5T25lIC0gMSkgKiByb3dzVG9Qcm9jZXNzKSAvIHNfbWluaW1hbFJl
Y3REaW1lbnNpb24sIG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVy
ID4gMSkgewotICAgICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKLSAgICAgICAgV1RG
OjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzPiBwYXJhbGxlbEpv
YnMoJnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQot
ICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgaW50IGpvYiA9IHBh
cmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKGpvYiA+IDEpIHsKLSAgICAg
ICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAieVN0ZXAiLXNpemVkIGpvYnMgYnV0IHRoZXJl
IGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQotICAgICAg
ICAgICAgLy8geVN0ZXAgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5k
bGVkIGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgotICAgICAgICAgICAgY29uc3Qg
aW50IHlTdGVwID0gcm93c1RvUHJvY2VzcyAvIGpvYjsKLSAgICAgICAgICAgIGNvbnN0IGludCBq
b2JzV2l0aEV4dHJhID0gcm93c1RvUHJvY2VzcyAlIGpvYjsKLQotICAgICAgICAgICAgaW50IHlT
dGFydCA9IDE7Ci0gICAgICAgICAgICBmb3IgKC0tam9iOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMmIHBhcmFtcyA9IHBh
cmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVy
ID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZGF0YSA9IGRhdGE7Ci0gICAgICAgICAg
ICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9IHBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMueVN0YXJ0ID0geVN0YXJ0OwotICAgICAgICAgICAgICAgIHlTdGFydCArPSBqb2Ig
PCBqb2JzV2l0aEV4dHJhID8geVN0ZXAgKyAxIDogeVN0ZXA7Ci0gICAgICAgICAgICAgICAgcGFy
YW1zLnlFbmQgPSB5U3RhcnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXJhbGxlbEpv
YnMuZXhlY3V0ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8v
IEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgotICAgIH0KLQotICAgIHBsYXRmb3Jt
QXBwbHlHZW5lcmljUGFpbnQoZGF0YSwgcGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodERlY3Jl
YXNlZEJ5T25lKTsKLX0KLQotaW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseShj
b25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkKK2Jvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxv
YXQga2VybmVsVW5pdExlbmd0aFkpCiB7Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50
dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSNpZiBD
UFUoQVJNX05FT04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdDQ19DT01Q
QVRJQkxFKQotICAgIHBsYXRmb3JtQXBwbHlOZW9uKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0jZWxz
ZQotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0jZW5kaWYK
KyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2tlcm5lbFVuaXRMZW5ndGhZLCBrZXJuZWxVbml0
TGVuZ3RoWSkgIT0gbV9rZXJuZWxVbml0TGVuZ3RoWTsKIH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQorRmxvYXRSZWN0IEZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWlu
dGluZ0RhdGE7Ci0gICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0KLSAgICAvLyBGSVhNRTogZG8gc29t
ZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBU
aGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0
IHJldHVybnMuCi0gICAgaWYgKHdpZHRoIDw9IDIgfHwgaGVpZ2h0IDw9IDIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGRhdGEucGl4ZWxzID0gJnBpeGVsczsKLSAgICBkYXRhLnN1cmZh
Y2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1LjBmOwotICAgIGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUgPSB3aWR0aCAqIGNQaXhlbFNpemU7Ci0gICAgZGF0YS53aWR0aERlY3Jl
YXNlZEJ5T25lID0gd2lkdGggLSAxOwotICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBo
ZWlnaHQgLSAxOwotCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xpZ2h0aW5nQ29sb3IudG9D
b2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBw
YWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQz
RChyLCBnLCBiKTsKLQotICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMs
IHBhaW50aW5nRGF0YSk7Ci0KLSAgICAvLyBUb3AgbGVmdC4KLSAgICBpbnQgb2Zmc2V0ID0gMDsK
LSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgMCwgY0ZhY3RvcjJk
aXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9wTGVmdE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8v
IFRvcCByaWdodC4KLSAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
IC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwg
ZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2Mywg
ZGF0YS50b3BSaWdodE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8vIEJvdHRvbSBsZWZ0LgotICAg
IG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAw
LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2Mywg
ZGF0YS5ib3R0b21MZWZ0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gQm90dG9tIHJpZ2h0Lgot
ICAgIG9mZnNldCA9IGhlaWdodCAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBj
UGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRh
LndpZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3Iy
ZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbVJpZ2h0Tm9ybWFsKG9mZnNldCkpOwotCi0g
ICAgaWYgKHdpZHRoID49IDMpIHsKLSAgICAgICAgLy8gVG9wIHJvdy4KLSAgICAgICAgb2Zmc2V0
ID0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVj
cmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQ
aXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYzLCBjRmFj
dG9yMWRpdjIsIGRhdGEudG9wUm93Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgICAgIC8vIEJvdHRv
bSByb3cuCi0gICAgICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQ
aXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0
YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRp
djIsIGRhdGEuYm90dG9tUm93Tm9ybWFsKG9mZnNldCkpOwotICAgIH0KLQotICAgIGlmIChoZWln
aHQgPj0gMykgewotICAgICAgICAvLyBMZWZ0IGNvbHVtbi4KLSAgICAgICAgb2Zmc2V0ID0gZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkg
PCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBw
YWludGluZ0RhdGEsIDAsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLmxlZnRD
b2x1bW5Ob3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAgICAgLy8gUmlnaHQgY29sdW1uLgotICAgICAg
ICBvZmZzZXQgPSAyICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNp
emU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9u
ZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkKLSAgICAg
ICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVj
cmVhc2VkQnlPbmUsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLnJpZ2h0Q29s
dW1uTm9ybWFsKG9mZnNldCkpOwotICAgIH0KLQotICAgIGlmICh3aWR0aCA+PSAzICYmIGhlaWdo
dCA+PSAzKSB7Ci0gICAgICAgIC8vIEludGVyaW9yIHBpeGVscy4KLSAgICAgICAgcGxhdGZvcm1B
cHBseShkYXRhLCBwYWludGluZ0RhdGEpOwotICAgIH0KLQotICAgIGludCBsYXN0UGl4ZWwgPSBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OwotICAgIGlmIChtX2xpZ2h0
aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGNBbHBo
YUNoYW5uZWxPZmZzZXQ7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAg
ICAgIGRhdGEucGl4ZWxzLT5zZXQoaSwgY09wYXF1ZUFscGhhKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKSB7Ci0g
ICAgICAgICAgICB1aW50OF90IGExID0gZGF0YS5waXhlbHMtPml0ZW0oaSk7Ci0gICAgICAgICAg
ICB1aW50OF90IGEyID0gZGF0YS5waXhlbHMtPml0ZW0oaSArIDEpOwotICAgICAgICAgICAgdWlu
dDhfdCBhMyA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAyKTsKLSAgICAgICAgICAgIC8vIGFscGhh
IHNldCB0byBzZXQgdG8gbWF4KGExLCBhMiwgYTMpCi0gICAgICAgICAgICBkYXRhLnBpeGVscy0+
c2V0KGkgKyAzLCBhMSA+PSBhMiA/IChhMSA+PSBhMyA/IGExIDogYTMpIDogKGEyID49IGEzID8g
YTIgOiBhMykpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUxpZ2h0aW5nOjphcHBseShGaWx0ZXJPdXRw
dXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3Vu
ZGFyeVNldCkgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOworICAg
IEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3Qo
KTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5UHJl
bXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVu
aXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFcz
Ci0gICAgLy8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJy
b3dzZXJzIChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCi0gICAgLy8gb3V0cHV0IGZvciB2YXJp
b3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJs
ZS4KLSAgICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBp
bXBsZW1lbnRhdGlvbgorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0
KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBJbnRTaXplIGFic29s
dXRlUGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZHJhd0xpZ2h0
aW5nKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJz
b2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1
dCwgeyBpbiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCmluZGV4IDBmZmZjZDA2NDM5NmQ4ZjRiNjQwODIyNjlj
YzIwNzRmN2M5ZGJkYmMuLmI4OThhYzk3ODg3YmNkZmYwMWRiNTZkZjM1MDI4ODM4ZWNiYzQxNGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVn
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTM5ICszMSw1MSBAQAogI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkxp
Z2h0U291cmNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgotCi0vLyBD
b21tb24gYmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRpbmcgYW5kIEZFU3BlY3VsYXJMaWdo
dGluZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBGRUxpZ2h0aW5nUGFpbnRpbmdE
YXRhRm9yTmVvbjsKLQogY2xhc3MgRkVMaWdodGluZyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7
IH0KKyAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Cisg
ICAgYm9vbCBzZXRDb2xvcihjb25zdCBDb2xvciYpOwogCiAgICAgZmxvYXQgc3VyZmFjZVNjYWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0KICAgICBib29sIHNldFN1cmZhY2VT
Y2FsZShmbG9hdCk7CiAKLSAgICBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQotICAgIGJvb2wgc2V0TGlnaHRpbmdDb2xvcihjb25z
dCBDb2xvciYpOworICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlmZnVzZUNvbnN0YW50OyB9CisgICAgYm9vbCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQpOwor
CisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJD
b25zdGFudDsgfQorICAgIGJvb2wgc2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7CiAKKyAgICBm
bG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50
OyB9CisgICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KTsKKyAgICAKICAgICBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFg7
IH0KICAgICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0KTsKIAogICAgIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhZKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWTsgfQog
ICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQpOwogCi0gICAgY29uc3QgTGlnaHRT
b3VyY2UmIGxpZ2h0U291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9saWdodFNvdXJjZS5nZXQoKTsg
fQorICAgIGNvbnN0IExpZ2h0U291cmNlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxS
ZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFy
YWxsZWwgam9icworICAgIEZFTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2Nh
bGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYsIEZpbHRlckZ1bmN0aW9uOjpUeXBlKTsKIAot
ICAgIGVudW0gTGlnaHRpbmdUeXBlIHsKLSAgICAgICAgRGlmZnVzZUxpZ2h0aW5nLAotICAgICAg
ICBTcGVjdWxhckxpZ2h0aW5nCi0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cg
ewotICAgICAgICB1aW50OF90IGFscGhhWzNdWzNdIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8v
IFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGlj
ZXMgZWFzaWVyLgotICAgICAgICB1aW50OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAgICB7
IHJldHVybiBhbHBoYVswXVswXTsgfQotICAgICAgICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAg
ICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVswXTsgfQotICAgICAgICB1aW50OF90IGJvdHRv
bUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVswXTsgfQotCi0gICAgICAg
IHVpbnQ4X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFd
OyB9Ci0gICAgICAgIHVpbnQ4X3QgY2VudGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJu
IGFscGhhWzFdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAg
ICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AodWludDhf
dCB2YWx1ZSkgICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQg
c2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQot
ICAgICAgICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFd
ID0gdmFsdWU7IH0KLQotICAgICAgICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAg
ICB7IGFscGhhWzBdWzJdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90
IHZhbHVlKSAgICAgICAgeyBhbHBoYVsxXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0
Qm90dG9tUmlnaHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQotCi0g
ICAgICAgIHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4X3QgYWxwaGFbM10pCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGFscGhhWzBdID0gYWxwaGFbMV07Ci0gICAgICAgICAgICBhbHBoYVsxXSA9
IGFscGhhWzJdOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOwotICAgICAgICAgICAgc2hp
ZnRSb3coYWxwaGFbMV0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBMaWdodGluZ0RhdGEgewotICAgICAgICAvLyBUaGlz
IHN0cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAg
ICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKLSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxl
OwotICAgICAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCB3
aWR0aERlY3JlYXNlZEJ5T25lOwotICAgICAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7Ci0K
LSAgICAgICAgaW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
LSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Owot
ICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
LSAgICAgICAgaW5saW5lIEludFNpemUgbGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dDsKLSAgICAgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxw
aGFXaW5kb3cmKSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3Jt
YWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJv
d05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9t
UmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQotICAgIHN0cnVj
dCBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMgewotICAgICAgICBGRUxpZ2h0aW5nKiBm
aWx0ZXI7Ci0gICAgICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotICAgICAgICBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICAgICAgaW50IHlTdGFydDsKLSAgICAgICAg
aW50IHlFbmQ7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmlj
V29ya2VyKFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyopOwotICAgIHN0YXRpYyB2b2lk
IHBsYXRmb3JtQXBwbHlOZW9uV29ya2VyKEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uKik7
Ci0KLSAgICBGRUxpZ2h0aW5nKEZpbHRlciYsIExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+
JiYsIFR5cGUpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICJGRUxpZ2h0aW5nIjsgfQotCi0gICAgYm9vbCBkcmF3TGlnaHRpbmcoVWludDhDbGFt
cGVkQXJyYXkmLCBpbnQsIGludCk7Ci0KLSAgICB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNv
bnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQg
eCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVj
dG9yKTsKLSAgICB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRp
bmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwg
ZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IsIGZsb2F0
IGFscGhhKTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYpOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
aW50KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
LCBpbnQgc3RhcnRYLCBpbnQgc3RhcnRZKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmlj
KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsK
LQotI2lmIENQVShBUk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIo
R0NDX0NPTVBBVElCTEUpCi0gICAgc3RhdGljIGludCBnZXRQb3dlckNvZWZmaWNpZW50cyhmbG9h
dCBleHBvbmVudCk7Ci0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseU5lb24oY29uc3QgTGln
aHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotI2VuZGlmCi0K
LSAgICBMaWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7Ci0gICAgUmVmPExpZ2h0U291cmNlPiBt
X2xpZ2h0U291cmNlOwotCi0gICAgQ29sb3IgbV9saWdodGluZ0NvbG9yOworICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRl
clJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmls
dGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBDb2xvciBtX2NvbG9yOwogICAgIGZsb2F0
IG1fc3VyZmFjZVNjYWxlOwogICAgIGZsb2F0IG1fZGlmZnVzZUNvbnN0YW50OwogICAgIGZsb2F0
IG1fc3BlY3VsYXJDb25zdGFudDsKICAgICBmbG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7CiAgICAg
ZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhZ
OworICAgIFJlZjxMaWdodFNvdXJjZT4gbV9zb3VyY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDBhMjAwMDFiMTczYmQ4ZmRmNmJiYTYzNmNkMjNjZTQ3MDI2
ZTdiM2YuLmE2MDQyOWFjNTQ4MmRlOGY2ZWIyMmE5NmM4OWFlOTFjY2IzZGRkYWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNw
cApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjIsNTEgKzIzLDQ5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNZXJnZS5o
IgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1lcmdlOjpGRU1lcmdlKEZp
bHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TWVyZ2UpCitS
ZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRz
KQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTWVyZ2UobnVtYmVyT2ZFZmZlY3RJbnB1
dHMpKTsKIH0KIAotUmVmPEZFTWVyZ2U+IEZFTWVyZ2U6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikK
K0ZFTWVyZ2U6OkZFTWVyZ2UodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCisgICAgOiBG
aWx0ZXJFZmZlY3QoVHlwZTo6RkVNZXJnZSkKKyAgICAsIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMo
bnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJn
ZShmaWx0ZXIpKTsKKyAgICBBU1NFUlQobV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiB9CiAKLXZv
aWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2NvbnN0IEF0b21TdHJpbmcmIEZF
TWVyZ2U6OmVmZmVjdE5hbWUoKQogewotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVj
dElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgc3RhdGljIE1haW5UaHJlYWRO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIkZFTWVyZ2UiLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIHNfZWZmZWN0TmFt
ZTsKK30KKworRmlsdGVyUmVzdWx0KiBGRU1lcmdlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1
dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID09IG1fbnVtYmVyT2ZFZmZlY3RJbnB1
dHMpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgVmVj
dG9yPFJlZjxGaWx0ZXJSZXN1bHQ+PiBpbnB1dHM7CisgICAgZm9yIChhdXRvIGlucHV0c1NpemUg
PSBtX251bWJlck9mRWZmZWN0SW5wdXRzOyBpbnB1dHNTaXplLS07ICkKKyAgICAgICAgaW5wdXRz
LmFwcGVuZChzdGFjay50YWtlTGFzdCgpKTsKIAorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1
dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAg
ICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOwotICAgICAgICBpZiAoSW1hZ2VCdWZmZXIq
IGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCkpCi0gICAgICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICB9CisgICAgcmV0dXJuIGFwcGx5UGxh
dGZvcm0ob3V0cHV0LCBpbnB1dHMsIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9
CiAKLVRleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJl
YW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTWVyZ2Ui
OwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAg
IEFTU0VSVChzaXplID4gMCk7Ci0gICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8
ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgaW5wdXRF
ZmZlY3QoaSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAg
ICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMgPDwgIlwi
XVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDcz
ZTU3YjAxOTRlYmNmMThmMjYwNy4uYTFjMDc4ZTAzMGE1N2I5ZjcxYzk3OWY5YzE5MmQ0ZGJiMWRj
ODNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI4LDE2ICsyOSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZF
TWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZF
TWVyZ2U+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZSh1
bnNpZ25lZCBtX251bWJlck9mRWZmZWN0SW5wdXRzKTsKKworICAgIHN0YXRpYyBjb25zdCBBdG9t
U3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgRkVNZXJnZShGaWx0ZXImKTsK
KyAgICBGRU1lcmdlKHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKTsKIAogICAgIGNvbnN0
IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNZXJnZSI7IH0KIAot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVz
dWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVy
Qm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShG
aWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX251bWJl
ck9mRWZmZWN0SW5wdXRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCmluZGV4IDhhN2U1YjY2N2FiNzczYjkwYjg5MGUzODM4NjM5MzU2MmI5ZDhkZjUuLmRi
ODgwYjRmOTI2YzBiOWQwYWQ5MzNiZGNlNGNlMzEyN2JiMzUwOTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAy
MDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5j
LiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjUsMjY1ICsyNSw2NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTW9ycGhv
bG9neS5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JU
eXBlcy5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0j
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6TW9ycGhvbG9neSkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAg
ICwgbV9yYWRpdXNYKHJhZGl1c1gpCi0gICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKK1JlZjxGRU1v
cnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9s
b2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCiB7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KG1vcnBob2xvZ3lPcGVyYXRvciwgcmFkaXVzWCwg
cmFkaXVzWSkpOwogfQogCi1SZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShG
aWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNY
LCBmbG9hdCByYWRpdXNZKQorRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9w
ZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkK
KyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU1vcnBob2xvZ3kpCisgICAgLCBtX21vcnBob2xv
Z3lPcGVyYXRvcihtb3JwaG9sb2d5T3BlcmF0b3IpCisgICAgLCBtX3JhZGl1c1gocmFkaXVzWCkK
KyAgICAsIG1fcmFkaXVzWShyYWRpdXNZKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
TW9ycGhvbG9neShmaWx0ZXIsIHR5cGUsIHJhZGl1c1gsIHJhZGl1c1kpKTsKIH0KIAotYm9vbCBG
RU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
IHR5cGUpCitib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xv
Z3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3IpCiB7Ci0gICAgaWYgKG1fdHlwZSA9PSB0eXBl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV90eXBlID0gdHlwZTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX21vcnBob2xvZ3lPcGVyYXRvciwgbW9y
cGhvbG9neU9wZXJhdG9yKSAhPSBtb3JwaG9sb2d5T3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVNb3Jw
aG9sb2d5OjpzZXRSYWRpdXNYKGZsb2F0IHJhZGl1c1gpCiB7Ci0gICAgaWYgKG1fcmFkaXVzWCA9
PSByYWRpdXNYKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9yYWRpdXNYID0gcmFkaXVz
WDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3JhZGl1c1gs
IHJhZGl1c1gpICE9IG1fcmFkaXVzWDsKIH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1
c1koZmxvYXQgcmFkaXVzWSkKIHsKLSAgICBpZiAobV9yYWRpdXNZID09IHJhZGl1c1kpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3JhZGl1c1kgPSByYWRpdXNZOwotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIEZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KQotewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQ
YWludFJlY3QoKTsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIHBh
aW50UmVjdC5pbmZsYXRlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1
c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFp
bnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFp
bnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3Qo
ZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcGl4
ZWxBcnJheUluZGV4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoKQotewotICAgIHJldHVybiAoeSAq
IHdpZHRoICsgeCkgKiA0OwotfQotCi1pbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhl
bCkKLXsKLSAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOwotfQot
Ci1pbmxpbmUgUGFja2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25l
bnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKLXsKLSAg
ICByZXR1cm4gUGFja2VkQ29sb3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWlu
dDhfdD4+KGNvbXBvbmVudHMpIH07Ci19Ci0KLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9y
TWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21w
b25lbnRzPHVpbnQ4X3QsIDQ+JiBiKQotewotICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKLQot
ICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgoYSwgYik7Ci19Ci0KLXRlbXBsYXRlPE1vcnBob2xv
Z3lPcGVyYXRvclR5cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFy
cmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCkKLXsKLSAgICBhdXRv
IGV4dHJlbXVtID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9y
OjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5
LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5U3RhcnQsIHdpZHRoKSkgfSk7Ci0KLSAgICBm
b3IgKGludCB5ID0geVN0YXJ0ICsgMTsgeSA8IHlFbmQ7ICsreSkgewotICAgICAgICBhdXRvIHBp
eGVsID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JB
IHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEo
KSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpIH0pOwotICAgICAgICBleHRyZW11bSA9
IG1pbk9yTWF4PHR5cGU+KGV4dHJlbXVtLCBwaXhlbCk7Ci0gICAgfQotICAgIHJldHVybiBleHRy
ZW11bTsKLX0KLQotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29s
dW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
IHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQot
ICAgICAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RF
PihzcmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKLQotICAgIHJldHVybiBj
b2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihzcmNQaXhlbEFycmF5
LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKLX0KLQotdXNpbmcgQ29sdW1uRXh0cmVtYSA9IFZl
Y3RvcjxDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4sIDE2PjsKLQotdGVtcGxhdGU8TW9ycGhv
bG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsKQotewot
ICAgIGF1dG8gZXh0cmVtdW0gPSBrZXJuZWxbMF07Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBrZXJuZWwuc2l6ZSgpOyArK2kpCi0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4o
ZXh0cmVtdW0sIGtlcm5lbFtpXSk7Ci0KLSAgICByZXR1cm4gZXh0cmVtdW07Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0
IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewot
ICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0
dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsK
LQotICAgIHJldHVybiBrZXJuZWxFeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRF
PihrZXJuZWwpOwotfQotCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFydFksIGludCBlbmRZKQot
ewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIGNvbnN0IGF1dG8mIHNyY1BpeGVs
QXJyYXkgPSAqcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXk7Ci0gICAgYXV0byYgZHN0UGl4ZWxB
cnJheSA9ICpwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheTsKLQotICAgIGNvbnN0IGludCByYWRp
dXNYID0gcGFpbnRpbmdEYXRhLnJhZGl1c1g7Ci0gICAgY29uc3QgaW50IHJhZGl1c1kgPSBwYWlu
dGluZ0RhdGEucmFkaXVzWTsKLSAgICBjb25zdCBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEud2lk
dGg7Ci0gICAgY29uc3QgaW50IGhlaWdodCA9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0KLSAgICBB
U1NFUlQocmFkaXVzWCA8PSB3aWR0aCB8fCByYWRpdXNZIDw9IGhlaWdodCk7Ci0gICAgQVNTRVJU
KHN0YXJ0WSA+PSAwICYmIGVuZFkgPD0gaGVpZ2h0ICYmIHN0YXJ0WSA8IGVuZFkpOwotCi0gICAg
Q29sdW1uRXh0cmVtYSBleHRyZW1hOwotICAgIGV4dHJlbWEucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSgyICogcmFkaXVzWCArIDEpOwotCi0gICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7
ICsreSkgewotICAgICAgICBpbnQgeVJhZGl1c1N0YXJ0ID0gc3RkOjptYXgoMCwgeSAtIHJhZGl1
c1kpOwotICAgICAgICBpbnQgeVJhZGl1c0VuZCA9IHN0ZDo6bWluKGhlaWdodCwgeSArIHJhZGl1
c1kgKyAxKTsKLQotICAgICAgICBleHRyZW1hLnNocmluaygwKTsKLQotICAgICAgICAvLyBXZSBz
dGFydCBhdCB0aGUgbGVmdCBlZGdlLCBzbyBjb21wdXRlIGV4dHJlbWUgZm9yIHRoZSByYWRpdXNY
IGNvbHVtbnMuCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcmFkaXVzWDsgKyt4KQotICAg
ICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCwg
eVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgbV90eXBlKSk7Ci0KLSAgICAgICAgLy8g
S2VybmVsIGlzIGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICBpZiAoeCA8IHdpZHRo
IC0gcmFkaXVzWCkKLSAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11
bShzcmNQaXhlbEFycmF5LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3
aWR0aCwgbV90eXBlKSk7Ci0KLSAgICAgICAgICAgIGlmICh4ID4gcmFkaXVzWCkKLSAgICAgICAg
ICAgICAgICBleHRyZW1hLnJlbW92ZSgwKTsKLQotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RQ
aXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQaXhlbEFycmF5LmRhdGEoKSAr
IHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpOwotICAgICAgICAgICAgKmRlc3RQaXhlbCA9
IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhrZXJuZWxFeHRyZW11bShleHRyZW1h
LCBtX3R5cGUpKS52YWx1ZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBGRU1vcnBob2xv
Z3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtKQot
ewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRp
bmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CisgICAgcmV0dXJuIHN0ZDo6ZXhj
aGFuZ2UobV9yYWRpdXNZLCByYWRpdXNZKSAhPSBtX3JhZGl1c1k7CiB9CiAKLXZvaWQgRkVNb3Jw
aG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQor
RmxvYXRSZWN0IEZFTW9ycGhvbG9neTo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1
bnRpbWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXpl
cyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBz
cXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsK
KyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIGRyYXdpbmdSZWN0ID0g
aW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwogCi0gICAgc3RhdGljIGNvbnN0IGludCBtaW5pbWFs
QXJlYSA9ICgxNjAgKiAxNjApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwg
am9icwotICAgIAotICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBwYWludGluZ0RhdGEuaGVp
Z2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5z
aWduZWQ+KChwYWludGluZ0RhdGEud2lkdGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICoga2VybmVs
RmFjdG9yKSAvIG1pbmltYWxBcmVhLCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1hbFRo
cmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBs
eVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9y
bUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLSAgICAgICAgYXV0byBudW1PZlRo
cmVhZHMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChudW1PZlRo
cmVhZHMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gImpvYlNpemUi
LXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5
IGxhcmdlciBzaW5jZQotICAgICAgICAgICAgLy8gam9iU2l6ZSAqIGpvYnMgPCB0b3RhbCBzaXpl
LiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRy
YSIuCi0gICAgICAgICAgICBpbnQgam9iU2l6ZSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyBudW1P
ZlRocmVhZHM7Ci0gICAgICAgICAgICBpbnQgam9ic1dpdGhFeHRyYSA9IHBhaW50aW5nRGF0YS5o
ZWlnaHQgJSBudW1PZlRocmVhZHM7Ci0gICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOwotICAg
ICAgICAgICAgZm9yIChpbnQgam9iID0gbnVtT2ZUaHJlYWRzIC0gMTsgam9iID49IDA7IC0tam9i
KSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtID0gcGFy
YWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFtLmZpbHRlciA9
IHRoaXM7Ci0gICAgICAgICAgICAgICAgcGFyYW0uc3RhcnRZID0gY3VycmVudFk7Ci0gICAgICAg
ICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGpvYlNpemUgKyAxIDog
am9iU2l6ZTsKLSAgICAgICAgICAgICAgICBwYXJhbS5lbmRZID0gY3VycmVudFk7Ci0gICAgICAg
ICAgICAgICAgcGFyYW0ucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZCBtb2Rl
bAotICAgIH0KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlKGdlb21ldHJ5LnJlc29sdmVUb0ZpbHRl
ckNvb3JkaW5hdGVzKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwogCi0gICAgcGxhdGZvcm1B
cHBseUdlbmVyaWMocGFpbnRpbmdEYXRhLCAwLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsKLX0KLQot
Ym9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNY
LCBpbnQgcmFkaXVzWSkKLXsKLSAgICBpZiAocmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwg
KCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhl
bEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNs
aXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihkcmF3aW5nUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsK
IH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFTW9ycGhvbG9neTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJl
c3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0g
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEFTU0VSVCghc3RhY2su
aXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAg
ICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGlu
LT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
LQotICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fcmFkaXVz
WCwgbV9yYWRpdXNZKSk7Ci0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMu
aGVpZ2h0KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMt
PmZpbHRlcigpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVk
UmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlm
ICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmFkaXVzID0gZmxv
b3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwg
bV9yYWRpdXNZIH0pKTsKLSAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdS
ZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7Ci0gICAgaW50IHJhZGl1c1kgPSBzdGQ6
Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7Ci0K
LSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBl
ZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzWCwgcmFkaXVzWSkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQ
aXhlbEFycmF5ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKLSAgICBwYWludGluZ0RhdGEuZHN0
UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgcGFpbnRpbmdEYXRhLndp
ZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKLSAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qu
aGVpZ2h0KCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1
c1ggPSBjZWlsZihyYWRpdXNYICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5n
RGF0YS5yYWRpdXNZID0gY2VpbGYocmFkaXVzWSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQot
ICAgIHBsYXRmb3JtQXBwbHkocGFpbnRpbmdEYXRhKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9y
bShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAot
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yJiBtb3JwaG9sb2d5T3BlcmF0
b3IpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChtb3JwaG9sb2d5T3BlcmF0
b3IpIHsKICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICB0
cyA8PCAiVU5LTk9XTiI7CiAgICAgICAgIGJyZWFrOwpAQCAtMjk3LDE1ICs5NiwxMSBAQCBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSYgdHlwZQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVN
b3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNl
bnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRU1vcnBob2xv
Z3k6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTW9ycGhvbG9neSI7Ci0g
ICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlv
bik7CiAgICAgdHMgPDwgIiBvcGVyYXRvcj1cIiIgPDwgbW9ycGhvbG9neU9wZXJhdG9yKCkgPDwg
IlwiICIKICAgICAgICA8PCAicmFkaXVzPVwiIiA8PCByYWRpdXNYKCkgPDwgIiwgIiA8PCByYWRp
dXNZKCkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNj
b3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
cmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXgg
NDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2YxNGVkZjA3NWRlMzljNWExMS4uMzAwYTVlOTYyM2UwZWY4
NGI4ZjQwZDhkYzI2NDU4ODdmZjllN2RkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCkBAIC0yLDYgKzIsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwxMSArMjMsMTAgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmls
dGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIHsKK2VudW0gTW9ycGhvbG9neU9wZXJhdG9yIHsKICAgICBGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfVU5LTk9XTiA9IDAsCiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFID0gMSwKICAg
ICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFID0gMgpAQCAtMzQsMTAgKzM0LDEwIEBAIGVu
dW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CiAKIGNsYXNzIEZFTW9ycGhvbG9neSA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBj
cmVhdGUoRmlsdGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxv
YXQgcmFkaXVzWSk7CisgICAgc3RhdGljIFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShNb3JwaG9s
b2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0gICAgTW9ycGhv
bG9neU9wZXJhdG9yVHlwZSBtb3JwaG9sb2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KLSAgICBib29sIHNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlKTsKKyAgICBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9tb3JwaG9sb2d5T3BlcmF0b3I7IH0KKyAgICBib29sIHNldE1vcnBob2xvZ3lP
cGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3IpOwogCiAgICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmFkaXVzWDsgfQogICAgIGJvb2wgc2V0UmFkaXVzWChmbG9hdCk7CkBAIC00
Niw0MCArNDYsMTkgQEAgcHVibGljOgogICAgIGJvb2wgc2V0UmFkaXVzWShmbG9hdCk7CiAKIHBy
aXZhdGU6Ci0gICAgRkVNb3JwaG9sb2d5KEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUs
IGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIEZFTW9ycGhvbG9neShNb3JwaG9s
b2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCiAgICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1vcnBob2xvZ3kiOyB9
CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3Zl
cnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1
bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0
d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJh
eSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwg
aW50IHJhZGl1c1kpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVk
QXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhl
bEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAg
IGludCByYWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9OwotCi0gICAgc3RydWN0
IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVNb3JwaG9sb2d5KiBmaWx0ZXI7
Ci0gICAgICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgICAgICBjb25zdCBQ
YWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxh
dGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwotCi0gICAgdm9pZCBw
bGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwotCi0g
ICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7CisgICAgTW9ycGhvbG9neU9wZXJhdG9y
IG1fbW9ycGhvbG9neU9wZXJhdG9yOwogICAgIGZsb2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBt
X3JhZGl1c1k7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMjcwZGI5MjQ4MWEzMzkyZDNkNWExZTkxN2My
ZDY1YWE0MTQwZjY5Li5kZGE2NjVkNzUyZmI1MDBkNmIwODZiNjQ5YTdmODBhNWFjOGIwOWQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
T2Zmc2V0LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTI0LDcxICsyNSw0OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFT2Zmc2V0
LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVPZmZzZXQ6OkZFT2Zmc2V0KEZpbHRlciYg
ZmlsdGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBU
eXBlOjpPZmZzZXQpCitGRU9mZnNldDo6RkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KQorICAg
IDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFT2Zmc2V0KQogICAgICwgbV9keChkeCkKICAgICAsIG1f
ZHkoZHkpCiB7CiB9CiAKLVJlZjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShGaWx0ZXImIGZp
bHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQorUmVmPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRl
KGZsb2F0IGR4LCBmbG9hdCBkeSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNl
dChmaWx0ZXIsIGR4LCBkeSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGR4
LCBkeSkpOwogfQogCi12b2lkIEZFT2Zmc2V0OjpzZXREeChmbG9hdCBkeCkKK0Zsb2F0UmVjdCBG
RU9mZnNldDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgbV9keCA9IGR4OwotfQorICAgIEFTU0VSVChpbnB1dHMu
c2l6ZSgpID09IDEpOworICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBpbnB1dHNbMF0tPmRyYXdpbmdS
ZWN0KCk7CiAKLXZvaWQgRkVPZmZzZXQ6OnNldER5KGZsb2F0IGR5KQotewotICAgIG1fZHkgPSBk
eTsKLX0KKyAgICBkcmF3aW5nUmVjdC5tb3ZlKGdlb21ldHJ5LnJlc29sdmVUb0ZpbHRlckNvb3Jk
aW5hdGVzKHsgbV9keCwgbV9keSB9KSk7CiAKLXZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3Qo
MCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0
ZXIoKTsKLSAgICBwYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9u
KHsgbV9keCwgbV9keSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFp
bnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFp
bnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3Qo
ZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRv
UHJpbWl0aXZlU3VicmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQog
Ci12b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RU9mZnNldDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYg
c3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25z
dCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIg
PSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAg
ICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+
aXNBbHBoYUltYWdlKCkpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCku
Z2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBGbG9hdFJlY3Qg
ZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJh
d2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBt
X2R5IH0pKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5C
dWZmZXIsIGRyYXdpbmdSZWdpb24pOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwg
eyBpbiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQogCi1UZXh0U3RyZWFt
JiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVPZmZzZXQ6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0
aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlT2Zmc2V0IjsKLSAgICBGaWx0
ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAg
ICB0cyA8PCAiIGR4PVwiIiA8PCBkeCgpIDw8ICJcIiBkeT1cIiIgPDwgZHkoKSA8PCAiXCJdXG4i
OwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlu
cHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNjVhYmRhOTBhNDdiMWJmZTc2YWU1Yzc0
YWFiNWFhMTY3ZmIxZTY5ZS4uODFiNGFkMWFhMDkwYTZmYzVkODRmMDg3ZWY5NTA4YzAzZjkyNjk2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjIsMzQgKzIzLDY0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZFT2Zmc2V0IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKEZpbHRlciYsIGZsb2F0IGR4LCBmbG9hdCBkeSk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4LCBm
bG9hdCBkeSk7CiAKICAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7IH0KLSAgICB2
b2lkIHNldER4KGZsb2F0KTsKKyAgICB2b2lkIHNldER4KGZsb2F0IGR4KSB7IG1fZHggPSBkeDsg
fQogCiAgICAgZmxvYXQgZHkoKSBjb25zdCB7IHJldHVybiBtX2R5OyB9Ci0gICAgdm9pZCBzZXRE
eShmbG9hdCk7CisgICAgdm9pZCBzZXREeShmbG9hdCBkeSkgeyBtX2R5ID0gZHk7IH0KKworICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVPZmZz
ZXQ+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEZFT2Zmc2V0KEZpbHRlciYs
IGZsb2F0IGR4LCBmbG9hdCBkeSk7CisgICAgRkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KTsK
IAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVP
ZmZzZXQiOyB9CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwot
ICAgIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAg
ICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRw
dXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIGZsb2F0IG1fZHg7CiAgICAgZmxvYXQgbV9keTsKIH07CiAKK3RlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFT2Zmc2V0OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fZHg7CisgICAgZW5jb2RlciA8PCBtX2R5Owor
fQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVPZmZzZXQ+
PiBGRU9mZnNldDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25h
bDxmbG9hdD4gZHg7CisgICAgZGVjb2RlciA+PiBkeDsKKyAgICBpZiAoIWR4KQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHk7CisgICAg
ZGVjb2RlciA+PiBkeTsKKyAgICBpZiAoIWR5KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgcmV0dXJuIEZFT2Zmc2V0OjpjcmVhdGUoKmR4LCAqZHkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
RkVPZmZzZXQpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVm
ZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QudHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpGRU9mZnNldDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCmluZGV4IDU5OTcyMzA2ODg2YTYzZmE0MTJiNWI3
MTQxZjc0ZjljNDg3YTE0NGMuLjY5OTI0NDMzZjkzZmU0ZjIxZmViYmFiZjQ4NDQ1ODc2NmVlZTZj
OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDQ5ICsyMywyNiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFU3BlY3VsYXJMaWdodGluZy5oIgogCi0jaW5jbHVk
ZSAiTGlnaHRTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRp
bmcoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJm
YWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExp
Z2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIsIFNwZWN1
bGFyTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25z
dGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5n
dGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgVHlwZTo6U3BlY3VsYXJMaWdodGluZykKK1JlZjxG
RVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9y
JiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9h
dCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBzb3VyY2UpCiB7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1
bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxV
bml0TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpKSk7CiB9CiAKLVJlZjxGRVNwZWN1bGFyTGlnaHRp
bmc+IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0
YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK0ZF
U3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwg
ZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxh
ckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFksIFJlZjxMaWdodFNvdXJjZT4mJiBzb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKGNvbG9yLCBz
dXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5l
bFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpLCBUeXBlOjpG
RVNwZWN1bGFyTGlnaHRpbmcpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxh
ckxpZ2h0aW5nKGZpbHRlciwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNv
bnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExl
bmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7CiB9CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6
fkZFU3BlY3VsYXJMaWdodGluZygpID0gZGVmYXVsdDsKLQotYm9vbCBGRVNwZWN1bGFyTGlnaHRp
bmc6OnNldFNwZWN1bGFyQ29uc3RhbnQoZmxvYXQgc3BlY3VsYXJDb25zdGFudCkKLXsKLSAgICBp
ZiAobV9zcGVjdWxhckNvbnN0YW50ID09IHNwZWN1bGFyQ29uc3RhbnQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX3NwZWN1bGFyQ29uc3RhbnQgPSBzcGVjdWxhckNvbnN0YW50OwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJF
eHBvbmVudChmbG9hdCBzcGVjdWxhckV4cG9uZW50KQotewotICAgIGlmIChtX3NwZWN1bGFyRXhw
b25lbnQgPT0gc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
c3BlY3VsYXJFeHBvbmVudCA9IHNwZWN1bGFyRXhwb25lbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLVRleHRTdHJlYW0mIEZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8
PCBpbmRlbnQgPDwgIltmZVNwZWN1bGFyTGlnaHRpbmciOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc3Vy
ZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VTY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJzcGVj
dWFsQ29uc3RhbnQ9XCIiIDw8IG1fc3BlY3VsYXJDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8
ICJzcGVjdWxhckV4cG9uZW50PVwiIiA8PCBtX3NwZWN1bGFyRXhwb25lbnQgPDwgIlwiXVxuIjsK
LQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1
dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwog
ICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKaW5kZXggZTk5OGE3
NjA1ZDFlNDczNWQ5ZjQ5Nzk4ZDM5ODE4YmYzYjI0OTU4YS4uY2FlNWI4MmZiZWJjNWFiNjM0MzU2
OTA1ZTliZTdlNmYzZjAzMmY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCkBAIC0yLDYg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNywyMCArMjgs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRVNwZWN1bGFyTGlnaHRpbmcgOiBw
dWJsaWMgRkVMaWdodGluZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGln
aHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKLSAgICB2aXJ0dWFsIH5GRVNwZWN1
bGFyTGlnaHRpbmcoKTsKKyAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRl
KGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50
LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKLSAgICBmbG9hdCBzcGVj
dWxhckNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckNvbnN0YW50OyB9Ci0gICAg
Ym9vbCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0KTsKLQotICAgIGZsb2F0IHNwZWN1bGFyRXhw
b25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KLSAgICBib29sIHNl
dFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpOworcHJpdmF0ZToKKyAgICBGRVNwZWN1bGFyTGlnaHRp
bmcoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAotICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiRkVTcGVjdWxhckxpZ2h0aW5nIjsgfQogCi1wcml2
YXRlOgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAgICBX
VEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwg
RmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXggMzVjNTFjYmIyMjlkZWU5NjQyZGMxZTdkY2EwYzVkYjJm
Y2FjMjBhZC4uOTM2YTk4MTI0NGQ1ODM0NGNlYjc0MTkxMmNmYjIwNjEyNTdlMTE5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNw
cApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdz
IDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSw4
MCArMjIsNDEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRVRpbGUuaCIKIAot
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJS
ZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFVGlsZTo6RkVUaWxlKEZpbHRlciYgZmlsdGVy
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VGlsZSkKK1JlZjxGRVRpbGU+IEZF
VGlsZTo6Y3JlYXRlKCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoKSk7CiB9
CiAKLVJlZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVUaWxlOjpG
RVRpbGUoKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFVGlsZSkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRVRpbGUoZmlsdGVyKSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFVGlsZTo6ZHJhd2luZ1JlY3QoY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLS8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBU
aGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGlu
Y29ycmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCi0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAg
ICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBhdHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBv
ZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0aGUKLSAgICAvLyBzaXplIG9mIHRoZSBjdXR0
ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFu
ZCBvcHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJl
Y3QoKTsKLSAgICBGbG9hdFBvaW50IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2Nh
dGlvbigpOwotICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0
KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJF
ZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKLSAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5m
aWx0ZXIoKTsKLSAgICAgICAgdGlsZVJlY3QgPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAg
ICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmls
dGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgYXV0byB0aWxl
SW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwg
dGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJp
bmdNb2RlKCkpOwotICAgIGlmICghdGlsZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
cmFwaGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsK
LSAgICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCks
IC1pbk1heEVmZmVjdExvY2F0aW9uLnkoKSk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmluQnVmZmVyLCBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsK
LQotICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUlt
YWdlKFdURk1vdmUodGlsZUltYWdlKSk7Ci0gICAgaWYgKCF0aWxlSW1hZ2VDb3B5KQotICAgICAg
ICByZXR1cm47CisgICAgLy8gRG9uJ3QgdXNlIHRoZSBpbnB1dCdzIGRyYXdpbmdSZWN0IGZvciA8
ZmVUaWxlPi4KKyAgICByZXR1cm4gcHJpbWl0aXZlU3VicmVnaW9uOworfQogCi0gICAgQWZmaW5l
VHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xh
dGUoaW5NYXhFZmZlY3RMb2NhdGlvbiAtIG1heEVmZmVjdExvY2F0aW9uKTsKK0ZpbHRlclJlc3Vs
dCogRkVUaWxlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNv
bnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
IXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAg
ICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlQ29weS5yZWxlYXNlTm9u
TnVsbCgpLCB7IHRydWUsIHRydWUsIHBhdHRlcm5UcmFuc2Zvcm0gfSk7CisgICAgaWYgKGF1dG8g
cmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdElt
YWdlLT5jb250ZXh0KCk7Ci0gICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3Zl
KHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFwcGx5UGxh
dGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9
CiAKLVRleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVh
bSYgRkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVRpbGUiOwot
ICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOwotICAgIHRzIDw8ICJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5k
ZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCByZXByZXNlbnRhdGlvbik7Ci0KKyAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVRpbGVdXG4i
OwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKaW5kZXggNDliZDk5ZjA5NDQ3ZGFlMWNmMDlhZjEyMzU4
YzZkZTg0MDY4NzcxNC4uYzcwZGFjMTdkOGFkYzVhM2IyODBiZDc5MmY3MjI0YjcwYjc5ZTNhZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMiwyNyArMjMsMjUgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNs
YXNzIEZFVGlsZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVUaWxlPiBjcmVhdGUoRmlsdGVyJik7CisgICAgc3RhdGljIFJlZjxGRVRpbGU+IGNyZWF0
ZSgpOwogCiBwcml2YXRlOgotICAgIEZFVGlsZShGaWx0ZXImKTsKKyAgICBGRVRpbGUoKTsKIAog
ICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVUaWxl
IjsgfQogCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVRpbGU7IH0KKyAgICBGbG9hdFJlY3QgZHJh
d2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBG
aWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25z
dCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5j
bG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2Fy
ZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGFjMjM0NmU4YTRiYTU4YWFhOTI0YTZkNjdi
ZDVlNGI3N2RkMjI2OGYuLjRkOTk3NmNiYmQ2MDQxMWUzYzM2YTY5NDdjMzk5MWUxOTk3NWFlYjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
UmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgogICogQ29weXJpZ2h0IChDKSAy
MDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMzEgKzI2LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8q
Ci0gICAgUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0gMl0uIEFsZ29y
aXRobSBpczoKLSAgICByID0gKGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFtcGxpdHVkZSA9
IDE2ODA3IGFuZAotICAgIG0gPSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIxNDc0ODM2NDcs
IHIgPSBzZWVkLgotICAgIFNlZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAzMSBuby4gMTAg
cC4gMTE5NSwgT2N0LiAxOTg4Ci0gICAgVG8gdGVzdDogdGhlIGFsZ29yaXRobSBzaG91bGQgcHJv
ZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUKLSAgICBhcyB0aGUgMTAsMDAwdGggZ2VuZXJhdGVk
IG51bWJlciBpZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgotKi8KLXN0YXRpYyBjb25zdCBpbnQg
c19wZXJsaW5Ob2lzZSA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVtID0g
MjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVk
ZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMgY29uc3QgaW50
IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFIgPSAy
ODM2OyAvLyBtICUgYQorUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVy
YnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZyZXF1ZW5jeVgs
IGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOworfQogCi1G
RVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUg
dHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVt
T2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLSAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OlR1cmJ1bGVuY2UpCi0gICAgLCBtX3R5cGUodHlwZSkKK0ZFVHVyYnVs
ZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBi
YXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9h
dCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFVHVy
YnVsZW5jZSkKKyAgICAsIG1fdHVyYnVsZW5jZVR5cGUodHVyYnVsZW5jZVR5cGUpCiAgICAgLCBt
X2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQogICAgICwgbV9iYXNlRnJlcXVlbmN5WShi
YXNlRnJlcXVlbmN5WSkKICAgICAsIG1fbnVtT2N0YXZlcyhudW1PY3RhdmVzKQpAQCAtNTksNDA1
ICs0Nyw0NyBAQCBGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVy
YnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZQogewogfQogCi1SZWY8RkVUdXJidWxl
bmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUg
dHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVt
T2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UoZmlsdGVyLCB0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFz
ZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7Ci19Ci0KLWJvb2wg
RkVUdXJidWxlbmNlOjpzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlIHR5cGUpCitib29sIEZFVHVyYnVs
ZW5jZTo6c2V0VHVyYnVsZW5jZVR5cGUoVHVyYnVsZW5jZVR5cGUgdHVyYnVsZW5jZVR5cGUpCiB7
Ci0gICAgaWYgKG1fdHlwZSA9PSB0eXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV90
eXBlID0gdHlwZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNl
dEJhc2VGcmVxdWVuY3lZKGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotewotICAgIGlmIChtX2Jhc2VG
cmVxdWVuY3lZID09IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9iYXNlRnJlcXVlbmN5WSA9IGJhc2VGcmVxdWVuY3lZOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fdHVyYnVsZW5jZVR5cGUsIHR1cmJ1bGVuY2VUeXBlKSAh
PSBtX3R1cmJ1bGVuY2VUeXBlOwogfQogCiBib29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1
ZW5jeVgoZmxvYXQgYmFzZUZyZXF1ZW5jeVgpCiB7Ci0gICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVgg
PT0gYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Jhc2VGcmVx
dWVuY3lYID0gYmFzZUZyZXF1ZW5jeVg7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0
ZDo6ZXhjaGFuZ2UobV9iYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVgpICE9IG1fYmFzZUZy
ZXF1ZW5jeVg7CiB9CiAKLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNlZWQpCiti
b29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkoZmxvYXQgYmFzZUZyZXF1ZW5jeVkp
CiB7Ci0gICAgaWYgKG1fc2VlZCA9PSBzZWVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9zZWVkID0gc2VlZDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5n
ZShtX2Jhc2VGcmVxdWVuY3lZLCBiYXNlRnJlcXVlbmN5WSkgIT0gbV9iYXNlRnJlcXVlbmN5WTsK
IH0KIAogYm9vbCBGRVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2ZXMoaW50IG51bU9jdGF2ZXMpCiB7
Ci0gICAgaWYgKG1fbnVtT2N0YXZlcyA9PSBudW1PY3RhdmVzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgbV9udW1PY3RhdmVzID0gbnVtT2N0YXZlczsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoKQotewotICAg
IGlmIChtX3N0aXRjaFRpbGVzID09IHN0aXRjaCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fc3RpdGNoVGlsZXMgPSBzdGl0Y2g7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRoZSB0
dXJidWxlbmNlIGNhbGN1bGF0aW9uIGNvZGUgaXMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9mIHdoYXQg
YXBwZWFycyBpbiB0aGUgU1ZHIDEuMSBzcGVjaWZpY2F0aW9uOgotLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZQotCi0vLyBDb21wdXRlIHBzZXVk
byByYW5kb20gbnVtYmVyLgotaW5saW5lIGxvbmcgRkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6
OnJhbmRvbSgpCi17Ci0gICAgbG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAl
IHNfcmFuZFEpIC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5kUSk7Ci0gICAgaWYgKHJlc3VsdCA8
PSAwKQotICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11bTsKLSAgICBzZWVkID0gcmVzdWx0
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBmbG9hdCBzbW9vdGhDdXJ2ZShmbG9h
dCB0KQotewotICAgIHJldHVybiB0ICogdCAqICgzIC0gMiAqIHQpOwotfQotCi1pbmxpbmUgZmxv
YXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKQotewotICAg
IHJldHVybiBhICsgdCAqIChiIC0gYSk7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjppbml0UGFp
bnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgZmxvYXQgbm9ybWFsaXphdGlv
bkZhY3RvcjsKLQotICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwg
c19yYW5kTWF4aW11bSAtIDFdLgotICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQotICAg
ICAgICBwYWludGluZ0RhdGEuc2VlZCA9IC0ocGFpbnRpbmdEYXRhLnNlZWQgJSAoc19yYW5kTWF4
aW11bSAtIDEpKSArIDE7Ci0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkID4gc19yYW5kTWF4aW11
bSAtIDEpCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gc19yYW5kTWF4aW11bSAtIDE7Ci0K
LSAgICBmbG9hdCogZ3JhZGllbnQ7Ci0gICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwg
PCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6
ZTsgKytpKSB7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0g
aTsKLSAgICAgICAgICAgIGdyYWRpZW50ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxd
W2ldOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGdyYWRpZW50WzBdID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXpl
KSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAgICAgICAgICAgICAgICBncmFkaWVu
dFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBz
X2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9ja1NpemU7Ci0gICAgICAgICAgICB9
IHdoaWxlICghZ3JhZGllbnRbMF0gJiYgIWdyYWRpZW50WzFdKTsKLSAgICAgICAgICAgIG5vcm1h
bGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7Ci0g
ICAgICAgICAgICBncmFkaWVudFswXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAgICAg
ICAgZ3JhZGllbnRbMV0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGZvciAoaW50IGkgPSBzX2Jsb2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKLSAgICAg
ICAgaW50IGsgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBpbnQg
aiA9IHBhaW50aW5nRGF0YS5yYW5kb20oKSAlIHNfYmxvY2tTaXplOwotICAgICAgICBBU1NFUlQo
aiA+PSAwKTsKLSAgICAgICAgQVNTRVJUKGogPCAyICogc19ibG9ja1NpemUgKyAyKTsKLSAgICAg
ICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3Jbal07Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal0gPSBr
OwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemUgKyAyOyArK2kp
IHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltzX2Jsb2NrU2l6ZSArIGld
ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKLSAgICAgICAgZm9yIChpbnQgY2hh
bm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgICAgIHBhaW50aW5n
RGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSArIGldWzBdID0gcGFpbnRpbmdEYXRh
LmdyYWRpZW50W2NoYW5uZWxdW2ldWzBdOwotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1baV1bMV07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUZFVHVyYnVsZW5jZTo6U3Rp
dGNoRGF0YSBGRVR1cmJ1bGVuY2U6OmNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwg
ZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3N0aXRjaFRpbGVzKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgZmxvYXQg
dGlsZVdpZHRoID0gdGlsZVNpemUud2lkdGgoKTsKLSAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gdGls
ZVNpemUuaGVpZ2h0KCk7Ci0gICAgQVNTRVJUKHRpbGVXaWR0aCA+IDAgJiYgdGlsZUhlaWdodCA+
IDApOwotCi0gICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQgdHVyYnVsZW5jZSwgdGhlIGZyZXF1
ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQKLSAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMg
d2lsbCBiZSBjb250aW51b3VzLgotICAgIGlmIChiYXNlRnJlcXVlbmN5WCkgewotICAgICAgICBm
bG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8g
dGlsZVdpZHRoOwotICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZVdpZHRo
ICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOwotICAgICAgICAvLyBCYXNlRnJlcXVlbmN5
IHNob3VsZCBiZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KLSAgICAg
ICAgaWYgKGJhc2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJh
c2VGcmVxdWVuY3lYKQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBsb3dGcmVxdWVuY3k7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lYID0gaGlnaEZyZXF1ZW5j
eTsKLSAgICB9Ci0gICAgaWYgKGJhc2VGcmVxdWVuY3lZKSB7Ci0gICAgICAgIGZsb2F0IGxvd0Zy
ZXF1ZW5jeSA9IGZsb29yZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdo
dDsKLSAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVIZWlnaHQgKiBiYXNl
RnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OwotICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVkgLyBs
b3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAg
ICBiYXNlRnJlcXVlbmN5WSA9IGxvd0ZyZXF1ZW5jeTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgYmFzZUZyZXF1ZW5jeVkgPSBoaWdoRnJlcXVlbmN5OwotICAgIH0KLQotICAgIFN0aXRjaERh
dGEgc3RpdGNoRGF0YTsKLSAgICBzdGl0Y2hEYXRhLndpZHRoID0gcm91bmRmKHRpbGVXaWR0aCAq
IGJhc2VGcmVxdWVuY3lYKTsKLSAgICBzdGl0Y2hEYXRhLndyYXBYID0gc19wZXJsaW5Ob2lzZSAr
IHN0aXRjaERhdGEud2lkdGg7Ci0gICAgc3RpdGNoRGF0YS5oZWlnaHQgPSByb3VuZGYodGlsZUhl
aWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBzdGl0Y2hEYXRhLndyYXBZID0gc19wZXJsaW5O
b2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0OwotCi0gICAgcmV0dXJuIHN0aXRjaERhdGE7Ci19Ci0K
LS8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50LgotQ29sb3JDb21wb25lbnRz
PGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQm
IG5vaXNlVmVjdG9yKSBjb25zdAotewotICAgIHN0cnVjdCBOb2lzZVBvc2l0aW9uIHsKLSAgICAg
ICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgotICAgICAgICBpbnQg
bmV4dEluZGV4OyAvLyBieDEsIGJ5MSBpbiB0aGUgc3BlYyB0ZXh0LgotICAgICAgICBmbG9hdCBm
cmFjdGlvbjsgLy8gcngwLCByeTAgaW4gdGhlIHNwZWMgdGV4dC4KLQotICAgICAgICBOb2lzZVBv
c2l0aW9uKGZsb2F0IGNvbXBvbmVudCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gIHQgPSB2
ZWNbMF0gKyBQZXJsaW5OOwotICAgICAgICAgICAgLy8gIGJ4MCA9IChpbnQpdDsKLSAgICAgICAg
ICAgIC8vICBieDEgPSBieDArMTsKLSAgICAgICAgICAgIC8vICByeDAgPSB0IC0gKGludCl0Owot
ICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24gPSBjb21wb25lbnQgKyBzX3Blcmxpbk5vaXNlOwot
ICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uKTsKLSAgICAgICAg
ICAgIG5leHRJbmRleCA9IGluZGV4ICsgMTsKLSAgICAgICAgICAgIGZyYWN0aW9uID0gcG9zaXRp
b24gLSBpbmRleDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzdGl0Y2goaW50
IHNpemUsIGludCB3cmFwU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gaWYgKGJ4MCA+
PSBwU3RpdGNoSW5mby0+bldyYXBYKQotICAgICAgICAgICAgLy8gICBieDAgLT0gcFN0aXRjaElu
Zm8tPm5XaWR0aDsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSB3cmFwU2l6ZSkKLSAgICAgICAg
ICAgICAgICBpbmRleCAtPSBzaXplOwotCi0gICAgICAgICAgICAvLyBpZiAoYngxID49IHBTdGl0
Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4MSAtPSBwU3RpdGNoSW5mby0+bldp
ZHRoOwotICAgICAgICAgICAgaWYgKG5leHRJbmRleCA+PSB3cmFwU2l6ZSkKLSAgICAgICAgICAg
ICAgICBuZXh0SW5kZXggLT0gc2l6ZTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBOb2lzZVBv
c2l0aW9uIG5vaXNlWChub2lzZVZlY3Rvci54KCkpOwotICAgIE5vaXNlUG9zaXRpb24gbm9pc2VZ
KG5vaXNlVmVjdG9yLnkoKSk7Ci0KLSAgICAvLyBJZiBzdGl0Y2hpbmcsIGFkanVzdCBsYXR0aWNl
IHBvaW50cyBhY2NvcmRpbmdseS4KLSAgICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICBu
b2lzZVguc3RpdGNoKHN0aXRjaERhdGEud2lkdGgsIHN0aXRjaERhdGEud3JhcFgpOwotICAgICAg
ICBub2lzZVkuc3RpdGNoKHN0aXRjaERhdGEuaGVpZ2h0LCBzdGl0Y2hEYXRhLndyYXBZKTsKLSAg
ICB9Ci0KLSAgICAvLyBieDAgJj0gQk07Ci0gICAgLy8gYngxICY9IEJNOwotICAgIC8vIGJ5MCAm
PSBCTTsKLSAgICAvLyBieTEgJj0gQk07Ci0gICAgbm9pc2VYLmluZGV4ICY9IHNfYmxvY2tNYXNr
OwotICAgIG5vaXNlWC5uZXh0SW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLmluZGV4
ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWS5uZXh0SW5kZXggJj0gc19ibG9ja01hc2s7Ci0K
LSAgICAvLyBpID0gdUxhdHRpY2VTZWxlY3RvcltieDBdOwotICAgIC8vIGogPSB1TGF0dGljZVNl
bGVjdG9yW2J4MV07Ci0gICAgaW50IGxhdHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3Jbbm9pc2VYLmluZGV4XTsKLSAgICBpbnQgbmV4dExhdHRpY2VJbmRleCA9IHBhaW50
aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLm5leHRJbmRleF07Ci0KLSAgICAvLyBzeCA9
IGRvdWJsZShzX2N1cnZlKHJ4MCkpOwotICAgIC8vIHN5ID0gZG91YmxlKHNfY3VydmUocnkwKSk7
Ci0gICAgZmxvYXQgc3ggPSBzbW9vdGhDdXJ2ZShub2lzZVguZnJhY3Rpb24pOwotICAgIGZsb2F0
IHN5ID0gc21vb3RoQ3VydmUobm9pc2VZLmZyYWN0aW9uKTsKLQotICAgIGF1dG8gbm9pc2VGb3JD
aGFubmVsID0gWyZdKGludCBjaGFubmVsKSB7Ci0gICAgICAgIC8vIGIwMCA9IHVMYXR0aWNlU2Vs
ZWN0b3JbaSArIGJ5MF0KLSAgICAgICAgaW50IGIwMCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLmluZGV4XTsKLSAgICAgICAgLy8gcSA9IGZHcmFk
aWVudFtuQ29sb3JDaGFubmVsXVtiMDBdOyB1ID0gcngwICogcVswXSArIHJ5MCAqIHFbMV07Ci0g
ICAgICAgIGNvbnN0IGZsb2F0KiBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2Iw
MF07Ci0gICAgICAgIGZsb2F0IHUgPSBub2lzZVguZnJhY3Rpb24gKiBxWzBdICsgbm9pc2VZLmZy
YWN0aW9uICogcVsxXTsKLQotICAgICAgICAvLyBiMTAgPSB1TGF0dGljZVNlbGVjdG9yW2ogKyBi
eTBdOwotICAgICAgICBpbnQgYjEwID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0
TGF0dGljZUluZGV4ICsgbm9pc2VZLmluZGV4XTsKLSAgICAgICAgLy8gcngxID0gcngwIC0gMS4w
ZjsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMTBdOyB2ID0gcngx
ICogcVswXSArIHJ5MCAqIHFbMV07Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1bYjEwXTsKLSAgICAgICAgZmxvYXQgdiA9IChub2lzZVguZnJhY3Rpb24gLSAxKSAq
IHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwotICAgICAgICAvLyBhID0gbGVycChzeCwg
dSwgdik7Ci0gICAgICAgIGZsb2F0IGEgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsK
LQotICAgICAgICAvLyBiMDEgPSB1TGF0dGljZVNlbGVjdG9yW2kgKyBieTFdOwotICAgICAgICBp
bnQgYjAxID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lz
ZVkubmV4dEluZGV4XTsKLSAgICAgICAgLy8gcnkxID0gcnkwIC0gMS4wZjsKLSAgICAgICAgLy8g
cSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMDFdOyB1ID0gcngwICogcVswXSArIHJ5MSAq
IHFbMV07Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjAxXTsK
LSAgICAgICAgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0gKyAobm9pc2VZLmZyYWN0aW9uIC0g
MSkgKiBxWzFdOwotCi0gICAgICAgIC8vIGIxMSA9IHVMYXR0aWNlU2VsZWN0b3JbaiArIGJ5MV07
Ci0gICAgICAgIGludCBiMTEgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0
aWNlSW5kZXggKyBub2lzZVkubmV4dEluZGV4XTsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtu
Q29sb3JDaGFubmVsXVtiMTFdOyB2ID0gcngxICogcVswXSArIHJ5MSAqIHFbMV07Ci0gICAgICAg
IHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjExXTsKLSAgICAgICAgdiA9IChu
b2lzZVguZnJhY3Rpb24gLSAxKSAqIHFbMF0gKyAobm9pc2VZLmZyYWN0aW9uIC0gMSkgKiBxWzFd
OwotICAgICAgICAvLyBiID0gbGVycChzeCwgdSwgdik7Ci0gICAgICAgIGZsb2F0IGIgPSBsaW5l
YXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKLQotICAgICAgICAvLyByZXR1cm4gbGVycChzeSwg
YSwgYik7Ci0gICAgICAgIHJldHVybiBsaW5lYXJJbnRlcnBvbGF0aW9uKHN5LCBhLCBiKTsKLSAg
ICB9OwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDApLAotICAgICAg
ICBub2lzZUZvckNoYW5uZWwoMSksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgyKSwKLSAgICAg
ICAgbm9pc2VGb3JDaGFubmVsKDMpCi0gICAgfTsKLX0KLQotLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudCBkZXNjcmliZXMgdGhpcyBj
b252ZXJzaW9uIHRvIGNvbG9yIGNvbXBvbmVudHMuCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IGNvbG9yQ29udmVydDxTUkdCQTx1aW50OD4+KFNSR0JBPGZsb2F0PikgdG8gZ2V0IHRoZSBzYW1l
IGJlaGF2aW9yLgotc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9J
bnRCYXNlZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBm
bG9hdENvbXBvbmVudHMpCi17Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50
OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1swXSAqIDI1NSksIDAsIDI1NSks
Ci0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBv
bmVudHNbMV0gKiAyNTUpLCAwLCAyNTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0
YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzJdICogMjU1KSwgMCwgMjU1KSwKLSAgICAg
ICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1sz
XSAqIDI1NSksIDAsIDI1NSksCi0gICAgfTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX251
bU9jdGF2ZXMsIG51bU9jdGF2ZXMpICE9IG1fbnVtT2N0YXZlczsKIH0KIAotQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9y
UG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNo
RGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29sIEZFVHVyYnVsZW5jZTo6
c2V0U2VlZChmbG9hdCBzZWVkKQogewotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdHVy
YnVsZW5jZUZ1bmN0aW9uUmVzdWx0OwotICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3IocG9pbnQu
eCgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lYLCBwb2ludC55KCkgKiBwYWludGluZ0Rh
dGEuYmFzZUZyZXF1ZW5jeVkpOwotICAgIGZsb2F0IHJhdGlvID0gMTsKLSAgICBmb3IgKGludCBv
Y3RhdmUgPSAwOyBvY3RhdmUgPCBtX251bU9jdGF2ZXM7ICsrb2N0YXZlKSB7Ci0gICAgICAgIGlm
IChtX3R5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKLSAgICAgICAgICAgIHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0
YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR1cmJ1
bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwg
bm9pc2VWZWN0b3IpLmFicygpIC8gcmF0aW87Ci0KLSAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WChu
b2lzZVZlY3Rvci54KCkgKiAyKTsKLSAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WShub2lzZVZlY3Rv
ci55KCkgKiAyKTsKLSAgICAgICAgcmF0aW8gKj0gMjsKLQotICAgICAgICBpZiAobV9zdGl0Y2hU
aWxlcykgewotICAgICAgICAgICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5n
IHNfcGVybGluTm9pc2UgYmVmb3JlIHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQKLSAgICAgICAgICAg
IC8vIGFkZGluZyBpdCBhZnRlcndhcmQgc2ltcGxpZmllcyB0byBzdWJ0cmFjdGluZyBpdCBvbmNl
LgotICAgICAgICAgICAgc3RpdGNoRGF0YS53aWR0aCAqPSAyOwotICAgICAgICAgICAgc3RpdGNo
RGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hEYXRhLndyYXBYIC0gc19wZXJsaW5Ob2lzZTsKLSAgICAg
ICAgICAgIHN0aXRjaERhdGEuaGVpZ2h0ICo9IDI7Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLndy
YXBZID0gMiAqIHN0aXRjaERhdGEud3JhcFkgLSBzX3Blcmxpbk5vaXNlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gVGhlIHZhbHVlIG9mIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCBjb21l
cyBmcm9tICgodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSArIDI1NSkgLyAyIGJ5IGZy
YWN0YWxOb2lzZQotICAgIC8vIGFuZCAodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSBi
eSB0dXJidWxlbmNlLgotICAgIGlmIChtX3R5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxO
b2lzZSkKLSAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gdHVyYnVsZW5jZUZ1bmN0
aW9uUmVzdWx0ICogMC41ZiArIDAuNWY7Ci0KLSAgICByZXR1cm4gdG9JbnRCYXNlZENvbG9yQ29t
cG9uZW50cyh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQpOworICAgIHJldHVybiBzdGQ6OmV4Y2hh
bmdlKG1fc2VlZCwgc2VlZCkgIT0gbV9zZWVkOwogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6Zmls
bFJlZ2lvbihVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVu
ZFkpIGNvbnN0Citib29sIEZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0Y2hU
aWxlcykKIHsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBJbnRSZWN0IGZpbHRl
clJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgZmlsdGVyUmVnaW9uLnNjYWxlKGZp
bHRlcigpLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmlsdGVyUmVn
aW9uLnkoKSArIHN0YXJ0WSk7Ci0gICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFydFkg
KiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGludmVy
c2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLmludmVyc2UoKS52YWx1
ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwg
ZW5kWTsgKyt5KSB7Ci0gICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7Ci0gICAgICAg
IHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7ICsreCkgewotICAgICAgICAgICAgcG9pbnQuc2V0WChw
b2ludC54KCkgKyAxKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGludmVy
c2VUcmFuc2Zyb20ubWFwUG9pbnQocG9pbnQpOwotICAgICAgICAgICAgYXV0byB2YWx1ZXMgPSBj
YWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEs
IGxvY2FsUG9pbnQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXRSYW5nZSh2YWx1ZXMuY29t
cG9uZW50cy5kYXRhKCksIDQsIGluZGV4T2ZQaXhlbENoYW5uZWwpOwotICAgICAgICAgICAgaW5k
ZXhPZlBpeGVsQ2hhbm5lbCArPSA0OwotICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiBzdGQ6
OmV4Y2hhbmdlKG1fc3RpdGNoVGlsZXMsIHN0aXRjaFRpbGVzKSAhPSBtX3N0aXRjaFRpbGVzOwog
fQogCi12b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1l
dGVycyogcGFyYW1ldGVycykKK0Zsb2F0UmVjdCBGRVR1cmJ1bGVuY2U6OmRyYXdpbmdSZWN0KGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxv
YXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgcGFyYW1ldGVycy0+Zmls
dGVyLT5maWxsUmVnaW9uKCpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCAqcGFyYW1ldGVycy0+cGFp
bnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBh
cmFtZXRlcnMtPmVuZFkpOworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLXZv
aWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0
b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3Qg
RmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAg
IGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgp
OwotCi0gICAgSW50U2l6ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsK
LSAgICByZXN1bHRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotCi0gICAgaWYg
KHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56
ZXJvRmlsbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW50U2l6ZSB0aWxlU2l6
ZSA9IHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7Ci0K
LSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCA9IG1fYmFzZUZyZXF1ZW5jeVg7Ci0gICAgZmxvYXQg
YmFzZUZyZXF1ZW5jeVkgPSBtX2Jhc2VGcmVxdWVuY3lZOwotICAgIFN0aXRjaERhdGEgc3RpdGNo
RGF0YSA9IGNvbXB1dGVTdGl0Y2hpbmcodGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJl
cXVlbmN5WSk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgdGlsZVNp
emUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0gICAgaW5pdFBhaW50KHBhaW50
aW5nRGF0YSk7Ci0KLSAgICBhdXRvIGFyZWEgPSByZXN1bHRTaXplLmFyZWEoKTsKLSAgICBpZiAo
YXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBoZWlnaHQg
PSByZXN1bHRTaXplLmhlaWdodCgpOwotCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGhl
aWdodCAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVu
c2lnbmVkPihhcmVhIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7Ci0g
ICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIFdURjo6UGFyYWxsZWxK
b2JzPEZpbGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAgICAg
Ly8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0gICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFs
bGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bUpvYnMgPiAxKSB7Ci0gICAg
ICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInN0ZXBZIi1zaXplZCBqb2JzLCBkaXN0cmli
dXRpbmcgdGhlIGV4dHJhIHJvd3MgaW50byB0aGUgZmlyc3QgImpvYnNXaXRoRXh0cmEiIGpvYnMu
Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdGVwWSA9IGhlaWdodCAvIG51bUpvYnM7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBqb2JzV2l0aEV4dHJhID0gaGVpZ2h0ICUgbnVtSm9iczsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0WSA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1l
dGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJh
eSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50
aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0aXRjaERh
dGEgPSBzdGl0Y2hEYXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFydFkgPSBzdGFydFk7
Ci0KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBqb2JIZWlnaHQgPSAoaSA8IGpvYnNXaXRoRXh0
cmEpID8gc3RlcFkgKyAxIDogc3RlcFk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmVuZFkgPSBw
YXJhbXMuc3RhcnRZICsgam9iSGVpZ2h0OwotICAgICAgICAgICAgICAgIHN0YXJ0WSArPSBqb2JI
ZWlnaHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRl
KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGF1dG8g
cmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKIAotICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRo
ZXJlIGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28g
c21hbGwuCi0gICAgZmlsbFJlZ2lvbihkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0
YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRw
dXQsIHsgfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBlIHR5cGUp
CkBAIC00NzYsMTEgKzEwNiwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgVHVyYnVsZW5jZVR5cGUgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRl
eHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVh
bSYgRkVUdXJidWxlbmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVR1
cmJ1bGVuY2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
cmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgdHlwZSgpIDw8ICJcIiAi
CisgICAgdHMgPDwgIiB0eXBlPVwiIiA8PCB0dXJidWxlbmNlVHlwZSgpIDw8ICJcIiAiCiAgICAg
ICAgPDwgImJhc2VGcmVxdWVuY3k9XCIiIDw8IGJhc2VGcmVxdWVuY3lYKCkgPDwgIiwgIiA8PCBi
YXNlRnJlcXVlbmN5WSgpIDw8ICJcIiAiCiAgICAgICAgPDwgInNlZWQ9XCIiIDw8IHNlZWQoKSA8
PCAiXCIgIgogICAgICAgIDw8ICJudW1PY3RhdmVzPVwiIiA8PCBudW1PY3RhdmVzKCkgPDwgIlwi
ICIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oCmluZGV4IDRkNTM2YjM3YTgwYWFkZjkxMWViZmNlODk3NzRjZDNjY2Vj
YjVjZmIuLjAwMzU1MzRhYTEzZTM0MWQ5NjBkMDU3ZGU4NjJjMTlkYzBlMjI0MTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuaApAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxy
ZW5pQGluZi51LXN6ZWdlZC5odT4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI0LDkgKzI0LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb2xvckNvbXBv
bmVudHMuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCwxMCArMzYsMTAgQEAgZW51bSBjbGFzcyBU
dXJidWxlbmNlVHlwZSB7CiAKIGNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZl
Y3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVy
JiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAg
c3RhdGljIFJlZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQg
c2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKLSAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsK
KyAgICBUdXJidWxlbmNlVHlwZSB0dXJidWxlbmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHVy
YnVsZW5jZVR5cGU7IH0KKyAgICBib29sIHNldFR1cmJ1bGVuY2VUeXBlKFR1cmJ1bGVuY2VUeXBl
KTsKIAogICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlRnJl
cXVlbmN5WDsgfQogICAgIGJvb2wgc2V0QmFzZUZyZXF1ZW5jeVgoZmxvYXQpOwpAQCAtNTksNzAg
KzU3LDE5IEBAIHB1YmxpYzoKICAgICBib29sIHNldFN0aXRjaFRpbGVzKGJvb2wpOwogCiBwcml2
YXRlOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7Ci0gICAgc3RhdGlj
IGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNfYmxvY2tTaXplIC0gMTsKLQotICAgIHN0YXRpYyBj
b25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmlj
YWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icy4KLQotICAgIHN0cnVjdCBQYWludGluZ0Rh
dGEgewotICAgICAgICBQYWludGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNp
emUmIHBhaW50aW5nU2l6ZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZKQotICAgICAgICAgICAgOiBzZWVkKHBhaW50aW5nU2VlZCkKLSAgICAgICAgICAgICwgZmls
dGVyU2l6ZShwYWludGluZ1NpemUpCi0gICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VG
cmVxdWVuY3lYKQotICAgICAgICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQg
bGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2NrU2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFk
aWVudFs0XVsyICogc19ibG9ja1NpemUgKyAyXVsyXTsKLSAgICAgICAgSW50U2l6ZSBmaWx0ZXJT
aXplOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKLSAgICAgICAgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVk7Ci0KLSAgICAgICAgaW5saW5lIGxvbmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAg
IHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAgICAgICAgU3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKLQot
ICAgICAgICBpbnQgd2lkdGggeyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAg
Zm9yIHN0aXRjaGluZy4KLSAgICAgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVl
IHRvIHdyYXAuCi0gICAgICAgIGludCBoZWlnaHQgeyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7
IDAgfTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmllbmQg
Y2xhc3MgUGFyYWxsZWxKb2JzOwotCi0gICAgc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsK
LSAgICAgICAgRkVUdXJidWxlbmNlKiBmaWx0ZXI7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5
KiBwaXhlbEFycmF5OwotICAgICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICAg
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAgICBp
bnQgZW5kWTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxs
UmVnaW9uUGFyYW1ldGVycyopOwotCi0gICAgRkVUdXJidWxlbmNlKEZpbHRlciYsIFR1cmJ1bGVu
Y2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOworICAgIEZFVHVyYnVsZW5j
ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAg
ICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVHVyYnVs
ZW5jZSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBS
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5n
UmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICB2b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsKLSAgICBTdGl0Y2hEYXRhIGNv
bXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBm
bG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0OwotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gbm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OwotICAgIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjYWxj
dWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hE
YXRhLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBmaWxsUmVnaW9uKFVpbnQ4
Q2xhbXBlZEFycmF5JiwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0
WSwgaW50IGVuZFkpIGNvbnN0OworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0
JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKHZvaWQqKTsKKyAgICBi
b29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKKyAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmls
dGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOworCisgICAgVHVyYnVsZW5jZVR5cGUg
bV90dXJidWxlbmNlVHlwZTsKICAgICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lYOwogICAgIGZsb2F0
IG1fYmFzZUZyZXF1ZW5jeVk7CiAgICAgaW50IG1fbnVtT2N0YXZlczsKQEAgLTEzMSw0ICs3OCwz
IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43ZTljOTE3ZTRmYzAxY2M5YTZlYmM4NDNkMmI1YzYzNmZmNDM0MmZmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
Y3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpbHRlcjo6RmlsdGVyKFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgVHlwZSB0eXBlKQorICAgIDogRmlsdGVyRnVuY3Rpb24odHlwZSkKKyAgICAsIG1f
cmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQoreworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gRmlsdGVyOjphcHBseShJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkgY29uc3QK
K3sKKyAgICBGaWx0ZXJSZXN1bHRWZWN0b3Igc3RhY2s7CisgICAgRmlsdGVyT3V0cHV0IG91dHB1
dChtX3JlbmRlcmluZ01vZGUpOworCisgICAgYXV0byByZXN1bHQgPSBhcHBseShvdXRwdXQsIHN0
YWNrLCBzb3VyY2VJbWFnZSwgKmdlb21ldHJ5KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIEFTU0VSVChzdGFjay5pc0VtcHR5KCkpOworICAgIHJlc3VsdC0+
dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAg
ICByZXR1cm4geyByZXN1bHQtPmltYWdlQnVmZmVyKCksIGdlb21ldHJ5LT5jb252ZXJ0VG9BYnNv
bHV0ZUNvb3JkaW5hdGVzKHJlc3VsdC0+ZHJhd2luZ1JlY3QoKSkgfTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmgKaW5kZXggYTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEw
YmMxZi4uMDFhZDdkMTM2NTVmOGI2NWIwYWM3YjViYWFhYTI0NGFkMzgzMTE3MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0x
LDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDU5ICsyMSwyNCBAQAogCiAjcHJh
Z21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01v
ZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFz
cyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24geworICAgIHVzaW5nIEZpbHRlckZ1bmN0
aW9uOjphcHBseTsKIAotY2xhc3MgRmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7
CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFu
c2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNm
b3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2Nh
bGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+RmlsdGVyKCkgPSBkZWZhdWx0OwotCi0gICAgdm9p
ZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9z
b3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNv
dXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsgfQotCi0gICAgRmxvYXRT
aXplIGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247
IH0KLSAgICB2b2lkIHNldEZpbHRlclJlc29sdXRpb24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJS
ZXNvbHV0aW9uKSB7IG1fZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KLQot
ICAgIGZsb2F0IGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQot
ICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IHNj
YWxlOyB9Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVRyYW5zZm9ybTsgfQotCiAgICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9Ci0gICAg
dm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBtX3Jl
bmRlcmluZ01vZGUgPSByZW5kZXJpbmdNb2RlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdG
aWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NTU0Zp
bHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBz
Y2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0IHsgcmV0dXJuIHNp
emUgKiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBz
b3VyY2VJbWFnZVJlY3QoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVy
UmVnaW9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbklu
VXNlclNwYWNlKCkgY29uc3QgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6dHVwbGU8UmVm
UHRyPEltYWdlQnVmZmVyPiwgRmxvYXRSZWN0PiBhcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJikgY29uc3Q7CiAKIHByb3RlY3Rl
ZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9u
KQotICAgICAgICA6IG1fZmlsdGVyUmVzb2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQotICAgIHsK
LSAgICB9CisgICAgRmlsdGVyKFJlbmRlcmluZ01vZGUsIFR5cGUpOwogCi1wcml2YXRlOgotICAg
IFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKLSAgICBGbG9hdFNpemUgbV9maWx0
ZXJSZXNvbHV0aW9uOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwot
ICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZCB9OwotICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAxIH07CisgICAgUmVuZGVyaW5n
TW9kZSBtX3JlbmRlcmluZ01vZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJv
dW5kYXJ5U2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckJvdW5kYXJ5U2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjg2NzAxMWM0OTQ5OTI1YjdhZWY4M2Q2NmJl
MDA3MDcxNTliNzNhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaApAQCAtMCwwICsxLDgzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckJvdW5kYXJ5U2V0IHsKK3B1Ymxp
YzoKKyAgICBlbnVtIGNsYXNzIEZsYWdzIHsKKyAgICAgICAgSGFzWCAgICAgID0gMSA8PCAwLAor
ICAgICAgICBIYXNZICAgICAgPSAxIDw8IDEsCisgICAgICAgIEhhc1dpZHRoICA9IDEgPDwgMiwK
KyAgICAgICAgSGFzSGVpZ2h0ID0gMSA8PCAzCisgICAgfTsKKworICAgIEZpbHRlckJvdW5kYXJ5
U2V0KCkgPSBkZWZhdWx0OworCisgICAgRmlsdGVyQm91bmRhcnlTZXQoY29uc3QgRmxvYXRSZWN0
JiBib3VuZGFyaWVzLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQorICAgICAgICA6IG1fYm91bmRh
cmllcyhib3VuZGFyaWVzKQorICAgICAgICAsIG1fZmxhZ3MoZmxhZ3MpCisgICAgeworICAgIH0K
KworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1gpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91
bmRhcmllcy54KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4geSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFn
cy5jb250YWlucyhGbGFnczo6SGFzWSkpCisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVz
LnkoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiB3aWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFncy5j
b250YWlucyhGbGFnczo6SGFzV2lkdGgpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmll
cy53aWR0aCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHN0
ZDo6b3B0aW9uYWw8ZmxvYXQ+IGhlaWdodCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9m
bGFncy5jb250YWlucyhGbGFnczo6SGFzSGVpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiBtX2Jv
dW5kYXJpZXMuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQor
Citwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX2JvdW5kYXJpZXM7CisgICAgT3B0aW9uU2V0PEZs
YWdzPiBtX2ZsYWdzOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRmYzViYmNhNTFjMzQ4ZWM3ZjYzZTRjYzkyN2RiMTA4Li42
ZjQ3NDVjZWQ5MzM5NjM3ZDA1ODVlODljYjQ2Y2YwZjE0N2UzNjk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwCkBAIC0yNCw2NjAgKzI0LDg4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRy
eS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdFZl
Y3Rvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1fbmVv
bi5oPgotI2VuZGlmCi0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRl
L0FjY2VsZXJhdGUuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRlckVm
ZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlciYgZmlsdGVyLCBUeXBlIHR5cGUpCi0gICAgOiBtX2Zp
bHRlcihmaWx0ZXIpCi0gICAgLCBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZSh0eXBlKQotewotfQot
Ci1GaWx0ZXJFZmZlY3Q6On5GaWx0ZXJFZmZlY3QoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgRmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgbV9hYnNvbHV0ZVBh
aW50UmVjdCA9IEludFJlY3QoKTsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZl
Y3RzKQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVmZmVjdC0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0gICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci19Ci0KLXZvaWQgRmls
dGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVmZmVj
dDo6cHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBi
b3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1p
dGl2ZSBzdWJyZWdpb24sIHdoaWxlIENTUyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3Vu
ZHMpCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJl
Y3QobV9tYXhFZmZlY3RSZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRS
ZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci19Ci0KLUZsb2F0
UG9pbnQgRmlsdGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBv
aW50IHVzZXJTcGFjZVBvaW50KSBjb25zdAotewotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2lu
dCA9IG1hcFBvaW50KHVzZXJTcGFjZVBvaW50LCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiwg
bV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbik7Ci0gICAgYWJzb2x1dGVQb2ludC5tb3ZlQnko
LW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGFic29sdXRlUG9p
bnQ7Ci19Ci0KLUludFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYgZWZmZWN0UmVjdCkgY29uc3QKLXsKLSAgICBJbnRQb2lu
dCBsb2NhdGlvbiA9IG1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKTsKLSAgICBsb2NhdGlv
bi5tb3ZlQnkoLWVmZmVjdFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIEludFJlY3QobG9j
YXRpb24sIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLX0KLQotRmxvYXRSZWN0IEZpbHRl
ckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JiBzcmNSZWN0
KSBjb25zdAotewotICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2Nh
bGU7Ci0gICAgSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpLCBzY2FsZSk7CisgICAgRmxvYXRSZWN0IGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb247CiAK
LSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybS5zY2FsZShzY2Fs
ZSkudHJhbnNsYXRlKC1tX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVy
biB0cmFuc2Zvcm0ubWFwUmVjdChzcmNSZWN0KTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVj
dDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKLXsKLSAgICAvLyBGRVRpbGUs
IEZFVHVyYnVsZW5jZSwgRkVGbG9vZCBkb24ndCBoYXZlIGlucHV0IGVmZmVjdHMsIHRha2UgdGhl
IGZpbHRlciByZWdpb24gYXMgdW5pdGUgcmVjdC4KLSAgICBGbG9hdFJlY3Qgc3VicmVnaW9uOwot
ICAgIGlmICh1bnNpZ25lZCBudW1iZXJPZklucHV0RWZmZWN0cyA9IGlucHV0RWZmZWN0cygpLnNp
emUoKSkgewotICAgICAgICBzdWJyZWdpb24gPSBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCBudW1iZXJPZklucHV0RWZmZWN0czsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvIGlucHV0UHJp
bWl0aXZlU3VicmVnaW9uID0gaW5wdXRFZmZlY3QoaSktPmRldGVybWluZUZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpOwotICAgICAgICAgICAgc3VicmVnaW9uLnVuaXRlKGlucHV0UHJpbWl0aXZl
U3VicmVnaW9uKTsKLSAgICAgICAgfQorICAgIC8vIERvbid0IHVzZSB0aGUgaW5wdXQncyBzdWJy
ZWdpb24gZm9yIDxmZVRpbGU+LgorICAgIGlmICghaW5wdXRzLmlzRW1wdHkoKSAmJiB0eXBlKCkg
IT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbnB1
dCA6IGlucHV0cykKKyAgICAgICAgICAgIGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24udW5pdGUo
aW5wdXQtPnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKICAgICB9IGVsc2UKLSAgICAgICAgc3VicmVn
aW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIC8vIEFmdGVy
IGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0YXJnZXQg
ZWZmZWN0LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KLSAgICBpZiAo
ZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVUaWxlKQotICAgICAgICBzdWJy
ZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAgYXV0byBi
b3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllcygpOwotICAgIGlmIChoYXNYKCkpCi0gICAgICAg
IHN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJpZXMueCgpKTsKLSAgICBpZiAoaGFzWSgpKQotICAgICAg
ICBzdWJyZWdpb24uc2V0WShib3VuZGFyaWVzLnkoKSk7Ci0gICAgaWYgKGhhc1dpZHRoKCkpCi0g
ICAgICAgIHN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFyaWVzLndpZHRoKCkpOwotICAgIGlmICho
YXNIZWlnaHQoKSkKLSAgICAgICAgc3VicmVnaW9uLnNldEhlaWdodChib3VuZGFyaWVzLmhlaWdo
dCgpKTsKKyAgICAgICAgZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGdlb21ldHJ5LmZpbHRl
clJlZ2lvbigpOwogCi0gICAgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7
CisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lvbjsKIAotICAgIGF1dG8gYWJzb2x1dGVT
dWJyZWdpb24gPSBtX2ZpbHRlci5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qoc3VicmVnaW9u
KTsKLSAgICBhdXRvIGZpbHRlclJlc29sdXRpb24gPSBtX2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9u
KCk7Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAg
Ly8gU2F2ZSB0aGlzIGJlZm9yZSBjbGlwcGluZyBzbyB3ZSBjYW4gdXNlIGl0IHRvIG1hcCBsaWdo
dGluZyBwb2ludHMgZnJvbSB1c2VyIHNwYWNlIHRvIGJ1ZmZlciBjb29yZGluYXRlcy4KLSAgICBz
ZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihhYnNvbHV0ZVN1YnJlZ2lvbik7CisgICAgcHJp
bWl0aXZlU3VicmVnaW9uLnNldFgoYm91bmRhcnlTZXQueCgpLnZhbHVlX29yKGRlZmF1bHRQcmlt
aXRpdmVTdWJyZWdpb24ueCgpKSk7CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFkoYm91bmRh
cnlTZXQueSgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24ueSgpKSk7CisgICAg
cHJpbWl0aXZlU3VicmVnaW9uLnNldFdpZHRoKGJvdW5kYXJ5U2V0LndpZHRoKCkudmFsdWVfb3Io
ZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi53aWR0aCgpKSk7CisgICAgcHJpbWl0aXZlU3VicmVn
aW9uLnNldEhlaWdodChib3VuZGFyeVNldC5oZWlnaHQoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0
aXZlU3VicmVnaW9uLmhlaWdodCgpKSk7CiAKLSAgICAvLyBDbGlwIGV2ZXJ5IGZpbHRlciBlZmZl
Y3QgdG8gdGhlIGZpbHRlciByZWdpb24uCi0gICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJl
Z2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgIGFic29sdXRlU2NhbGVkRmlsdGVy
UmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24pOwotICAgIGFic29sdXRlU3VicmVnaW9uLmlu
dGVyc2VjdChhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbik7Ci0KLSAgICBzZXRNYXhFZmZlY3RS
ZWN0KGFic29sdXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4gc3VicmVnaW9uOworICAgIHByaW1p
dGl2ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoZ2VvbWV0cnkuZmlsdGVyUmVnaW9uKCkpOworICAgIHJl
dHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLUZpbHRlckVmZmVjdCogRmlsdGVyRWZmZWN0
OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0CitGbG9hdFJlY3QgRmlsdGVyRWZm
ZWN0OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3QKIHsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihudW1i
ZXIgPCBtX2lucHV0RWZmZWN0cy5zaXplKCkpOwotICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5h
dChudW1iZXIpLmdldCgpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY29sbGVjdEVmZmVjdHMoY29u
c3QgRmlsdGVyRWZmZWN0KmVmZmVjdCwgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3QqPiYgYWxs
RWZmZWN0cykKLXsKLSAgICBhbGxFZmZlY3RzLmFkZChlZmZlY3QpOwotICAgIHVuc2lnbmVkIHNp
emUgPSBlZmZlY3QtPm51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gZWZmZWN0
LT5pbnB1dEVmZmVjdChpKTsKLSAgICAgICAgY29sbGVjdEVmZmVjdHMoaW4sIGFsbEVmZmVjdHMp
OwotICAgIH0KLSAgICByZXR1cm4gYWxsRWZmZWN0cy5zaXplKCk7Ci19CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0OworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRy
YXdpbmdSZWN0LnVuaXRlKGlucHV0LT5kcmF3aW5nUmVjdCgpKTsKIAotdW5zaWduZWQgRmlsdGVy
RWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0
PGNvbnN0IEZpbHRlckVmZmVjdCo+IGFsbEVmZmVjdHM7Ci0gICAgcmV0dXJuIGNvbGxlY3RFZmZl
Y3RzKHRoaXMsIGFsbEVmZmVjdHMpOworICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9QcmltaXRp
dmVTdWJyZWdpb24oZHJhd2luZ1JlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQg
RmlsdGVyRWZmZWN0OjphcHBseSgpCitGaWx0ZXJSZXN1bHQqIEZpbHRlckVmZmVjdDo6YXBwbHko
RmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAog
ewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNp
emUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMu
YXQoaSkuZ2V0KCk7Ci0gICAgICAgIGluLT5hcHBseSgpOwotICAgICAgICBpZiAoIWluLT5oYXNS
ZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBDb252ZXJ0IGlucHV0
IHJlc3VsdHMgdG8gdGhlIGN1cnJlbnQgZWZmZWN0J3MgY29sb3Igc3BhY2UuCi0gICAgICAgIHRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoaW4sIGkpOwotICAgIH0KLQotICAgIGRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0Nv
bG9yU3BhY2UpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmls
dGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpc
biAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24gPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJc
biAgYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3Vi
cmVnaW9uIDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0
IDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRl
ciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZpbHRlclNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1
dGlvbiAiIDw8IG1fZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKSk7Ci0KLSAgICBpZiAobV9hYnNv
bHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5n
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkpIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGlucHV0RWZmZWN0KGkpLT5j
b3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQWRkIHBs
YXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4K
LSAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyAgICByZXR1cm4gYXBwbHkob3V0cHV0LCBz
dGFjaywgc291cmNlSW1hZ2UsIGdlb21ldHJ5LCBGaWx0ZXJCb3VuZGFyeVNldCgpKTsKIH0KIAot
dm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKK0ZpbHRl
clJlc3VsdCogRmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtKEZpbHRlck91dHB1dCYgb3V0cHV0
LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5
U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11
bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVs
cy4KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRh
dGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKLSAgICBp
bnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CisgICAgYXV0byBwcmlt
aXRpdmVTdWJyZWdpb24gPSB0aGlzLT5wcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzLCBnZW9tZXRy
eSwgYm91bmRhcnlTZXQpOworICAgIGF1dG8gZHJhd2luZ1JlY3QgPSB0aGlzLT5kcmF3aW5nUmVj
dChpbnB1dHMsIGdlb21ldHJ5LCBwcmltaXRpdmVTdWJyZWdpb24pOworICAgIGF1dG8gYWJzb2x1
dGVEcmF3aW5nUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoZHJh
d2luZ1JlY3QpOworICAgIGF1dG8gcmVzdWx0Q29sb3JTcGFjZSA9IHRoaXMtPnJlc3VsdENvbG9y
U3BhY2UoaW5wdXRzKTsKIAotICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhl
bCwgYW5kIGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0
KSk7Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlM
ZW5ndGggPj0gNjQpIHsKLSAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsg
KHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8v
IEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNp
eHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOwotICAgICAgICAgICAgc2l4dGVlblBp
eGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVs
cy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChz
aXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAg
c2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4
dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0
ZWVuUGl4ZWxzKTsKLSAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKLSAgICAgICAgfSB3aGls
ZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKLQotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9
IDB4M2Y7Ci0gICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3Ro
IC8gNDsKLQotICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBh
bmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5Ci0gICAgd2hpbGUgKC0t
bnVtUGl4ZWxzID49IDApIHsKLSAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEg
cGl4ZWwKLSAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKLSAgICAgICAgLy8g
Q2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxv
Y2F0aW9uCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAoKnBpeGVsRGF0YSA+IGEpCi0gICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7Ci0g
ICAgICAgICAgICArK3BpeGVsRGF0YTsKLSAgICAgICAgfQotICAgICAgICAvLyBJbmNyZW1lbnQg
Zm9yIGFscGhhCi0gICAgICAgICsrcGl4ZWxEYXRhOwotICAgIH0KLX0KLQotdm9pZCBGaWx0ZXJF
ZmZlY3Q6OmNsZWFyUmVzdWx0KCkKLXsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gbnVsbHB0
cjsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotfQotCi12b2lkIEZpbHRl
ckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKLXsKLSAgICAvLyBDbGVhciBhbGwgcmVz
dWx0cywgcmVnYXJkbGVzcyB0aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBoYXMKLSAgICAvLyBhIHJl
c3VsdC4gQ2FuIGJlIHVzZWQgaWYgYW4gZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4K
LSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNp
Z25lZCBzaXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5j
bGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6
aW1hZ2VCdWZmZXJSZXN1bHQoKQotewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJl
YW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAi
IGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQp
Ci0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotCi0gICAgbV9pbWFn
ZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCksIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwg
bV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghbV9pbWFn
ZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRSZWN0IGRl
c3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0g
ICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3Rp
bmF0aW9uUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQ
aXhlbEJ1ZmZlcigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsK
LSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRS
ZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFj
ZSkKLXsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCgh
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBzY2FsZWRT
aXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8gY2hlY2tlZEFyZWEg
PSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChjaGVja2Vk
QXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8g
cGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNo
ZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3Bh
Y2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAg
ICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBzY2FsZWRTaXplLnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRT
aXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChjaGVja2VkQXJlYS5oYXNP
dmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gcGl4ZWxBcnJh
eSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVh
KTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgYXV0byByZXN1bHQgPSBvdXRwdXQuY3JlYXRl
RmlsdGVyUmVzdWx0KHByaW1pdGl2ZVN1YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGFic29sdXRlRHJh
d2luZ1JlY3Quc2l6ZSgpLCByZXN1bHRDb2xvclNwYWNlKTsKKyAgICBpZiAoIXJlc3VsdCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVs
QXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi12
b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRS
ZWN0LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVkUGFp
bnRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUu
c2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBk
ZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQg
YnkgdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3Qu
eSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8
IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBt
ZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAg
ICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhl
IHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1h
eFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8
IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3Qg
PSAwOwotICAgIGlmICh4T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwot
ICAgICAgICB4T3JpZ2luID0gMDsKLSAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1h
eFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICB4
RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9IHNjYWxl
ZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAwKSB7Ci0g
ICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwotICAgIH0KLSAg
ICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4gc2NhbGVkUGFp
bnRTaXplLmhlaWdodCgpKQotICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgp
OwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKLSAgICBpbnQgZGVzdGlu
YXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNvdXJjZVNj
YW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OwotICAgIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53
aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBz
b3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9y
aWdpbikgKiA0OwogCi0gICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1lbWNw
eShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3RpbmF0
aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwgKz0g
c291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsreU9yaWdpbjsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2
b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRT
aXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0
U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0
aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0
KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVz
dDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQg
PSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAg
IGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7
Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1h
Z2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0g
c291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQg
KyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRp
b25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNlQ29t
cG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsK
LSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJj
ZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1
NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbQorICAgICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIg
IiA8PCB0aGlzIDw8ICIgYXBwbHlQbGF0Zm9ybSgpOiIKKyAgICAgICAgPDwgIlxuICBwcmltaXRp
dmVTdWJyZWdpb24gIiA8PCBwcmltaXRpdmVTdWJyZWdpb24KKyAgICAgICAgPDwgIlxuICBkcmF3
aW5nUmVjdCAiIDw8IGRyYXdpbmdSZWN0CisgICAgICAgIDw8ICJcbiAgYWJzb2x1dGVEcmF3aW5n
UmVjdCAiIDw8IGFic29sdXRlRHJhd2luZ1JlY3QKKyAgICAgICAgPDwgIlxuICBmaWx0ZXIgcmVz
b2x1dGlvbiAiIDw8IGdlb21ldHJ5LnJlc29sdXRpb24oKSk7CisKKyNpZiBVU0UoQ09SRV9JTUFH
RSkKKyAgICBpZiAob3V0cHV0LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCkgeworICAgICAgICBpZiAoYXBwbHlDb3JlSW1hZ2UoKnJlc3VsdCwgaW5wdXRzLCBz
b3VyY2VJbWFnZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9
CiAjZW5kaWYKLX0KIAotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAg
ICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2Vf
QnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMu
aGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVz
OwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7
Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53
aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qu
cm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFf
UkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3Qg
dWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50
OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVl
KCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRh
KCk7Ci0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxw
aGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBv
bmVudFswXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7
Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4o
c291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMV0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
Ml0gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxw
aGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQorICAgIGlmIChhcHBseVNvZnR3YXJlKCpy
ZXN1bHQsIGlucHV0cywgc291cmNlSW1hZ2UsIGdlb21ldHJ5KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC5sZWFrUmVmKCk7CiAKLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVj
dDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKQotewotICAg
IC8vIEZJWE1FOiBVc2luZyBhbiBJbWFnZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBjb2xvciBzcGFj
ZSBjb252ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0bHkuCi0KLSAg
ICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXplKCkp
OwotICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGRl
c3RpbmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBz
dG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7
Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgYnVm
ZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBy
ZXR1cm4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdldENvbG9yU3BhY2UsICpi
dWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxwaGFGb3JtYXQp
OworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBG
aWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZl
ciwgY29uc3QgSW50UmVjdCYgcmVjdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBo
YUZvcm1hdCkKK1RleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBkaXJlY3RseSB1c2lu
ZyBQaXhlbEJ1ZmZlckNvbnZlcnNpb24uCi0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFu
IEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cg
dG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01v
ZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRl
cm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAg
IGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwg
cmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFG
b3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgdGFyZ2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVy
biBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7Ci19Ci0KLXZv
aWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGlu
IG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBj
b252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xv
clNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkUGl4ZWxC
dWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhl
bEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRl
ckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1w
ZWRBcnJheSYgZGVzdGluYXRpb24sIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkK
LXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwKLSAgICAvLyB3aGljaGV2ZXIgaXNu
J3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVs
QnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVs
QnVmZmVyKTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGlu
YXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxp
ZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsK
LSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwg
dGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVy
ICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYg
KCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNv
bnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZl
clJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNl
Q29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJ
bWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZm
ZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAg
ICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9Owot
ICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1
bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsK
LSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAg
ICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0g
ICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNy
ZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVVu
cHJlbXVsdGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihj
b2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0
aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2Us
IHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi12
b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkp
OwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0
ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRS
ZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1
ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1f
cmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQg
eyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdC
QTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsg
SW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1
dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNp
emVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotCi0gICAgICAgICAgICBBU1NFUlQobV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENv
bG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4
ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAo
IW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmRhdGEoKSwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXpl
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JT
cGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVs
QnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29w
eUltYWdlQnl0ZXMobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRp
b24sIHJlY3QpOwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQgJWR4JWQiLCBmaWx0ZXJOYW1lKCksIHRoaXMsIG1fYWJzb2x1
dGVQYWludFJlY3Quc2l6ZSgpLndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLmhl
aWdodCgpKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAg
QVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6
ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7
Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNp
emUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9y
ZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyUmVzdWx0LmdldCgpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmls
dGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZp
bHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQi
LCBmaWx0ZXJOYW1lKCksIHRoaXMpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMg
YWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIElu
dFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJU
KCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3Vs
dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3Jt
YXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhl
bEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7
Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLXN0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9u
bHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7
Ci0gICAgQVNTRVJUKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9h
YnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
cmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUo
KSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2Ug
fTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVh
dGUoZm9ybWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JT
cGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRlc3Rp
bmF0aW9uQ29sb3JTcGFjZSkKLXsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBk
ZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFj
ZSBjb252ZXJzaW9uCi0gICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24g
d2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0Ci0gICAgLy8gQU5E
IDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKLSAgICByZXR1cm4gZGVz
dGluYXRpb25Db2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZGVzdGluYXRpb25D
b2xvclNwYWNlOwotI2Vsc2UKLSAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNp
b24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25D
b2xvclNwYWNlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIENHIGhh
bmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFS
QU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQoKSB8
fCBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5u
ZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBjb2xvciBz
cGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMu
Ci0gICAgaW1hZ2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRlc3RpbmF0
aW9uQ29sb3JTcGFjZSk7Ci0KLSAgICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5hdGlvbkNv
bG9yU3BhY2U7Ci0KLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0
OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotI2VuZGlm
Ci19Ci0KLVRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGR1bXAgdGhlIHN1YlJlZ2lvbnMgb2YgdGhl
IGZpbHRlciBwcmltaXRpdmVzIGhlcmUgbGF0ZXIuIFRoaXMgaXNuJ3QKLSAgICAvLyBwb3NzaWJs
ZSBhdCB0aGUgbW9tZW50LCBiZWNhdXNlIHdlIG5lZWQgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlv
bnMgZnJvbSB0aGUgdGFyZ2V0IG9iamVjdC4KLSAgICAKLSAgICBpZiAocmVwcmVzZW50YXRpb25U
eXBlID09IFJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKSB7CisgICAgaWYgKHJlcHJlc2Vu
dGF0aW9uID09IEZpbHRlclJlcHJlc2VudGF0aW9uOjpEZWJ1Z2dpbmcpIHsKICAgICAgICAgVGV4
dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoImFscGhhIGltYWdlIiwgbV9hbHBoYUltYWdlKTsKICAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJvcGVyYXRpbmcgY29sb3JzcGFjZSIsIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVzdWx0IGNvbG9yc3BhY2UiLCBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwogICAgICAgICB0cyA8PCAiXG4iIDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJuIHRz
OwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWx0
ZXJFZmZlY3QmIGZpbHRlcikKLXsKLSAgICAvLyBVc2UgYSBuZXcgc3RyZWFtIGJlY2F1c2Ugd2Ug
d2FudCBtdWx0aWxpbmUgbW9kZSBmb3IgbG9nZ2luZyBmaWx0ZXJzLgotICAgIFRleHRTdHJlYW0g
ZmlsdGVyU3RyZWFtOwotICAgIGZpbHRlci5leHRlcm5hbFJlcHJlc2VudGF0aW9uKGZpbHRlclN0
cmVhbSwgRmlsdGVyRWZmZWN0OjpSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZyk7Ci0gICAg
Ci0gICAgcmV0dXJuIHRzIDw8IGZpbHRlclN0cmVhbS5yZWxlYXNlKCk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDEyZGVkMjY1YTY1NWMzN2U3N2UyY2Yw
NWI1Mjc3M2YyYjk2YjQ3MWMuLmRlOGExMzM3MDE0OGM4OTQ0YWUyYzA0ZTVhYTU2ZGQ1OWM2NzRl
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMjIsMjM3ICsyMiw0OSBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKLSNpbmNsdWRlICJEZXN0aW5h
dGlvbkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNs
YXNzIFRleHRTdHJlYW07Ci19CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlcjsK
LWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEltYWdlQnVmZmVyOwotCi10eXBlZGVmIFZlY3Rv
cjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwotCi1lbnVtIEZpbHRl
ckVmZmVjdFR5cGUgewotICAgIEZpbHRlckVmZmVjdFR5cGVVbmtub3duLAotICAgIEZpbHRlckVm
ZmVjdFR5cGVJbWFnZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlVGlsZSwKLSAgICBGaWx0ZXJFZmZl
Y3RUeXBlU291cmNlSW5wdXQKLX07CitjbGFzcyBGaWx0ZXJCb3VuZGFyeVNldDsKK2NsYXNzIEZp
bHRlckdlb21ldHJ5OwogCi1jbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxG
aWx0ZXJFZmZlY3Q+IHsKK2NsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlv
biB7CiBwdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7Ci0gICAgICAgIEJs
ZW5kLAotICAgICAgICBDb2xvck1hdHJpeCwKLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXIsCi0g
ICAgICAgIENvbXBvc2l0ZSwKLSAgICAgICAgQ29udm9sdmVNYXRyaXgsCi0gICAgICAgIERpZmZ1
c2VMaWdodGluZywKLSAgICAgICAgRGlzcGxhY2VtZW50TWFwLAotICAgICAgICBEcm9wU2hhZG93
LAotICAgICAgICBGbG9vZCwKLSAgICAgICAgR2F1c3NpYW5CbHVyLAotICAgICAgICBJbWFnZSwK
LSAgICAgICAgTGlnaHRpbmcsCi0gICAgICAgIE1lcmdlLAotICAgICAgICBNb3JwaG9sb2d5LAot
ICAgICAgICBPZmZzZXQsCi0gICAgICAgIFNwZWN1bGFyTGlnaHRpbmcsCi0gICAgICAgIFRpbGUs
Ci0gICAgICAgIFR1cmJ1bGVuY2UsCi0gICAgICAgIFNvdXJjZUFscGhhLAotICAgICAgICBTb3Vy
Y2VHcmFwaGljCi0gICAgfTsKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKLQotICAgIHZv
aWQgY2xlYXJSZXN1bHQoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwotCi0g
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiB1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZv
aWQgY29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBz
dGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbnVtYmVy
T2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7IH0K
LSAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3Q7Ci0gICAgCi0g
ICAgaW5saW5lIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMg
ZnVuY3Rpb24gbmVlZHMgcGxhdGZvcm0gc3BlY2lmaWMgY2hlY2tzLCBpZiB0aGUgbWVtb3J5IG1h
bmFnbWVudCBpcyBub3QgZG9uZSBieSBGaWx0ZXJFZmZlY3QuCi0gICAgICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0Ci0gICAgICAgICAgICB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
Ci0gICAgICAgICAgICB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICB9Ci0KLSAg
ICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JikgY29u
c3Q7Ci0gICAgSW50UmVjdCByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3Qg
SW50UmVjdCYpIGNvbnN0OwotICAgIAotICAgIC8vIFJlY3Vyc2VzIG9uIGlucHV0cy4KLSAgICBG
bG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KLSAgICAvLyBT
b2xpZCBibGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMuCi0gICAgYm9vbCBp
c0FscGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KLSAgICB2b2lkIHNl
dElzQWxwaGFJbWFnZShib29sIGFscGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFn
ZTsgfQotCi0gICAgSW50UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
YWJzb2x1dGVQYWludFJlY3Q7IH0KLSAgICB2b2lkIHNldEFic29sdXRlUGFpbnRSZWN0KGNvbnN0
IEludFJlY3QmIGFic29sdXRlUGFpbnRSZWN0KSB7IG1fYWJzb2x1dGVQYWludFJlY3QgPSBhYnNv
bHV0ZVBhaW50UmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25zdCB7
IHJldHVybiBtX21heEVmZmVjdFJlY3Q7IH0KLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29u
c3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVj
dFJlY3Q7IH0gCi0KLSAgICB2b2lkIGFwcGx5KCk7Ci0KLSAgICAvLyBDb3JyZWN0IGFueSBpbnZh
bGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVyIG9wZXJh
dGlvbi4KLSAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBwaXhlbCB2
YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBhbmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAvLyBPbmx5
IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3JtIGNv
cnJlY3Rpb24uCi0gICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgp
IHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0K
LSAgICB2aXJ0dWFsIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIEZpbHRlckVmZmVjdFR5cGVVbmtub3duOyB9Ci0KLSAgICB2aXJ0dWFsIEludE91dHNl
dHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIEludE91dHNldHMoKTsgfQotCi0gICAgZW51bSBj
bGFzcyBSZXByZXNlbnRhdGlvblR5cGUgeyBUZXN0T3V0cHV0LCBEZWJ1Z2dpbmcgfTsKLSAgICB2
aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUgPSBSZXByZXNlbnRhdGlvblR5cGU6OlRlc3RPdXRw
dXQpIGNvbnN0OwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIFNWRyBzcGVj
aWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgot
ICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1
NjE0LgotICAgIGJvb2wgaGFzWCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWDsgfQotICAgIHZvaWQg
c2V0SGFzWChib29sIHZhbHVlKSB7IG1faGFzWCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1ko
KSBjb25zdCB7IHJldHVybiBtX2hhc1k7IH0KLSAgICB2b2lkIHNldEhhc1koYm9vbCB2YWx1ZSkg
eyBtX2hhc1kgPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzV2lkdGg7IH0KLSAgICB2b2lkIHNldEhhc1dpZHRoKGJvb2wgdmFsdWUpIHsgbV9oYXNX
aWR0aCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzSGVpZ2h0OyB9Ci0gICAgdm9pZCBzZXRIYXNIZWlnaHQoYm9vbCB2YWx1ZSkgeyBtX2hhc0hl
aWdodCA9IHZhbHVlOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KLSAgICB2b2lk
IHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbikgeyBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbjsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNv
bnN0ID0gMDsKIAotICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1
cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RCb3VuZGFyaWVzKGNv
bnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5kYXJpZXMgPSBl
ZmZlY3RCb3VuZGFyaWVzOyB9CisgICAgdmlydHVhbCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIHJlc3VsdENvbG9yU3BhY2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJikgY29uc3QgeyBy
ZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAgICAgCi0gICAgdm9pZCBzZXRVbmNsaXBw
ZWRBYnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9hYnNvbHV0ZVVuY2xp
cHBlZFN1YnJlZ2lvbiA9IHI7IH0KLSAgICAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVz
ZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQpIGNvbnN0OwotICAgIAotICAgIFR5cGUgZmlsdGVy
RWZmZWN0Q2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7
IH0KLQotICAgIEZpbHRlciYgZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBjb25z
dCBGaWx0ZXImIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KLSAgICBib29s
IGNsaXBzVG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KLSAgICB2
b2lkIHNldENsaXBzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1
ZTsgfQotCiAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAgICAgdmlydHVh
bCB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KLSAg
ICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7
IHJldHVybiBtX3Jlc3VsdENvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0
Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9y
ZXN1bHRDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50
cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLSAgICB2
b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
Jik7Ci0gICAgCi0gICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0gICAgewotICAgICAgICBWZWN0b3I8ZmxvYXQ+IG5v
cm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tp
XSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9ybWFsaXpl
ZFZhbHVlczsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyJiwg
VHlwZSk7Ci0gICAgCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qg
PSAwOwotCi0gICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAg
c3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOwogCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3aWxsIG9u
bHkgb3BlcmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKLSAgICAvLyBh
bHBoYSBpbiBbMCwyNTVdIGFuZCBlYWNoIGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxwaGFdLgot
ICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0
JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3QgPSAwOwogCi0gICAgLy8g
SWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5
IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKCk7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIHZvaWQgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmly
dHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB1
c2luZyBGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb247CiAKLSAgICB2b2lkIGNvcHlJbWFn
ZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZl
cnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJl
Y3QmKTsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWlu
dDhDbGFtcGVkQXJyYXkmLCBQaXhlbEJ1ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYsIGNvbnN0IEludFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJl
Y3QmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgUGl4ZWxCdWZmZXImKTsKLSAgICAKKyAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3Vi
cmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Q7CiAKLSAgICBGaWx0ZXImIG1f
ZmlsdGVyOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKKyAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3Q7CiAKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1
bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdDsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJl
c3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVy
R2VvbWV0cnkmKSBjb25zdCBmaW5hbDsKIAotICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVj
dDsKLSAgICAKLSAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4g
SW4gU1ZHIHRoaXMgaXMgdGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRp
bmF0ZSBzcGFjZS4KLSAgICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIg
YmUgYmlnZ2VyIHRoYW4gbV9tYXhFZmZlY3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVj
dFJlY3Q7Ci0gICAgCi0gICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUg
YWNjb3JkaW5nIHRvIHRoZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRp
bmF0ZXMuCi0gICAgLy8gVGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8g
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uOworICAgIEZpbHRlclJlc3VsdCogYXBwbHlQbGF0Zm9ybShGaWx0
ZXJPdXRwdXQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5
U2V0JikgY29uc3Q7CiAKLSAgICAvLyB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBhY3R1
YWwgU1ZHRkUqRWxlbWVudC4gSXMgbmVlZGVkIHRvIGRldGVybWluZSB0aGUgc3VicmVnaW9uIG9m
IHRoZQotICAgIC8vIGZpbHRlciBwcmltaXRpdmUgb24gYSBsYXRlciBzdGVwLgotICAgIEZsb2F0
UmVjdCBtX2VmZmVjdEJvdW5kYXJpZXM7CisgICAgdmlydHVhbCBib29sIGFwcGx5U29mdHdhcmUo
RmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCA9IDA7CiAgICAg
Ci0gICAgLy8gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG1hcHBlZCB0byBhYnNvbHV0ZSBjb29y
ZGluYXRlcyBiZWZvcmUgY2xpcHBpbmcuCi0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVVbmNsaXBw
ZWRTdWJyZWdpb247Ci0KLSAgICBib29sIG1fYWxwaGFJbWFnZSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2hhc1ggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNZIHsgZmFsc2UgfTsKLSAgICBib29s
IG1faGFzV2lkdGggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNIZWlnaHQgeyBmYWxzZSB9Owot
Ci0gICAgLy8gU2hvdWxkIHRoZSBlZmZlY3QgY2xpcCB0byBpdHMgcHJpbWl0aXZlIHJlZ2lvbiwg
b3IgZXhwYW5kIHRvIHVzZSB0aGUgY29tYmluZWQgcmVnaW9uIG9mIGl0cyBpbnB1dHMuCi0gICAg
Ym9vbCBtX2NsaXBzVG9Cb3VuZHMgeyB0cnVlIH07Ci0KLSNpZiBFTkFCTEUoREVTVElOQVRJT05f
Q09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fb3Bl
cmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIH07
Ci0jZWxzZQotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2Ug
eyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OworI2lmIFVTRShDT1JFX0lNQUdFKQor
ICAgIHZpcnR1YWwgYm9vbCBhcHBseUNvcmVJbWFnZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAj
ZW5kaWYKLSAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9yZXN1bHRDb2xvclNwYWNlIHsgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKICAgICAKLSAgICBjb25zdCBUeXBlIG1fZmls
dGVyRWZmZWN0Q2xhc3NUeXBlOworICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGlu
Z0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwogfTsKIAotV0VC
Q09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IEZpbHRlckVmZmVjdCYpOwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RmlsdGVyRWZmZWN0KQorICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsg
cmV0dXJuIGZ1bmN0aW9uLnR5cGUoKSA+PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVNaW5pbXVtICYmIGZ1bmN0aW9uLnR5cGUoKSA8PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVNYXhpbXVtOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
ZGE4NTVjZGI5NjMxN2I4MmRlMzU2N2ZjMzFlNWI5ZTlhOWVjNjA1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNDggKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0Ogot
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKLQotI2lmIFVTRShDT1JFX0lNQUdF
KQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgiCi0jZW5kaWYKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVy
ZXI+IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUoYm9vbCBhY2NlbGVyYXRlZEZpbHRl
clJlbmRlcmluZ0VuYWJsZWQsIEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSNpZiBVU0Uo
Q09SRV9JTUFHRSkKLSAgICBpZiAoYWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKQot
ICAgICAgICByZXR1cm4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnRyeUNyZWF0ZShs
YXN0RWZmZWN0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGFjY2VsZXJhdGVkRmlsdGVyUmVu
ZGVyaW5nRW5hYmxlZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxhc3RFZmZlY3QpOwotI2VuZGlmCi0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLQotfSAvLyBuYW1zcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dFJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdFJlbmRlcmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUy
NDczNjFmNTNiM2MwOWVjYjU3MTMyMmI3NWE3NTczZTljYzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIg
KzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiU2V0
dGluZ3MuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGaWx0ZXJFZmZlY3RSZW5k
ZXJlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gdHJ5Q3JlYXRlKGJv
b2wsIEZpbHRlckVmZmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVy
RWZmZWN0JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
RmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJSZXN1bHQoKSA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB+RmlsdGVy
RWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgRmlsdGVy
RWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlclRvSW1h
Z2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3RWZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0VmVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzVmNGM4MzJjZTNhZTE2ZDll
YTkyMDljZjg3MmVkYjc4YzBjYjc5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0VmVjdG9yLmgKQEAgLTAsMCAr
MSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGaWx0ZXJFZmZlY3Q7CisKK3VzaW5nIEZpbHRlckVmZmVjdFZlY3RvciA9
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iN2Q1NTc2NWEzOTZkOTlhYjAyMTBiM2IxODBiYThm
OWUyMGNhMmQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiRmlsdGVyUmVwcmVzZW50YXRpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQu
aCIKKyNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVyT3V0cHV0Owor
CitjbGFzcyBGaWx0ZXJGdW5jdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckZ1bmN0aW9u
PiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIENT
U0ZpbHRlciwKKyAgICAgICAgU1ZHRmlsdGVyLAorCisgICAgICAgIEZFTWluaW11bSwKKworICAg
ICAgICBGRUJsZW5kID0gRkVNaW5pbXVtLAorICAgICAgICBGRUNvbG9yTWF0cml4LAorICAgICAg
ICBGRUNvbXBvbmVudFRyYW5zZmVyLAorICAgICAgICBGRUNvbXBvc2l0ZSwKKyAgICAgICAgRkVD
b252b2x2ZU1hdHJpeCwKKyAgICAgICAgRkVEaWZmdXNlTGlnaHRpbmcsCisgICAgICAgIEZFRGlz
cGxhY2VtZW50TWFwLAorICAgICAgICBGRURyb3BTaGFkb3csCisgICAgICAgIEZFRmxvb2QsCisg
ICAgICAgIEZFR2F1c3NpYW5CbHVyLAorICAgICAgICBGRUltYWdlLAorICAgICAgICBGRU1lcmdl
LAorICAgICAgICBGRU1vcnBob2xvZ3ksCisgICAgICAgIEZFT2Zmc2V0LAorICAgICAgICBGRVNw
ZWN1bGFyTGlnaHRpbmcsCisgICAgICAgIEZFVGlsZSwKKyAgICAgICAgRkVUdXJidWxlbmNlLAor
ICAgICAgICBTb3VyY2VBbHBoYSwKKyAgICAgICAgU291cmNlR3JhcGhpYywKKworICAgICAgICBG
RU1heGltdW0gPSBTb3VyY2VHcmFwaGljCisgICAgfTsKKworICAgIEZpbHRlckZ1bmN0aW9uKFR5
cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkg
Y29uc3QgeyByZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0dWFsIEZpbHRlclJlc3VsdCogYXBwbHko
RmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNv
dXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2
aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiA9IEZpbHRlclJlcHJlc2VudGF0aW9uOjpUZXN0
T3V0cHV0KSBjb25zdCA9IDA7CisgICAgCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4geworICAg
IHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NG
aWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIs
CisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4LAorICAgICAg
ICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwKKyAg
ICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlLAorICAgICAg
ICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAgICAg
ICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAgICAgIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJi
dWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxw
aGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGlj
CisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg1YzY2MGVhNzk5ODNhMDdhMTcyYzBiMjdkYTE4YjJkY2M0YTA4YmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckdlb21ldHJ5LmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckJvdW5k
YXJ5U2V0LmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZpbHRlckdlb21ldHJ5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCisgICAgICAgIDogbV9maWx0ZXJSZWdp
b24oZmlsdGVyUmVnaW9uKQorICAgICAgICAsIG1fc291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdl
UmVjdCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RmlsdGVyR2VvbWV0cnkoKSA9IGRl
ZmF1bHQ7CisKKyAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
aWx0ZXJSZWdpb247IH0KKyAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2VJbWFnZVJlY3Q7IH0KKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3Jt
IGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisgICAgdmlydHVhbCBG
bG9hdFNpemUgcmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwg
RmlsdGVyQm91bmRhcnlTZXQgYm91bmRhcnlTZXQoRmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25l
ZCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjb252ZXJ0
VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QpIGNvbnN0
IHsgcmV0dXJuIGRyYXdpbmdSZWN0OyB9CisgICAgdmlydHVhbCBGbG9hdFNpemUgY29udmVydFRv
QWJzb2x1dGVDb29yZGluYXRlcyhjb25zdCBGbG9hdFNpemUmIGRyYXdpbmdTaXplKSBjb25zdCB7
IHJldHVybiBkcmF3aW5nU2l6ZTsgfQorCisgICAgRmxvYXRSZWN0IGNvbnZlcnRUb0Fic29sdXRl
UmVzdWx0Q29vcmRpbmF0ZXMoY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgY29uc3QgRmxv
YXRSZWN0JiByZXN1bHRSZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBpbWFnZVJlY3Qg
PSBkcmF3aW5nUmVjdDsKKyAgICAgICAgaW1hZ2VSZWN0Lm1vdmVCeSgtcmVzdWx0UmVjdC5sb2Nh
dGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW1h
Z2VSZWN0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSByZXNvbHZlVG9GaWx0ZXJD
b29yZGluYXRlcyhjb25zdCBGbG9hdFNpemUmIGRyYXdpbmdTaXplKSBjb25zdCB7IHJldHVybiBk
cmF3aW5nU2l6ZTsgfQorICAgIAorICAgIHZpcnR1YWwgRmxvYXRTaXplIHJlc29sdmVUb0Fic29s
dXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRTaXplJiBkcmF3aW5nU2l6ZSkgY29uc3QKKyAgICB7
CisgICAgICAgIGF1dG8gcmVzb2x2ZWREcmF3aW5nUmVjdCA9IHJlc29sdmVUb0ZpbHRlckNvb3Jk
aW5hdGVzKGRyYXdpbmdTaXplKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0Fic29sdXRlQ29v
cmRpbmF0ZXMocmVzb2x2ZWREcmF3aW5nUmVjdCk7CisgICAgfQorCisgICAgdmlydHVhbCBGbG9h
dFJlY3QgY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1Jl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAorICAgIHsKKyAg
ICAgICAgYXV0byBjbGlwcGVkRHJhd2luZ1JlY3QgPSBkcmF3aW5nUmVjdDsKKyAgICAgICAgY2xp
cHBlZERyYXdpbmdSZWN0LmludGVyc2VjdChwcmltaXRpdmVTdWJyZWdpb24pOworICAgICAgICBy
ZXR1cm4gY2xpcHBlZERyYXdpbmdSZWN0OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEZsb2F0
UmVjdCBtX2ZpbHRlclJlZ2lvbjsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTRlYzgwYzI2Yzk3NWUyYTdhZmU2YzQ2NTk5ZGE4NTA2N2JjN2NkYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0
LmNwcApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQu
aCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQo
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQorICAgIDogbV9yZW5kZXJpbmdNb2RlKHJlbmRl
cmluZ01vZGUpCit7Cit9CisKK1JlZlB0cjxGaWx0ZXJSZXN1bHQ+IEZpbHRlck91dHB1dDo6Y3Jl
YXRlRmlsdGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25z
dCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJuIEZp
bHRlclJlc3VsdDo6Y3JlYXRlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGxvZ2lj
YWxTaXplLCBtX3JlbmRlcmluZ01vZGUsIDEsIGNvbG9yU3BhY2UpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck91dHB1dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YWEwZGYzMzI0M2ExNzA0NDAz
N2EyNmNlMTk2YzQ5YjQwNjk5OTc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaApAQCAtMCwwICsxLDUzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyR2VvbWV0cnk7CitjbGFz
cyBGaWx0ZXJSZXN1bHQ7CitjbGFzcyBGaWx0ZXJGdW5jdGlvbjsKKworY2xhc3MgRmlsdGVyT3V0
cHV0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBSZXN1bHRzID0gSGFzaE1hcDxSZWY8Y29uc3QgRmls
dGVyRnVuY3Rpb24+LCBSZWY8RmlsdGVyUmVzdWx0Pj47CisKKyAgICBGaWx0ZXJPdXRwdXQoUmVu
ZGVyaW5nTW9kZSk7CisKKyAgICBSZXN1bHRzJiByZXN1bHRzKCkgeyByZXR1cm4gbV9yZXN1bHRz
OyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJpbmdNb2RlOyB9CisKKyAgICBSZWZQdHI8RmlsdGVyUmVzdWx0PiBjcmVhdGVGaWx0ZXJS
ZXN1bHQoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVj
dCYgZHJhd2luZ1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYpOworCitwcml2YXRlOgorICAgIFJlc3VsdHMgbV9yZXN1bHRzOwor
ICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkYmZmN2Q4
MDQ3Y2VmOWVmNjNhMzZlY2MzNWU1ZTliMjAxMWNlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9u
LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xh
c3MgRmlsdGVyUmVwcmVzZW50YXRpb24gOiB1aW50OF90IHsKKyAgICBUZXN0T3V0cHV0LAorICAg
IERlYnVnZ2luZworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY0YTI1NGRhMDhmM2VjMTIxZTQ4MjhjZGE3Yjg1NmZiMDU5YThmYTAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlclJlc3VsdC5jcHAKQEAgLTAsMCArMSwzOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZpbHRlclJlc3VsdC5oIgorCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyNpbmNsdWRlICJG
aWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIKKyNlbmRpZgorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQorI2luY2x1ZGUgPGFybV9uZW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVS
QVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEZpbHRlclJlc3VsdD4gRmlsdGVyUmVzdWx0OjpjcmVh
dGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYg
ZHJhd2luZ1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKHByaW1pdGl2ZVN1YnJlZ2lvbi5pc0Vt
cHR5KCkgfHwgZHJhd2luZ1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGxvZ2ljYWxTaXpl
KSk7CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRl
clJlc3VsdENvcmVJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0LCBsb2dpY2Fs
U2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKSk7CisjZW5k
aWYKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0ZXJSZXN1bHRTb2Z0d2FyZShwcmltaXRp
dmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0LCBsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKSk7Cit9CisKK0ZpbHRlclJlc3VsdDo6RmlsdGVyUmVz
dWx0KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3Qm
IGRyYXdpbmdSZWN0LCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiBjb2xvclNwYWNlKQorICAgIDogbV9wcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0
aXZlU3VicmVnaW9uKQorICAgICwgbV9kcmF3aW5nUmVjdChkcmF3aW5nUmVjdCkKKyAgICAsIG1f
bG9naWNhbFNpemUobG9naWNhbFNpemUpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5n
TW9kZSkKKyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1f
Y29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlw
bHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0Uo
QUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7
CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lk
dGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dC
eXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0
aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdo
dCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlUHJl
bXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxz
ZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Cisg
ICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVh
KCkgKiA0KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9
IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQp
IHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBd
KSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRp
Y19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50
WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFs
cGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgY29weVVucHJl
bXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNp
ZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgo
KSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNp
emUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNy
Yy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVz
dC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXpl
LmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdklt
YWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdz
KTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRh
dGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRT
aXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29t
cG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQg
PCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAg
ICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7CisgICAgICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29t
cG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBo
YTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBd
ID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAgICAgICAgfQorICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0g
NDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30K
Kworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJ
ZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIHJldHVy
biBhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQg
PyBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyIDogbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZm
ZXI7Cit9CisKK1BpeGVsQnVmZmVyKiBGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgYXV0byYgcGl4ZWxCdWZmZXIgPSBw
aXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KTsKKyAgICBpZiAocGl4ZWxCdWZmZXIpCisg
ICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKworICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fY29sb3JTcGFj
ZSB9OworCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkp
IHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9y
bWF0LCB7IEludFBvaW50KCksIEludFNpemUobV9sb2dpY2FsU2l6ZSkgfSk7CisgICAgICAgIGlm
ICghcGl4ZWxCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworICAgIH0KKyAgICAKKyAgICBJbnRTaXplIHNjYWxl
ZFNpemUobV9sb2dpY2FsU2l6ZSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcoc2NhbGVkU2l6ZSkpOworICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOworCisgICAgcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1h
dCwgc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShw
aXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCktPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisgICAgZWxzZSBp
ZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKSkKKyAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShwaXhlbEJ1ZmZlcklmRXhp
c3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpLT5kYXRhKCksIHBpeGVs
QnVmZmVyLT5kYXRhKCksIHNjYWxlZFNpemUpOworCisgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52
YWx1ZSgpOworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlclJlc3VsdDo6Z2V0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50
UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3Bh
Y2UpCit7CisgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQo
IUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CisgICAgc2NhbGVk
U2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBhdXRvIGNoZWNrZWRBcmVhID0g
c2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAoY2hlY2tlZEFy
ZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBh
dXRvIHBpeGVsQnVmZmVyID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQoY2hlY2tlZEFyZWEpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgY29weVBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQs
IHJlY3QsIGNvbG9yU3BhY2UpOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKK30KKworYm9vbCBG
aWx0ZXJSZXN1bHQ6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkgY29uc3QKK3sKKyNp
ZiBVU0UoQ0cpCisgICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVl
ZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCisgICAgLy8gV2Ug
b25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBk
aWZmZXJlbnQgaW4gdGhlIGlucHV0CisgICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1
bGF0aW5nIHJhdyBwaXhlbHMKKyAgICByZXR1cm4gY29sb3JTcGFjZSAmJiBtX2NvbG9yU3BhY2Ug
IT0gKmNvbG9yU3BhY2U7CisjZWxzZQorICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29u
dmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRworICAgIFVOVVNFRF9QQVJBTShjb2xvclNw
YWNlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6
OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAg
ICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdCk7CisgICAgc2NhbGVkUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisKKyAgICBJbnRTaXplIHNjYWxlZFBhaW50U2l6ZShtX2xvZ2ljYWxTaXpl
KTsKKyAgICBzY2FsZWRQYWludFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5v
dCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3QueCgp
IDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwgc2NhbGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQ
YWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5o
ZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRp
b24ubGVuZ3RoKCkpOworCisgICAgLy8gRWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90
IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9
IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQ
YWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVp
Z2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB4T3JpZ2luID0gc2NhbGVkUmVjdC54
KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBpZiAoeE9yaWdpbiA8IDApIHsKKyAgICAgICAg
eERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB4
RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7CisgICAgaWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUu
d2lkdGgoKSkKKyAgICAgICAgeEVuZCA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpOworCisgICAg
aW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsKKyAgICBpbnQgeURlc3QgPSAwOworICAgIGlm
ICh5T3JpZ2luIDwgMCkgeworICAgICAgICB5RGVzdCA9IC15T3JpZ2luOworICAgICAgICB5T3Jp
Z2luID0gMDsKKyAgICB9CisgICAgaW50IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFkoKTsKKyAgICBp
ZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgeUVuZCA9IHNjYWxl
ZFBhaW50U2l6ZS5oZWlnaHQoKTsKKworICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAq
IDQ7CisgICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSBzY2FsZWRSZWN0LndpZHRoKCkgKiA0
OworICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpICogNDsK
KyAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5
RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OworICAgIGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIHNjYWxlZFBhaW50
U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKKworICAgIHdoaWxlICh5T3JpZ2luIDwgeUVu
ZCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUp
OworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7CisgICAg
ICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOworICAgICAgICArK3lPcmlnaW47Cisg
ICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJSZXN1bHQ6OmdldENv
bnZlcnRlZFBpeGVsQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgRGVzdGluYXRpb25D
b2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXpl
ID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICAvLyBDcmVhdGUg
YW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBD
RyB0byBoYW5kbGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgorICAgIGF1dG8gY29udmVydGVkSW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBpZiAoIWNvbnZlcnRlZEltYWdlQnVmZmVyKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBp
bnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgor
ICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGltYWdl
QnVmZmVyLCByZWN0KTsKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1h
dCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlIH07CisgICAgcmV0dXJuIGNvbnZlcnRl
ZEltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOworfQorCitzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVy
KFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZv
cm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAgSW50
UmVjdCByZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7CisgICAgcmVjdC5zY2Fs
ZSgxIC8gbV9yZXNvbHV0aW9uU2NhbGUpOworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisKKyAgICAvLyBDcmVhdGUgYW4g
SW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKKyAgICBhdXRvIGltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgaW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBy
ZWN0KTsKKyAgICByZXR1cm4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBh
bHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7Cit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojpj
b3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBhdXRvKiBw
aXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpID8gJnBpeGVsQnVm
ZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpLnZhbHVlKCkgOiBudWxscHRyOworCisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikgeworICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VD
b252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252
ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAgICAgICAgIGlmIChhdXRvIGltYWdl
QnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7CisgICAgICAgICAgICAgICAgSW50UmVj
dCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShtX2xvZ2ljYWxTaXplKSB9OworICAg
ICAgICAgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVk
UGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgKmNvbG9yU3BhY2Up
KQorICAgICAgICAgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZl
ci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSB0aGlz
LT5waXhlbEJ1ZmZlcihhbHBoYUZvcm1hdCk7CisgICAgfQorCisgICAgaWYgKCFwaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQ
aXhlbEJ1ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFG
b3JtYXQsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRl
ZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZUJ5dGVzKHBpeGVsQnVmZmVyLT5kYXRhKCksIGRl
c3RpbmF0aW9uLCBzcmNSZWN0KTsKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcnJlY3RQcmVt
dWx0aXBsaWVkUGl4ZWxCdWZmZXIoKQoreworICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVs
dGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxz
LgorICAgIGlmICghbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkUGl4
ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRh
dGEoKTsKKyAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CisK
KyAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBw
aXhlbHMKKyAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOworCisjaWYgSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7Cisg
ICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVuZ3Ro
ICYgfjB4M2YpOworICAgICAgICBkbyB7CisgICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVs
RGF0YSBieSA2NC4KKyAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0gdmxk
NHFfdTgocGl4ZWxEYXRhKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0gdm1p
bnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAg
ICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxb
MV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFs
WzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFsWzNd
KTsKKyAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7CisgICAg
ICAgICAgICBwaXhlbERhdGEgKz0gNjQ7CisgICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8IGxh
c3RQaXhlbCk7CisKKyAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOworICAgICAgICBp
ZiAoIXBpeGVsQXJyYXlMZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKKyAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7CisKKyAgICAvLyBJ
dGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBjb2xv
ciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQorICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAwKSB7
CisgICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCisgICAgICAgIHVp
bnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAgICAgIC8vIENsYW1wIGVhY2ggY29tcG9u
ZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgorICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgaWYgKCpwaXhlbERhdGEg
PiBhKQorICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOworICAgICAgICAgICAgKytwaXhl
bERhdGE7CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQorICAgICAg
ICArK3BpeGVsRGF0YTsKKyAgICB9Cit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojp0cmFuc2Zvcm1U
b0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisjaWYgVVNF
KENHKQorICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxs
eS4KKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisjZWxzZQorICAgIGlmIChjb2xvclNw
YWNlID09IG1fY29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFdl
IGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZl
cnNpb24gYnkgYWRkaW5nCisgICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9y
IHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgorICAgIGlmIChhdXRvIGltYWdlQnVmZmVy
ID0gdGhpcy0+aW1hZ2VCdWZmZXIoKSkKKyAgICAgICAgaW1hZ2VCdWZmZXItPnRyYW5zZm9ybUNv
bG9yU3BhY2UobV9jb2xvclNwYWNlLCBjb2xvclNwYWNlKTsKKworICAgIG1fY29sb3JTcGFjZSA9
IGNvbG9yU3BhY2U7CisgICAgbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVs
bG9wdDsKKyAgICBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyNl
bmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NGRkNmM5NDQwNmRhOWFhMjZjMzIxMjMxNTZhNDViOWU5MjBmMDYwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1
bHQuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVs
QnVmZmVyOworCitjbGFzcyBGaWx0ZXJSZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJS
ZXN1bHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlclJlc3VsdD4gY3JlYXRl
KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRy
YXdpbmdSZWN0LCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisg
ICAgdmlydHVhbCB+RmlsdGVyUmVzdWx0KCkgPSBkZWZhdWx0OworCisgICAgRmxvYXRSZWN0IHBy
aW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9
CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nUmVj
dDsgfQorCisgICAgRmxvYXRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dp
Y2FsU2l6ZTsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQorICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgYm9vbCBp
c0FscGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KKyAgICB2b2lkIHNl
dElzQWxwaGFJbWFnZShib29sIGFscGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFn
ZTsgfQorCisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhp
c3RzKCkgPSAwOworICAgIHZpcnR1YWwgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgPSAwOwor
CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZFeGlzdHMoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQ
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lk
IGNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJl
bXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIAorICAgIHZvaWQgY29ycmVjdFByZW11
bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERl
c3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKK3Byb3RlY3RlZDoKKyAgICBGaWx0ZXJSZXN1bHQoY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2lu
Z1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBi
b29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFs
PERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pIGNvbnN0OworICAgIHZvaWQgY29weUltYWdlQnl0ZXMo
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsK
KyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQ
aXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSkgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgbV9wcmltaXRpdmVTdWJyZWdpb247CisgICAgRmxv
YXRSZWN0IG1fZHJhd2luZ1JlY3Q7CisKKyAgICBGbG9hdFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAg
ICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25T
Y2FsZTsKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworCisgICAgYm9v
bCBtX2FscGhhSW1hZ2UgeyBmYWxzZSB9OworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK307CisKK3VzaW5nIEZpbHRlclJl
c3VsdFZlY3RvciA9IFZlY3RvcjxSZWY8RmlsdGVyUmVzdWx0Pj47CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVzdWx0VmVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdFZlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4MzE1MWI5ODI0
ZjYyMjlmZGI0OWZiMDU2NzJmODNjNzZmNWNhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdFZlY3Rvci5oCkBA
IC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyUmVzdWx0OworCit1c2luZyBGaWx0ZXJSZXN1bHRW
ZWN0b3IgPSBWZWN0b3I8UmVmPEZpbHRlclJlc3VsdD4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAppbmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2
YTc1MDM4NzkxMjhmNTRiNDRiLi40YmM2YmM3MWM4NWRmYjFhZTM5MWRlYjI0M2RjODE0NTc1ZGIw
YzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM2LDEyICszNiwxMiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5n
RGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3Zv
aWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3Qm
LCBQYWludGluZ0RhdGEmKQogewotICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZm
ZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHko
KSkpOwotICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNw
YWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBw
ZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2Vy
U3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQ
b3NpdGlvbi55KCkgfSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0g
bV9idWZmZXJQb3NpdGlvbi54KCkpOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0
ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlv
bi54eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBt
X3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQ
b2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVy
KHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91
c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFw
cGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CiB9CiAKIExpZ2h0U291cmNlOjpDb21w
dXRlZExpZ2h0aW5nRGF0YSBQb2ludExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0Rh
dGEoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQg
eikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2Zm
ZjkwOTBhZDZjZjNhMy4uNGM4ZDUyOGEyNGMyNDk1YmU4MWEyZTY0Mjc0ZjQzMDRiM2FkMzFkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VBbHBoYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIwLDYwICsyMSw0NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNvdXJjZUFs
cGhhLmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVJlZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZShGaWx0ZXJF
ZmZlY3QmIHNvdXJjZUVmZmVjdCkKK1JlZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0
ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoKSk7CiB9CiAKLWNvbnN0
IEF0b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKK1NvdXJjZUFscGhhOjpTb3Vy
Y2VBbHBoYSgpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6U291cmNlQWxwaGEpCiB7Ci0gICAg
c3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVj
dE5hbWUoIlNvdXJjZUFscGhhIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkKK2NvbnN0IEF0b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZl
Y3ROYW1lKCkKIHsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIlNvdXJjZUFscGhhIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOworICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291
cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIFNvdXJjZUFs
cGhhOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFj
aywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZp
bHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0
SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRl
eHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgp
KTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlciA9IGlucHV0RWZmZWN0KDApLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlm
ICghaW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBv
dXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0Owog
Ci0gICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6
OmJsYWNrKTsKLSAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIs
IEludFBvaW50KCksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsKKyAgICByZXR1
cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5k
YXJ5U2V0KTsKIH0KIAotVGV4dFN0cmVhbSYgU291cmNlQWxwaGE6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKK1RleHRTdHJl
YW0mIFNvdXJjZUFscGhhOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltTb3Vy
Y2VBbHBoYV1cbiI7CiAgICAgcmV0dXJuIHRzOwogfQogCi1Tb3VyY2VBbHBoYTo6U291cmNlQWxw
aGEoRmlsdGVyRWZmZWN0JiBzb3VyY2VFZmZlY3QpCi0gICAgOiBGaWx0ZXJFZmZlY3Qoc291cmNl
RWZmZWN0LmZpbHRlcigpLCBUeXBlOjpTb3VyY2VBbHBoYSkKLXsKLSAgICBzZXRPcGVyYXRpbmdD
b2xvclNwYWNlKHNvdXJjZUVmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlucHV0
RWZmZWN0cygpLmFwcGVuZCgmc291cmNlRWZmZWN0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5oCmluZGV4IDY2MjlhMzY3ZmQ0MzI0MmQxYzRhYWRlNjRjNTYxZTg2NGEz
OTQ5MGYuLjM4OWVjYjNiZmNkNjQ0NWY1NmU2N2IyNThiYzY0ZTViMWZiMjUxMDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE3LDggKzE4LDcg
QEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU291cmNl
QWxwaGFfaAotI2RlZmluZSBTb3VyY2VBbHBoYV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogCkBAIC0yNiwyMSArMjYsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBTb3VyY2VBbHBoYSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOiAg
ICAgICAgCi0gICAgc3RhdGljIFJlZjxTb3VyY2VBbHBoYT4gY3JlYXRlKEZpbHRlckVmZmVjdCYp
OworICAgIHN0YXRpYyBSZWY8U291cmNlQWxwaGE+IGNyZWF0ZSgpOwogCiAgICAgc3RhdGljIGNv
bnN0IEF0b21TdHJpbmcmIGVmZmVjdE5hbWUoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBT
b3VyY2VBbHBoYShGaWx0ZXJFZmZlY3QmKTsKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVm
ZmVjdFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlU291cmNl
SW5wdXQ7IH0KKyAgICBTb3VyY2VBbHBoYSgpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92
ZXJyaWRlOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiB9OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNvdXJj
ZUFscGhhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IDg4YTM2YTQxMDI2YmQzYTU4NTQ0Nzgy
MDI3NGMxMTA3ZDc4MzkyZTkuLjg4ZjY1ZmZlM2NmMWRlZmI3MzhkNzY2OTEzNGI3ODkzNzJmNmRl
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjAsMTggKzIxLDIyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U291cmNlR3JhcGhpYy5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0
ZXJPdXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8U291cmNlR3JhcGhpYz4gU291cmNl
R3JhcGhpYzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJj
ZUdyYXBoaWM6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3Jh
cGhpYygpKTsKK30KKworU291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYygpCisgICAgOiBGaWx0
ZXJFZmZlY3QoVHlwZTo6U291cmNlR3JhcGhpYykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTb3VyY2VHcmFwaGljKGZpbHRlcikpOwogfQogCiBjb25zdCBBdG9tU3RyaW5nJiBTb3VyY2VH
cmFwaGljOjplZmZlY3ROYW1lKCkKQEAgLTQwLDI3ICs0NSwyMCBAQCBjb25zdCBBdG9tU3RyaW5n
JiBTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCkKICAgICByZXR1cm4gc19lZmZlY3ROYW1lOwog
fQogCi12b2lkIFNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zs
b2F0UmVjdCBTb3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0CiB7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBGbG9hdFJl
Y3QgcGFpbnRSZWN0ID0gZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpOwotICAgIHBhaW50UmVjdC5z
Y2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNv
bHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QocGFpbnRSZWN0KSk7CisgICAgcmV0dXJuIGdlb21ldHJ5LnNvdXJjZUltYWdlUmVjdCgp
OwogfQogCi12b2lkIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0
ZXJSZXN1bHQqIFNvdXJjZUdyYXBoaWM6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBj
b25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAgICBJbWFn
ZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWF